Close the file descriptor along the writable path.
authorMichael Huang <Michael.Huang@visionsolutions.com>
Mon, 11 Jul 2011 14:06:49 +0000 (15:06 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Mon, 11 Jul 2011 14:06:49 +0000 (15:06 +0100)
Since the file has been completely read into memory, there is no
reason to keep the file descriptor open.

lib/hivex.c

index 946ecf3..fedbb6c 100644 (file)
@@ -317,6 +317,13 @@ hivex_open (const char *filename, int flags)
 
     if (full_read (h->fd, h->addr, h->size) < h->size)
       goto error;
+
+    /* We don't need the file descriptor along this path, since we
+     * have read all the data.
+     */
+    if (close (h->fd) == -1)
+      goto error;
+    h->fd = -1;
   }
 
   /* Check header. */
@@ -539,7 +546,10 @@ hivex_close (hive_h *h)
     munmap (h->addr, h->size);
   else
     free (h->addr);
-  r = close (h->fd);
+  if (h->fd >= 0)
+    r = close (h->fd);
+  else
+    r = 0;
   free (h->filename);
   free (h);