xref: /inferno-os/tools/styxtest/styxtest0.c (revision 7ef44d652ae9e5e1f5b3465d73684e4a54de73c0)
1 #include <lib9.h>
2 #include "styxserver.h"
3 
4 int nq;
5 Styxserver *server;
6 
7 void
8 myinit(Styxserver *s)
9 {
10 	styxaddfile(s, Qroot, 1, "fred", 0664, "inferno");
11 	styxaddfile(s, Qroot, 2, "joe", 0664, "inferno");
12 	styxadddir(s, Qroot, 3, "adir", 0775, "inferno");
13 	styxaddfile(s, 3, 4, "bill", 0664, "inferno");
14 	styxadddir(s, Qroot, 5, "new", 0775, "inferno");
15 	styxadddir(s, 5, 6, "cdir", 0775, "inferno");
16 	styxaddfile(s, 6, 7, "cfile", 0664, "inferno");
17 	nq = 8;
18 }
19 
20 char *
21 mycreate(Qid *qid, char *name, int perm, int mode)
22 {
23 	int isdir;
24 	Styxfile *f;
25 
26 	USED(mode);
27 	isdir = perm&DMDIR;
28 	if(isdir)
29 		f = styxadddir(server, qid->path, nq++, name , perm, "inferno");
30 	else
31 		f = styxaddfile(server, qid->path, nq++, name, perm, "inferno");
32 	if(f == nil)
33 		return Eexist;
34 	*qid = f->d.qid;
35 	return nil;
36 }
37 
38 char *
39 myremove(Qid qid)
40 {
41 	Styxfile *f;
42 
43 	f = styxfindfile(server, qid.path);
44 	if(f != nil && (f->d.qid.type&QTDIR) && f->child != nil)
45 		return "directory not empty";
46 
47 	if(styxrmfile(server, qid.path) < 0)
48 		return Enonexist;
49 	return nil;
50 }
51 
52 char *
53 myread(Qid qid, char *d, ulong *n, vlong offset)
54 {
55 	if(qid.path != 1){
56 		*n = 0;
57 		return nil;
58 	}
59 	*n = styxreadstr(offset, d, *n, "abcdefghijklmn");
60 	return nil;
61 }
62 
63 Styxops ops = {
64 	nil,			/* newclient */
65 	nil,			/* freeclient */
66 
67 	nil,			/* attach */
68 	nil,			/* walk */
69 	nil,			/* open */
70 	mycreate,		/* create */
71 	myread,		/* read */
72 	nil,			/* write */
73 	nil,			/* close */
74 	myremove,	/* remove */
75 	nil,			/* stat */
76 	nil,			/* wstat */
77 };
78 
79 main(int argc, char **argv)
80 {
81 	Styxserver s;
82 
83 	USED(argc);
84 	USED(argv);
85 	server = &s;
86 	styxdebug();
87 	styxinit(&s, &ops, "6701", 0555, 0);
88 	myinit(&s);
89 	for(;;){
90 		styxwait(&s);
91 		styxprocess(&s);
92 	}
93 	return 0;
94 }
95 
96