Fix libstand's filesystem close callback. The passed file pointer's
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 15 Feb 2009 03:01:21 +0000 (19:01 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 15 Feb 2009 03:01:21 +0000 (19:01 -0800)
f_fsdata field must be NULLed out.

lib/libstand/gzipfs.c
lib/libstand/hammerread.c
lib/libstand/nfs.c
lib/libstand/splitfs.c
lib/libstand/tftp.c
lib/libstand/ufs.c
lib/libstand/zipfs.c

index 8f6aaa0..f5b1c89 100644 (file)
@@ -233,10 +233,13 @@ static int
 zf_close(struct open_file *f)
 {
     struct z_file      *zf = (struct z_file *)f->f_fsdata;
-    
-    inflateEnd(&(zf->zf_zstream));
-    close(zf->zf_rawfd);
-    free(zf);
+
+    f->f_fsdata = NULL;
+    if (zf) {
+       inflateEnd(&(zf->zf_zstream));
+       close(zf->zf_rawfd);
+       free(zf);
+    }
     return(0);
 }
  
index d3899ea..86e86ae 100644 (file)
@@ -909,9 +909,11 @@ hammer_close(struct open_file *f)
 {
        struct hfile *hf = f->f_fsdata;
 
-       hclose(&hf->hfs);
        f->f_fsdata = NULL;
-       free(hf);
+       if (hf) {
+           hclose(&hf->hfs);
+           free(hf);
+       }
        return (0);
 }
 
index f6d1930..1ee2fd3 100644 (file)
@@ -551,9 +551,9 @@ nfs_close(struct open_file *f)
                printf("nfs_close: fp=0x%lx\n", (u_long)fp);
 #endif
 
-       if (fp != &nfs_root_node && fp)
+       f->f_fsdata = NULL;
+       if (fp && fp != &nfs_root_node)
                free(fp);
-       f->f_fsdata = (void *)0;
        
        return (0);
 }
index cb0af2b..76b5dee 100644 (file)
@@ -156,9 +156,13 @@ splitfs_close(struct open_file *f)
     struct split_file *sf;
 
     sf = (struct split_file *)f->f_fsdata;
-    fd = sf->curfd;
-    split_file_destroy(sf);
-    return(close(fd));
+    f->f_fsdata = NULL;
+    if (sf) {
+       fd = sf->curfd;
+       split_file_destroy(sf);
+       return(close(fd));
+    }
+    return(0);
 }
  
 static int 
index 5848079..0e09eac 100644 (file)
@@ -358,6 +358,7 @@ tftp_close(struct open_file *f)
        if (tftpfile) {
                free(tftpfile->path);
                free(tftpfile);
+               f->f_fsdata = NULL;
        }
        return (0);
 }
index 9b75cc1..f59cd29 100644 (file)
@@ -595,8 +595,8 @@ ufs_close(struct open_file *f)
        struct file *fp = (struct file *)f->f_fsdata;
        int level;
 
-       f->f_fsdata = (void *)0;
-       if (fp == (struct file *)0)
+       f->f_fsdata = NULL;
+       if (fp == NULL)
                return (0);
 
        for (level = 0; level < NIADDR; level++) {
index 7635f91..5a725dc 100644 (file)
@@ -235,9 +235,12 @@ zf_close(struct open_file *f)
 {
     struct z_file      *zf = (struct z_file *)f->f_fsdata;
     
-    inflateEnd(&(zf->zf_zstream));
-    close(zf->zf_rawfd);
-    free(zf);
+    f->f_fsdata = NULL;
+    if (zf) {
+       inflateEnd(&(zf->zf_zstream));
+       close(zf->zf_rawfd);
+       free(zf);
+    }
     return(0);
 }