func main() { var user ninep.User var file *clnt.File flag.Parse() user = ninep.OsUsers.Uid2User(os.Geteuid()) clnt.DefaultDebuglevel = *debuglevel c, oerr := tls.Dial("tcp", *addr, &tls.Config{ Rand: rand.Reader, InsecureSkipVerify: true, }) if oerr != nil { log.Println("can't dial", oerr) return } clnt, err := clnt.MountConn(c, "", uint32(*msize), user) if err != nil { goto error } if flag.NArg() != 1 { log.Println("invalid arguments") return } file, oerr = clnt.FOpen(flag.Arg(0), ninep.OREAD) if oerr != nil { goto oerror } for { d, oerr := file.Readdir(0) if oerr != nil { goto oerror } if d == nil || len(d) == 0 { break } for i := 0; i < len(d); i++ { os.Stdout.WriteString(d[i].Name + "\n") } } file.Close() return error: log.Println(fmt.Sprintf("Error: %s", err)) return oerror: log.Println("Error", oerr) }
func TestAttachOpenReaddir(t *testing.T) { var err error clnt, rootfid := setup(9000, t.Fatal) dirfid := clnt.FidAlloc() if _, err = clnt.Walk(rootfid, dirfid, []string{}); err != nil { t.Fatalf("%v", err) } if err = clnt.Open(dirfid, 0); err != nil { t.Fatalf("%v", err) } var b []byte if b, err = clnt.Read(dirfid, 0, 64*1024); err != nil { t.Fatalf("%v", err) } var i, amt int var offset uint64 err = nil for err == nil { if b, err = clnt.Read(dirfid, offset, 64*1024); err != nil { t.Fatalf("%v", err) } if len(b) == 0 { break } for b != nil && len(b) > 0 { if _, b, amt, err = ninep.UnpackDir(b, true); err != nil { t.Errorf("UnpackDir returns %v", err) break } else { i++ offset += uint64(amt) } } } if i != len(dirQids) { t.Fatalf("Reading: got %d entries, wanted %d, err %v", i, len(dirQids), err) } t.Logf("-----------------------------> Alternate form, using readdir and File") // Alternate form, using readdir and File dirfile, err := clnt.FOpen(".", ninep.OREAD) if err != nil { t.Fatalf("%v", err) } i, amt, offset = 0, 0, 0 err = nil for err == nil { d, err := dirfile.Readdir(64) if err != nil && err != io.EOF { t.Errorf("%v", err) } if len(d) == 0 { break } i += len(d) if i >= len(dirQids) { break } } if i != len(dirQids)-1 { t.Fatalf("Readdir: got %d entries, wanted %d", i, len(dirQids)-1) } }