Blame


1 004aa293 2005-07-13 devnull #include <u.h>
2 004aa293 2005-07-13 devnull #include <libc.h>
3 004aa293 2005-07-13 devnull #include <thread.h>
4 004aa293 2005-07-13 devnull #include <sunrpc.h>
5 004aa293 2005-07-13 devnull #include <nfs3.h>
6 004aa293 2005-07-13 devnull #include <diskfs.h>
7 004aa293 2005-07-13 devnull
8 004aa293 2005-07-13 devnull int debug;
9 004aa293 2005-07-13 devnull
10 004aa293 2005-07-13 devnull void
11 004aa293 2005-07-13 devnull usage(void)
12 004aa293 2005-07-13 devnull {
13 004aa293 2005-07-13 devnull fprint(2, "usage: fsview fspartition cmd\n");
14 004aa293 2005-07-13 devnull fprint(2, "cmd is:\n");
15 004aa293 2005-07-13 devnull fprint(2, "\tcat file\n");
16 004aa293 2005-07-13 devnull fprint(2, "\tls dir\n");
17 004aa293 2005-07-13 devnull fprint(2, "\tstat file\n");
18 80b4aedc 2006-05-04 devnull threadexitsall("usage");
19 004aa293 2005-07-13 devnull }
20 004aa293 2005-07-13 devnull
21 004aa293 2005-07-13 devnull void
22 004aa293 2005-07-13 devnull printattr(Nfs3Attr *attr)
23 004aa293 2005-07-13 devnull {
24 004aa293 2005-07-13 devnull Fmt fmt;
25 004aa293 2005-07-13 devnull char buf[256];
26 004aa293 2005-07-13 devnull
27 80b4aedc 2006-05-04 devnull fmtfdinit(&fmt, 2, buf, sizeof buf);
28 004aa293 2005-07-13 devnull nfs3attrprint(&fmt, attr);
29 004aa293 2005-07-13 devnull fmtfdflush(&fmt);
30 80b4aedc 2006-05-04 devnull fprint(2, "\n");
31 004aa293 2005-07-13 devnull }
32 004aa293 2005-07-13 devnull
33 004aa293 2005-07-13 devnull char buf[8192];
34 004aa293 2005-07-13 devnull
35 004aa293 2005-07-13 devnull void
36 004aa293 2005-07-13 devnull x(int ok)
37 004aa293 2005-07-13 devnull {
38 004aa293 2005-07-13 devnull if(ok != Nfs3Ok){
39 004aa293 2005-07-13 devnull nfs3errstr(ok);
40 004aa293 2005-07-13 devnull sysfatal("%r");
41 004aa293 2005-07-13 devnull }
42 004aa293 2005-07-13 devnull }
43 004aa293 2005-07-13 devnull
44 004aa293 2005-07-13 devnull void
45 004aa293 2005-07-13 devnull threadmain(int argc, char **argv)
46 004aa293 2005-07-13 devnull {
47 004aa293 2005-07-13 devnull char *p, *q;
48 004aa293 2005-07-13 devnull u32int n;
49 004aa293 2005-07-13 devnull Disk *disk;
50 004aa293 2005-07-13 devnull Fsys *fsys;
51 004aa293 2005-07-13 devnull Nfs3Handle h;
52 004aa293 2005-07-13 devnull SunAuthUnix au;
53 004aa293 2005-07-13 devnull Nfs3Attr attr;
54 004aa293 2005-07-13 devnull u64int offset;
55 004aa293 2005-07-13 devnull u1int eof;
56 004aa293 2005-07-13 devnull uchar *data;
57 004aa293 2005-07-13 devnull char *link;
58 004aa293 2005-07-13 devnull
59 004aa293 2005-07-13 devnull ARGBEGIN{
60 004aa293 2005-07-13 devnull case 'd':
61 004aa293 2005-07-13 devnull debug = 1;
62 004aa293 2005-07-13 devnull break;
63 004aa293 2005-07-13 devnull default:
64 004aa293 2005-07-13 devnull usage();
65 004aa293 2005-07-13 devnull }ARGEND
66 004aa293 2005-07-13 devnull
67 004aa293 2005-07-13 devnull if(argc != 3)
68 004aa293 2005-07-13 devnull usage();
69 004aa293 2005-07-13 devnull
70 004aa293 2005-07-13 devnull if((disk = diskopenfile(argv[0])) == nil)
71 004aa293 2005-07-13 devnull sysfatal("diskopen: %r");
72 004aa293 2005-07-13 devnull if((disk = diskcache(disk, 16384, 16)) == nil)
73 004aa293 2005-07-13 devnull sysfatal("diskcache: %r");
74 004aa293 2005-07-13 devnull if((fsys = fsysopen(disk)) == nil)
75 83ab7d88 2007-11-27 rsc sysfatal("fsysopen: %r");
76 004aa293 2005-07-13 devnull
77 004aa293 2005-07-13 devnull allowall = 1;
78 004aa293 2005-07-13 devnull memset(&au, 0, sizeof au);
79 004aa293 2005-07-13 devnull
80 004aa293 2005-07-13 devnull /* walk */
81 004aa293 2005-07-13 devnull if(debug) fprint(2, "get root...");
82 004aa293 2005-07-13 devnull x(fsysroot(fsys, &h));
83 004aa293 2005-07-13 devnull p = argv[2];
84 004aa293 2005-07-13 devnull while(*p){
85 004aa293 2005-07-13 devnull while(*p == '/')
86 004aa293 2005-07-13 devnull p++;
87 004aa293 2005-07-13 devnull if(*p == 0)
88 004aa293 2005-07-13 devnull break;
89 004aa293 2005-07-13 devnull q = strchr(p, '/');
90 004aa293 2005-07-13 devnull if(q){
91 004aa293 2005-07-13 devnull *q = 0;
92 004aa293 2005-07-13 devnull q++;
93 004aa293 2005-07-13 devnull }else
94 004aa293 2005-07-13 devnull q = "";
95 004aa293 2005-07-13 devnull if(debug) fprint(2, "walk %s...", p);
96 004aa293 2005-07-13 devnull x(fsyslookup(fsys, &au, &h, p, &h));
97 004aa293 2005-07-13 devnull p = q;
98 004aa293 2005-07-13 devnull }
99 004aa293 2005-07-13 devnull
100 004aa293 2005-07-13 devnull if(debug) fprint(2, "getattr...");
101 004aa293 2005-07-13 devnull x(fsysgetattr(fsys, &au, &h, &attr));
102 004aa293 2005-07-13 devnull printattr(&attr);
103 004aa293 2005-07-13 devnull
104 004aa293 2005-07-13 devnull /* do the op */
105 004aa293 2005-07-13 devnull if(strcmp(argv[1], "cat") == 0){
106 004aa293 2005-07-13 devnull switch(attr.type){
107 004aa293 2005-07-13 devnull case Nfs3FileReg:
108 80b4aedc 2006-05-04 devnull case Nfs3FileDir:
109 004aa293 2005-07-13 devnull offset = 0;
110 004aa293 2005-07-13 devnull for(;;){
111 004aa293 2005-07-13 devnull x(fsysreadfile(fsys, &au, &h, sizeof buf, offset, &data, &n, &eof));
112 004aa293 2005-07-13 devnull if(n){
113 004aa293 2005-07-13 devnull write(1, data, n);
114 004aa293 2005-07-13 devnull free(data);
115 004aa293 2005-07-13 devnull offset += n;
116 004aa293 2005-07-13 devnull }
117 004aa293 2005-07-13 devnull if(eof)
118 004aa293 2005-07-13 devnull break;
119 004aa293 2005-07-13 devnull }
120 004aa293 2005-07-13 devnull break;
121 004aa293 2005-07-13 devnull case Nfs3FileSymlink:
122 004aa293 2005-07-13 devnull x(fsysreadlink(fsys, &au, &h, &link));
123 004aa293 2005-07-13 devnull print("%s\n", link);
124 004aa293 2005-07-13 devnull break;
125 004aa293 2005-07-13 devnull default:
126 004aa293 2005-07-13 devnull print("cannot cat: not file, not link\n");
127 004aa293 2005-07-13 devnull break;
128 004aa293 2005-07-13 devnull }
129 004aa293 2005-07-13 devnull }else if(strcmp(argv[1], "ls") == 0){
130 004aa293 2005-07-13 devnull /* not implemented */
131 004aa293 2005-07-13 devnull }else if(strcmp(argv[1], "stat") == 0){
132 004aa293 2005-07-13 devnull /* already done */
133 004aa293 2005-07-13 devnull }
134 004aa293 2005-07-13 devnull threadexitsall(nil);
135 004aa293 2005-07-13 devnull }