From ac24236d9a9eb2f1239689da8a604c0670977b37 Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Mon, 22 Apr 2002 22:34:00 +0000 Subject: [PATCH] Always close fd when reading super block. --- files/drive.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/files/drive.c b/files/drive.c index 302edcaac1..5f9b5e976b 100644 --- a/files/drive.c +++ b/files/drive.c @@ -521,6 +521,7 @@ int DRIVE_ReadSuperblock (int drive, char * buff) #define DRIVE_SUPER 96 int fd; off_t offs; + int ret = 0; if (memset(buff,0,DRIVE_SUPER)!=buff) return -1; if ((fd=open(DOSDrives[drive].device,O_RDONLY)) == -1) @@ -551,8 +552,16 @@ int DRIVE_ReadSuperblock (int drive, char * buff) break; } - if ((offs) && (lseek(fd,offs,SEEK_SET)!=offs)) return -4; - if (read(fd,buff,DRIVE_SUPER)!=DRIVE_SUPER) return -2; + if ((offs) && (lseek(fd,offs,SEEK_SET)!=offs)) + { + ret = -4; + goto the_end; + } + if (read(fd,buff,DRIVE_SUPER)!=DRIVE_SUPER) + { + ret = -2; + goto the_end; + } switch(DOSDrives[drive].type) { @@ -565,20 +574,27 @@ int DRIVE_ReadSuperblock (int drive, char * buff) { ERR("The filesystem is not FAT !! (device=%s)\n", DOSDrives[drive].device); - return -3; + ret = -3; + goto the_end; } break; case DRIVE_CDROM: if (strncmp(&buff[1],"CD001",5)) /* Check for iso9660 present */ - return -3; + { + ret = -3; + goto the_end; + } /* FIXME: do we need to check for "CDROM", too ? (high sierra) */ - break; + break; default: - return -3; - break; + ret = -3; + goto the_end; } return close(fd); + the_end: + close(fd); + return ret; }