|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 16/18] mini-os: reset file type in close() in one place only
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.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |