11 typedef struct DirStor {
25 struct fdopendir_args {
37 RuneSysCall_opendir(struct opendir_args *args, int *resp)
39 DirStor *ds = args->lvs.s_Addr;
40 const char *path = args->path.s_Addr;
42 STRBOUNDSCHECK(&args->path, PATH_MAX);
43 ds->dir = opendir(path);
44 printf("OPEN %s\n", path);
45 if (ds->dir == NULL) {
55 RuneSysCall_fdopendir(struct fdopendir_args *args, int *resp)
57 DirStor *ds = args->lvs.s_Addr;
59 ds->dir = fdopendir(args->fd);
60 if (ds->dir == NULL) {
70 RuneSysCall_readdir(LValueStor *lvs, int *resp)
72 DirStor *ds = lvs->s_Addr;
76 den = readdir(ds->dir);
77 ptr = ds->namelvs.s_Addr;
79 ds->type = den->d_type;
80 ds->namlen = den->d_namlen;
82 dassert(ds->namlen + 1 <= ds->namelvs.s_Type->ty_Bytes);
83 bcopy(den->d_name, ptr, ds->namlen);
90 dassert(1 <= ds->namelvs.s_Type->ty_Bytes);
97 RuneSysCall_rewinddir(LValueStor *lvs)
99 DirStor *ds = lvs->s_Addr;
106 RuneSysCall_closedir(LValueStor *lvs)
108 DirStor *ds = lvs->s_Addr;
117 RuneSysCall_dirfd(LValueStor *lvs, int *resp)
119 DirStor *ds = lvs->s_Addr;
122 *resp = dirfd(ds->dir);