package cmds import ( "os" "os/user" "strconv" "syscall" ) func test(args []string) int { if len(args) <= 2 { return 1 } fi, err := os.Lstat(args[2]) c, _ := user.Current() if err != nil { return 1 } switch args[1] { case "-e": return 0 case "-f": if !fi.IsDir() { return 0 } break case "-d": if fi.IsDir() { return 0 } break case "-r": if fi.Mode().Perm() & 0400 != 0 { return 0 } break case "-w": if fi.Mode().Perm() & 0200 != 0 { return 0 } break case "-x": if fi.Mode().Perm() & 0100 != 0 { return 0 } break case "-S": if fi.Size() > 0 { return 0 } break case "-L": if fi.Mode() & os.ModeSymlink != 0 { return 0 } break case "-O": s := fi.Sys().(*syscall.Stat_t) if c.Uid == strconv.Itoa(int(s.Uid)) { return 0 } break case "-G": s := fi.Sys().(*syscall.Stat_t) if c.Gid == strconv.Itoa(int(s.Gid)) { return 0 } break } return 1 }