(svn r13810) -Fix: small memory leak when tar files would be found.
authorrubidium
Wed, 23 Jul 2008 21:42:55 +0000
changeset 9702 e69c01e76845
parent 9701 da907123be89
child 9703 30117a5205f4
(svn r13810) -Fix: small memory leak when tar files would be found.
src/fileio.cpp
src/tar_type.h
--- a/src/fileio.cpp	Wed Jul 23 20:42:13 2008 +0000
+++ b/src/fileio.cpp	Wed Jul 23 21:42:55 2008 +0000
@@ -337,7 +337,7 @@
 
 FILE *FioFOpenFileTar(TarFileListEntry *entry, size_t *filesize)
 {
-	FILE *f = fopen(entry->tar->filename, "rb");
+	FILE *f = fopen(entry->tar_filename, "rb");
 	assert(f != NULL);
 
 	fseek(f, entry->position, SEEK_SET);
@@ -513,9 +513,8 @@
 	FILE *f = fopen(filename, "rb");
 	assert(f != NULL);
 
-	TarListEntry *tar_entry = MallocT<TarListEntry>(1);
-	tar_entry->filename = strdup(filename);
-	_tar_list.insert(TarList::value_type(filename, tar_entry));
+	const char *dupped_filename = strdup(filename);
+	_tar_list[filename].filename = dupped_filename;
 
 	TarLinkList links; ///< Temporary list to collect links
 
@@ -575,9 +574,9 @@
 
 				/* Store this entry in the list */
 				TarFileListEntry entry;
-				entry.tar      = tar_entry;
-				entry.size     = skip;
-				entry.position = pos;
+				entry.tar_filename = dupped_filename;
+				entry.size         = skip;
+				entry.position     = pos;
 
 				/* Convert to lowercase and our PATHSEPCHAR */
 				SimplifyFileName(name);
--- a/src/tar_type.h	Wed Jul 23 20:42:13 2008 +0000
+++ b/src/tar_type.h	Wed Jul 23 21:42:55 2008 +0000
@@ -11,15 +11,17 @@
 /** The define of a TarList. */
 struct TarListEntry {
 	const char *filename;
+
+	~TarListEntry() { free((void*)this->filename); }
 };
 
 struct TarFileListEntry {
-	TarListEntry *tar;
+	const char *tar_filename;
 	size_t size;
 	size_t position;
 };
 
-typedef std::map<std::string, TarListEntry *> TarList;
+typedef std::map<std::string, TarListEntry> TarList;
 typedef std::map<std::string, TarFileListEntry> TarFileList;
 extern TarList _tar_list;
 extern TarFileList _tar_filelist;