From: Lawrence S. <ljs...@us...> - 2014-10-23 23:27:03
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 8c941dfdb8fe3068e413d5dc28cf40bdaf411b16 (commit) from e03439c4086dd4a7a81adfec6d943c22d898bb5a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8c941dfdb8fe3068e413d5dc28cf40bdaf411b16 Author: Lawrence Sebald <ljs...@us...> Date: Thu Oct 23 19:26:33 2014 -0400 Align readdir() a bit more with POSIX. ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/fs/fs_dcload.c | 12 ++++++++---- kernel/arch/dreamcast/fs/fs_dclsocket.c | 4 +++- kernel/arch/dreamcast/fs/fs_iso9660.c | 5 ++++- kernel/arch/dreamcast/fs/fs_vmu.c | 1 + kernel/fs/fs.c | 10 +++++++--- kernel/fs/fs_pty.c | 4 +--- kernel/fs/fs_ramdisk.c | 3 +++ kernel/fs/fs_romdisk.c | 2 +- 8 files changed, 28 insertions(+), 13 deletions(-) diff --git a/kernel/arch/dreamcast/fs/fs_dcload.c b/kernel/arch/dreamcast/fs/fs_dcload.c index 55512b7..c7afd94 100644 --- a/kernel/arch/dreamcast/fs/fs_dcload.c +++ b/kernel/arch/dreamcast/fs/fs_dcload.c @@ -281,10 +281,15 @@ dirent_t *dcload_readdir(void * h) { char *fn; uint32 hnd = (uint32)h; - if(lwip_dclsc && irq_inside_int()) - return 0; + if(lwip_dclsc && irq_inside_int()) { + errno = EAGAIN; + return NULL; + } - if(hnd < 100) return NULL; /* hack */ + if(hnd < 100) { + errno = EBADF; + return NULL; + } spinlock_lock(&mutex); @@ -573,4 +578,3 @@ int fs_dcload_init_lwip(void *p) { /* Register with VFS */ return nmmgr_handler_add(&vh.nmmgr); } - diff --git a/kernel/arch/dreamcast/fs/fs_dclsocket.c b/kernel/arch/dreamcast/fs/fs_dclsocket.c index ed620fd..28948d1 100644 --- a/kernel/arch/dreamcast/fs/fs_dclsocket.c +++ b/kernel/arch/dreamcast/fs/fs_dclsocket.c @@ -438,8 +438,10 @@ static dirent_t *dcls_readdir(void *hnd) { uint32 fd = (uint32) hnd; command_3int_t *cmd = (command_3int_t *)pktbuf; - if(fd < 100) + if(fd < 100) { + errno = EBADF; return NULL; + } locked = mutex_trylock(&mutex); diff --git a/kernel/arch/dreamcast/fs/fs_iso9660.c b/kernel/arch/dreamcast/fs/fs_iso9660.c index 94a4acd..cf8b5cd 100644 --- a/kernel/arch/dreamcast/fs/fs_iso9660.c +++ b/kernel/arch/dreamcast/fs/fs_iso9660.c @@ -820,8 +820,11 @@ static dirent_t *iso_readdir(void * h) { file_t fd = (file_t)h; - if(fd >= MAX_ISO_FILES || fh[fd].first_extent == 0 || !fh[fd].dir || fh[fd].broken) + if(fd >= MAX_ISO_FILES || fh[fd].first_extent == 0 || !fh[fd].dir || + fh[fd].broken) { + errno = EBADF; return NULL; + } /* Scan forwards until we find the next valid entry, an end-of-entry mark, or run out of dir size. */ diff --git a/kernel/arch/dreamcast/fs/fs_vmu.c b/kernel/arch/dreamcast/fs/fs_vmu.c index 14759e1..7bd69ff 100644 --- a/kernel/arch/dreamcast/fs/fs_vmu.c +++ b/kernel/arch/dreamcast/fs/fs_vmu.c @@ -509,6 +509,7 @@ static dirent_t *vmu_readdir(void * fd) { /* Check the handle */ if(!vmu_verify_hnd(fd, VMU_DIR)) { + errno = EBADF; return NULL; } diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c index bb1cccf..f9216ed 100644 --- a/kernel/fs/fs.c +++ b/kernel/fs/fs.c @@ -510,12 +510,16 @@ uint64 fs_total64(file_t fd) { dirent_t *fs_readdir(file_t fd) { fs_hnd_t *h = fs_map_hnd(fd); - if(h == NULL) return NULL; + if(h == NULL) { + errno = EBADF; + return NULL; + } - if(h->handler == NULL) return fs_root_readdir(h); + if(h->handler == NULL) + return fs_root_readdir(h); if(h->handler->readdir == NULL) { - errno = EINVAL; + errno = ENOSYS; return NULL; } diff --git a/kernel/fs/fs_pty.c b/kernel/fs/fs_pty.c index 965dc0f..33d8387 100644 --- a/kernel/fs/fs_pty.c +++ b/kernel/fs/fs_pty.c @@ -620,14 +620,13 @@ static dirent_t * pty_readdir(void * h) { assert(h); if(fdobj->type != PF_DIR) { - errno = EINVAL; + errno = EBADF; return NULL; } dl = fdobj->d.d; if(dl->ptr >= dl->cnt) { - errno = 0; /* no error */ return NULL; } @@ -781,4 +780,3 @@ int fs_pty_shutdown() { return 0; } - diff --git a/kernel/fs/fs_ramdisk.c b/kernel/fs/fs_ramdisk.c index a6e6eb4..b661c4a 100644 --- a/kernel/fs/fs_ramdisk.c +++ b/kernel/fs/fs_ramdisk.c @@ -549,6 +549,9 @@ static dirent_t *ramdisk_readdir(void * h) { rv = &fh[fd].dirent; } + else { + errno = EBADF; + } mutex_unlock(&rd_mutex); diff --git a/kernel/fs/fs_romdisk.c b/kernel/fs/fs_romdisk.c index e0716bd..7acbc4b 100644 --- a/kernel/fs/fs_romdisk.c +++ b/kernel/fs/fs_romdisk.c @@ -354,7 +354,7 @@ static dirent_t *romdisk_readdir(void * h) { file_t fd = (file_t)h; if(fd >= MAX_RD_FILES || fh[fd].index == 0 || !fh[fd].dir) { - errno = EINVAL; + errno = EBADF; return NULL; } hooks/post-receive -- A pseudo Operating System for the Dreamcast. |