Fixed resource leak when failing to mount a file that isn't an archive.
This commit is contained in:
parent
4b906c1e5f
commit
53ef674270
|
@ -828,6 +828,7 @@ static DirHandle *openDirectory(PHYSFS_Io *io, const char *d, int forWriting)
|
||||||
DirHandle *retval = NULL;
|
DirHandle *retval = NULL;
|
||||||
const PHYSFS_Archiver **i;
|
const PHYSFS_Archiver **i;
|
||||||
const char *ext;
|
const char *ext;
|
||||||
|
int created_io = 0;
|
||||||
|
|
||||||
assert((io != NULL) || (d != NULL));
|
assert((io != NULL) || (d != NULL));
|
||||||
|
|
||||||
|
@ -841,6 +842,7 @@ static DirHandle *openDirectory(PHYSFS_Io *io, const char *d, int forWriting)
|
||||||
|
|
||||||
io = __PHYSFS_createNativeIo(d, forWriting ? 'w' : 'r');
|
io = __PHYSFS_createNativeIo(d, forWriting ? 'w' : 'r');
|
||||||
BAIL_IF_MACRO(!io, ERRPASS, 0);
|
BAIL_IF_MACRO(!io, ERRPASS, 0);
|
||||||
|
created_io = 1;
|
||||||
} /* if */
|
} /* if */
|
||||||
|
|
||||||
ext = find_filename_extension(d);
|
ext = find_filename_extension(d);
|
||||||
|
@ -867,6 +869,9 @@ static DirHandle *openDirectory(PHYSFS_Io *io, const char *d, int forWriting)
|
||||||
retval = tryOpenDir(io, *i, d, forWriting);
|
retval = tryOpenDir(io, *i, d, forWriting);
|
||||||
} /* else */
|
} /* else */
|
||||||
|
|
||||||
|
if ((!retval) && (created_io))
|
||||||
|
io->destroy(io);
|
||||||
|
|
||||||
BAIL_IF_MACRO(!retval, PHYSFS_ERR_UNSUPPORTED, NULL);
|
BAIL_IF_MACRO(!retval, PHYSFS_ERR_UNSUPPORTED, NULL);
|
||||||
return retval;
|
return retval;
|
||||||
} /* openDirectory */
|
} /* openDirectory */
|
||||||
|
|
Loading…
Reference in New Issue