int fswstat(Chan *c, uchar *dp, int n) { osenter(); if(FS(c)->fd >= 0) n = fwstat(FS(c)->fd, dp, n); else n = wstat(FS(c)->name->s, dp, n); osleave(); if(n < 0) fserr(FS(c)); return n; }
int dirfwstat(int fd, Dir *d) { uint8_t *buf; int r; r = sizeD2M(d); buf = malloc(r); if(buf == nil) return -1; convD2M(d, buf, r); r = fwstat(fd, buf, r); free(buf); return r; }
static void sysfwstat(void) { u32int fd, edir, nedir; void *edirt; int copied; fd = arg(0); edir = arg(1); nedir = arg(2); edirt = copyifnec(edir, nedir, &copied); if(systrace) fprint(2, "fwstat(%d, %#ux, %d)\n", fd, edir, nedir); P->R[0] = noteerr(fwstat(fd, edirt, nedir), nedir); if(copied) free(edirt); }