On 11/01/2022 14:58, Juergen Gross wrote:
diff --git a/lib/sys.c b/lib/sys.c
index 0e6fe5d..323a7cd 100644
--- a/lib/sys.c
+++ b/lib/sys.c
@@ -424,87 +424,82 @@ int fsync(int fd) {
int close(int fd)
{
+ int res = 0;
+
printk("close(%d)\n", fd);
switch (files[fd].type) {
default:
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#ifdef CONFIG_XENBUS
case FTYPE_XENBUS:
xs_daemon_close((void*)(intptr_t) fd);
- return 0;
+ break;
#endif
#ifdef HAVE_LWIP
- case FTYPE_SOCKET: {
- int res = lwip_close(files[fd].fd);
- files[fd].type = FTYPE_NONE;
- return res;
- }
+ case FTYPE_SOCKET:
+ res = lwip_close(files[fd].fd);
Hard tabs.
+ break;
#endif
#ifdef CONFIG_LIBXENCTRL
case FTYPE_XC:
minios_interface_close_fd(fd);
- return 0;
+ break;
#endif
#ifdef CONFIG_LIBXENEVTCHN
case FTYPE_EVTCHN:
minios_evtchn_close_fd(fd);
- return 0;
+ break;
#endif
#ifdef CONFIG_LIBXENGNTTAB
case FTYPE_GNTMAP:
minios_gnttab_close_fd(fd);
- return 0;
+ break;
#endif
#ifdef CONFIG_NETFRONT
case FTYPE_TAP:
shutdown_netfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_BLKFRONT
case FTYPE_BLK:
shutdown_blkfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_TPMFRONT
case FTYPE_TPMFRONT:
shutdown_tpmfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_TPM_TIS
case FTYPE_TPM_TIS:
shutdown_tpm_tis(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_KBDFRONT
case FTYPE_KBD:
shutdown_kbdfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_FBFRONT
case FTYPE_FB:
shutdown_fbfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
#ifdef CONFIG_CONSFRONT
case FTYPE_SAVEFILE:
case FTYPE_CONSOLE:
fini_consfront(files[fd].dev);
- files[fd].type = FTYPE_NONE;
- return 0;
+ break;
#endif
case FTYPE_NONE:
- break;
+ printk("close(%d): Bad descriptor\n", fd);
+ errno = EBADF;
+ return -1;
}
- printk("close(%d): Bad descriptor\n", fd);
- errno = EBADF;
- return -1;
+
+ memset(files + fd, 0, sizeof(struct file));
+ files[fd].type = FTYPE_NONE;
BUILD_BUG_ON(FTYPE_NONE != 0);
Life's too short to deal with a theoretical (and short sighted) future
where someone might want to change FTYPE_NONE away from being 0.