8 char Eio[] = "i/o error";
9 char Enotadir[] = "not a directory";
10 char Enoent[] = "not found";
11 char Einval[] = "invalid operation";
12 char Eperm[] = "permission denied";
13 char Eexists[] = "file exists";
14 char Elocked[] = "file locked";
16 int mainstacksize = 65536;
25 sysfatal("malloc: %r");
26 setmalloctag(v, getcallerpc(&c));
31 erealloc(void *v, int c)
35 sysfatal("realloc: %r");
36 setrealloctag(v, getcallerpc(&c));
45 sysfatal("strdup: %r");
46 setmalloctag(s, getcallerpc(&s));
55 v = (ThrData **) threaddata();
57 *v = emalloc(sizeof(**v));
58 (*v)->resp = chancreate(sizeof(void *), 0);
66 dprint(char *fmt, ...)
68 static char buf[2048];
75 snprint(buf, 2048, "hjfs: %s", fmt);
76 rc = vfprint(2, buf, va);
94 fprint(2, "usage: %s [-rsS] [-m mem] [-n service] [-a announce-string]... -f dev\n", argv0);
99 threadmain(int argc, char **argv)
102 static char *nets[8];
103 char *file, *service;
104 int doream, flags, stdio, nbuf, netc;
114 case 'A': flags &= ~FSNOAUTH; break;
115 case 'r': doream++; break;
116 case 'S': flags |= FSNOPERM | FSCHOWN; break;
117 case 's': stdio++; break;
118 case 'f': file = estrdup(EARGF(usage())); break;
119 case 'n': service = estrdup(EARGF(usage())); break;
121 nbuf = muldiv(atoi(EARGF(usage())), 1048576, sizeof(Buf));
126 if(netc >= nelem(nets)-1){
127 fprint(2, "%s: too many networks to announce\n", argv0);
128 exits("too many nets");
130 nets[netc++] = estrdup(EARGF(usage()));
137 sysfatal("no default file");
142 sysfatal("newdev: %r");
143 fsmain = initfs(d, doream, flags);
145 sysfatal("fsinit: %r");
147 proccreate(syncproc, nil, mainstacksize);
148 start9p(service, nets, stdio);