10 /* system calls not defined in libc.h */
12 int _stat(char*, char*);
13 int _fstat(int, char*);
15 int _wstat(char*, char*);
16 int _fwstat(int, char*);
17 int _read(int, void*, int);
18 int _write(int, void*, int);
19 int _read9p(int, void*, int);
20 int _write9p(int, void*, int);
22 int _nfstat(int, void*, int);
23 int _nstat(char*, void*, int);
24 int _nfwstat(int, void*, int);
25 int _nwstat(char*, void*, int);
26 int _fsession(char*, void*, int);
27 int _mount(int, char*, int, char*);
39 uintptr parse(char *);
40 void catch(void*, char*);
48 s[strlen(s)-1] = '\0'; /* remove newline */
51 sysfatal("can't malloc: %r");
52 snprint(buf, 512, "%s (%lud)", s, t);
66 /* 6 months in the past or a day in the future */
67 if(l<clk-180L*24*60*60 || clk+24L*60*60<l){
68 memmove(buf, t+4, 7); /* month and day */
69 memmove(buf+7, t+23, 5); /* year */
71 memmove(buf, t+4, 12); /* skip day of week */
77 main(int argc, char *argv[])
80 int oflag, xflag, sflag;
86 fmtinstall('M', dirmodefmt);
104 if(argc<1 || argc>1+NARG){
106 fprint(2, "usage: syscall [-ox] entry [args; buf==1MB buffer]\n");
107 fprint(2, "\tsyscall write 1 hello 5\n");
108 fprint(2, "\tsyscall -o errstr buf 1024\n");
109 fprint(2, "\tsyscall -[xs] stat file buf 1024\n");
112 for(i=1; i<argc; i++)
113 arg[i-1] = parse(argv[i]);
115 for(i=0; tab[i].name; i++)
116 if(strcmp(tab[i].name, argv[0])==0){
117 /* special case for seek, pread, pwrite; vlongs are problematic */
118 if(strcmp(argv[0], "seek") == 0)
119 r=seek(arg[0], strtoll(argv[2], 0, 0), arg[2]);
120 else if(strcmp(argv[0], "pread") == 0)
121 r=pread(arg[0], (void*)arg[1], arg[2], strtoll(argv[4], 0, 0));
122 else if(strcmp(argv[0], "pwrite") == 0)
123 r=pwrite(arg[0], (void*)arg[1], arg[2], strtoll(argv[4], 0, 0));
125 r=(*tab[i].func)(arg[0], arg[1], arg[2], arg[3], arg[4]);
127 errstr(ebuf, sizeof ebuf);
128 fprint(2, "syscall: return %lld, error:%s\n", r, ebuf);
131 fprint(2, "syscall: return %lld, no error\n", r);
150 r = convM2D((uchar*)buf, r, &d, strs);
152 print("short stat message\n");
154 print("[%s] ", d.muid);
155 print("(%.16llux %lud %.2ux) ", d.qid.path, d.qid.vers, d.qid.type);
156 print("%M (%luo) ", d.mode, d.mode);
157 print("%c %d ", d.type, d.dev);
158 print("%s %s ", d.uid, d.gid);
159 print("%lld ", d.length);
160 print("%s ", lstime(d.mtime));
161 print("%s\n", d.name);
162 print("\tmtime: %s\n\tatime: %s\n", xctime(d.mtime), xctime(d.atime));
167 fprint(2, "syscall: %s not known\n", argv[0]);
177 if(strcmp(s, "buf") == 0)
180 l = strtoull(s, &t, 0);
187 catch(void *, char *msg)
189 fprint(2, "syscall: received note='%s'\n", msg);