Simplified file structure

This commit is contained in:
Eduard Urbach 2024-08-07 19:39:10 +02:00
parent cacee7260a
commit a466281307
Signed by: eduard
GPG key ID: 49226B848C78F6C8
219 changed files with 453 additions and 457 deletions

61
src/fs/Walk.go Normal file
View file

@ -0,0 +1,61 @@
package fs
import (
"syscall"
"unsafe"
)
// Walk calls your callback function for every file name inside the directory.
// It doesn't distinguish between files and directories.
func Walk(directory string, callBack func(string)) error {
fd, err := syscall.Open(directory, 0, 0)
if err != nil {
return err
}
defer syscall.Close(fd)
buffer := make([]byte, 1024)
for {
n, err := syscall.ReadDirent(fd, buffer)
if err != nil {
return err
}
if n <= 0 {
break
}
readBuffer := buffer[:n]
for len(readBuffer) > 0 {
dirent := (*syscall.Dirent)(unsafe.Pointer(&readBuffer[0]))
readBuffer = readBuffer[dirent.Reclen:]
// Skip deleted files
if dirent.Ino == 0 {
continue
}
// Skip hidden files
if dirent.Name[0] == '.' {
continue
}
for i, c := range dirent.Name {
if c != 0 {
continue
}
bytePointer := (*byte)(unsafe.Pointer(&dirent.Name[0]))
name := unsafe.String(bytePointer, i)
callBack(name)
break
}
}
}
return nil
}