diff --git a/internal/fsext/owner_others.go b/internal/fsext/owner_others.go new file mode 100644 index 0000000000000000000000000000000000000000..3900f501e0d77fa80089410eca890a04a0882dbf --- /dev/null +++ b/internal/fsext/owner_others.go @@ -0,0 +1,24 @@ +//go:build !windows + +package fsext + +import ( + "os" + "syscall" +) + +// Owner retrieves the user ID of the owner of the file or directory at the +// specified path. +func Owner(path string) (int, error) { + info, err := os.Stat(path) + if err != nil { + return 0, err + } + var uid int + if stat, ok := info.Sys().(*syscall.Stat_t); ok { + uid = int(stat.Uid) + } else { + uid = os.Getuid() + } + return uid, nil +} diff --git a/internal/fsext/owner_windows.go b/internal/fsext/owner_windows.go new file mode 100644 index 0000000000000000000000000000000000000000..107cda009b5fc152cba3200271c7145ff3227a39 --- /dev/null +++ b/internal/fsext/owner_windows.go @@ -0,0 +1,9 @@ +//go:build windows + +package fsext + +// Owner retrieves the user ID of the owner of the file or directory at the +// specified path. +func Owner(path string) (int, error) { + return -1, nil +}