From d45666450ea616ef44e1ba92e60ff02c1af70c11 Mon Sep 17 00:00:00 2001 From: Sam Abradi Date: Wed, 10 Sep 2014 14:13:59 -0400 Subject: [PATCH] now there are some command flags --- ls.go | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 7 deletions(-) diff --git a/ls.go b/ls.go index 4022b26..42cadd1 100644 --- a/ls.go +++ b/ls.go @@ -3,20 +3,74 @@ package main import ( "io/ioutil" "fmt" -// "encoding/json" -// "os" "flag" + "log" + "syscall" + "strconv" ) +func get_fileinfo(f string, size bool, mode bool, inode bool) string{ + var stat syscall.Stat_t + var ret string + ret = "{\"name\":\"" + f + "\"" + if err := syscall.Stat(f, &stat); err != nil { + log.Fatal(err) + } + if(size){ + ret = ret + ", \"size\":" + strconv.FormatInt(stat.Size,10) + } + if(mode){ + ret = ret + ", \"mode\":" + strconv.Itoa(int(stat.Mode)) + } + if(inode){ + ret = ret + ", \"inode\":" + strconv.FormatUint(stat.Ino,10) + } + ret = ret + "}" + return ret +} func main() { - //dec := json.NewDecoder(os.Stdin) - //enc := json.NewEncoder(os.Stdout) + // here be the ls flags + + var a_flag bool // all files, even ones starting with . + var mode_flag bool // flags + var inode_flag bool // inode + var size_flag bool // size + var first = true + + flag.BoolVar(&a_flag, "a", false, "lists all files in directory, even hidden ones") + flag.BoolVar(&mode_flag, "f", false, "include flags for file") + flag.BoolVar(&inode_flag, "i", false, "include flags for file") + flag.BoolVar(&size_flag, "s", false, "include flags for file") + // end ls flag + flag.Parse() - root := flag.Arg(0) + root := "."//flag.Arg(0) dir,_ := ioutil.ReadDir(root) - for _,entry := range dir{ - fmt.Printf("%s\n", entry.Name()) + + fmt.Printf("[\n") + + if(!a_flag){ + for _,entry := range dir{ + if(entry.Name()[0]!='.'){ + if(!first){ + fmt.Printf(",") + }else{ + first = false + } + fmt.Printf("%s\n", get_fileinfo(entry.Name(), size_flag, mode_flag, inode_flag)) + } + } + }else{ + for _,entry := range dir{ + if(!first){ + fmt.Printf(",") + }else{ + first = false + } + fmt.Printf("%s\n", get_fileinfo(entry.Name(), size_flag, mode_flag, inode_flag)) + } } + fmt.Printf("]\n") }