From 81c50c6c325adcf771f000190d53ab911d83d2f6 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 23 Jul 2008 21:42:55 +0000 Subject: (svn r13810) -Fix: small memory leak when tar files would be found. --- src/fileio.cpp | 13 ++++++------- src/tar_type.h | 6 ++++-- 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/fileio.cpp b/src/fileio.cpp index 1f96e7318..c1dafab91 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -337,7 +337,7 @@ FILE *FioFOpenFileSp(const char *filename, const char *mode, Searchpath sp, Subd 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 @@ static bool TarListAddFile(const char *filename) FILE *f = fopen(filename, "rb"); assert(f != NULL); - TarListEntry *tar_entry = MallocT(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 @@ static bool TarListAddFile(const char *filename) /* 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); diff --git a/src/tar_type.h b/src/tar_type.h index b622da644..04f7250e6 100644 --- a/src/tar_type.h +++ b/src/tar_type.h @@ -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 TarList; +typedef std::map TarList; typedef std::map TarFileList; extern TarList _tar_list; extern TarFileList _tar_filelist; -- cgit v1.2.3-54-g00ecf