hivex: Store filename in hive handle.
authorRichard Jones <rjones@redhat.com>
Mon, 18 Jan 2010 10:58:06 +0000 (10:58 +0000)
committerRichard Jones <rjones@redhat.com>
Thu, 28 Jan 2010 11:25:30 +0000 (11:25 +0000)
hivex/hivex.c

index 6129017..a760300 100644 (file)
@@ -89,6 +89,7 @@
 static char *windows_utf16_to_utf8 (/* const */ char *input, size_t len);
 
 struct hive_h {
 static char *windows_utf16_to_utf8 (/* const */ char *input, size_t len);
 
 struct hive_h {
+  char *filename;
   int fd;
   size_t size;
   int msglvl;
   int fd;
   size_t size;
   int msglvl;
@@ -281,6 +282,10 @@ hivex_open (const char *filename, int flags)
   if (h->msglvl >= 2)
     fprintf (stderr, "hivex_open: created handle %p\n", h);
 
   if (h->msglvl >= 2)
     fprintf (stderr, "hivex_open: created handle %p\n", h);
 
+  h->filename = strdup (filename);
+  if (h->filename == NULL)
+    goto error;
+
   h->fd = open (filename, O_RDONLY);
   if (h->fd == -1)
     goto error;
   h->fd = open (filename, O_RDONLY);
   if (h->fd == -1)
     goto error;
@@ -482,6 +487,7 @@ hivex_open (const char *filename, int flags)
       munmap (h->addr, h->size);
     if (h->fd >= 0)
       close (h->fd);
       munmap (h->addr, h->size);
     if (h->fd >= 0)
       close (h->fd);
+    free (h->filename);
     free (h);
   }
   errno = err;
     free (h);
   }
   errno = err;
@@ -496,6 +502,7 @@ hivex_close (hive_h *h)
   free (h->bitmap);
   munmap (h->addr, h->size);
   r = close (h->fd);
   free (h->bitmap);
   munmap (h->addr, h->size);
   r = close (h->fd);
+  free (h->filename);
   free (h);
 
   return r;
   free (h);
 
   return r;