diff options
author | rubidium <rubidium@openttd.org> | 2008-07-23 21:42:55 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2008-07-23 21:42:55 +0000 |
commit | 355c3bb4825eefb131a8f5a1b5a5fa2a706a0702 (patch) | |
tree | 5f7e724fed8e39f3f83257b35a23af0c6089b3ab | |
parent | 4396b7c68c9a84f5dd1253b87c009916759756f9 (diff) | |
download | openttd-355c3bb4825eefb131a8f5a1b5a5fa2a706a0702.tar.xz |
(svn r13810) -Fix: small memory leak when tar files would be found.
-rw-r--r-- | src/fileio.cpp | 13 | ||||
-rw-r--r-- | src/tar_type.h | 6 |
2 files changed, 10 insertions, 9 deletions
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<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 @@ 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<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; |