(svn r13810) -Fix: small memory leak when tar files would be found.
--- 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;