src/server/daemon/vfs.c

changeset 75
6195c92262a2
parent 72
9b888965f3ee
child 87
bdec069d2239
equal deleted inserted replaced
74:5bc6d078fb2c 75:6195c92262a2
290 acl_set_error_status(ctx->sn, ctx->rq, sysacl.acl, ctx->user); 290 acl_set_error_status(ctx->sn, ctx->rq, sysacl.acl, ctx->user);
291 return NULL; 291 return NULL;
292 } 292 }
293 } 293 }
294 294
295 // open file 295 // open directory
296 #ifdef BSD
296 DIR *sys_dir = opendir(path); 297 DIR *sys_dir = opendir(path);
298 if(sys_dir) {
299 int dir_fd = dirfd(sys_dir);
300 }
301 #else
302 int dir_fd = open(path, O_RDONLY);
303 if(dir_fd == -1) {
304 if(ctx) {
305 ctx->vfs_errno = errno;
306 sys_set_error_status(ctx);
307 }
308 return NULL;
309 }
310 DIR *sys_dir = fdopendir(dir_fd);
311 #endif
297 if(!sys_dir) { 312 if(!sys_dir) {
298 if(ctx) { 313 if(ctx) {
299 ctx->vfs_errno = errno; 314 ctx->vfs_errno = errno;
300 sys_set_error_status(ctx); 315 sys_set_error_status(ctx);
301 } 316 }
308 closedir(sys_dir); 323 closedir(sys_dir);
309 return NULL; 324 return NULL;
310 } 325 }
311 dir->ctx = ctx; 326 dir->ctx = ctx;
312 dir->data = sys_dir; 327 dir->data = sys_dir;
313 dir->fd = dirfd(sys_dir); 328 dir->fd = dir_fd;
314 dir->io = &sys_dir_io; 329 dir->io = &sys_dir_io;
315 return dir; 330 return dir;
316 } 331 }
317 332
318 int vfs_readdir(VFS_DIR dir, VFS_ENTRY *entry) { 333 int vfs_readdir(VFS_DIR dir, VFS_ENTRY *entry) {

mercurial