1 // sgodup -- File deduplication utility
2 // Copyright (C) 2020-2024 Sergey Matveev <stargrave@stargrave.org>
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program. If not, see <http://www.gnu.org/licenses/>.
26 type FileInode struct {
33 func walker(c chan FileInode, dirPath string) {
34 dirFd, err := os.Open(dirPath)
39 fis, err := dirFd.Readdir(1 << 10)
46 for _, fi := range fis {
47 stat := fi.Sys().(*syscall.Stat_t)
48 if fi.Mode().IsRegular() {
50 path.Join(dirPath, fi.Name()),
54 } else if fi.IsDir() {
55 walker(c, path.Join(dirPath, fi.Name()))
59 if err = dirFd.Close(); err != nil {
64 func walk(dirPath string) chan FileInode {
65 c := make(chan FileInode, 1<<10)