archive/zzip: fix memory leak

This commit is contained in:
Max Kellermann
2013-01-30 15:25:29 +01:00
parent 5e8f51a963
commit 8e0575ca9b

@ -39,17 +39,17 @@ class ZzipArchiveFile : public ArchiveFile {
public: public:
RefCount ref; RefCount ref;
ZZIP_DIR *dir; ZZIP_DIR *const dir;
ZzipArchiveFile():ArchiveFile(zzip_archive_plugin) {} ZzipArchiveFile(ZZIP_DIR *_dir)
:ArchiveFile(zzip_archive_plugin), dir(_dir) {}
~ZzipArchiveFile() {
zzip_dir_close(dir);
}
void Unref() { void Unref() {
if (!ref.Decrement()) if (ref.Decrement())
return;
//close archive
zzip_dir_close (dir);
delete this; delete this;
} }
@ -69,17 +69,14 @@ zzip_quark(void)
static ArchiveFile * static ArchiveFile *
zzip_archive_open(const char *pathname, GError **error_r) zzip_archive_open(const char *pathname, GError **error_r)
{ {
ZzipArchiveFile *context = new ZzipArchiveFile(); ZZIP_DIR *dir = zzip_dir_open(pathname, NULL);
if (dir == nullptr) {
// open archive
context->dir = zzip_dir_open(pathname, NULL);
if (context->dir == NULL) {
g_set_error(error_r, zzip_quark(), 0, g_set_error(error_r, zzip_quark(), 0,
"Failed to open ZIP file %s", pathname); "Failed to open ZIP file %s", pathname);
return NULL; return NULL;
} }
return context; return new ZzipArchiveFile(dir);
} }
inline void inline void