Allow unzFindExtension to optionally match the exact filename

This commit is contained in:
qwertymodo 2017-08-17 10:37:28 -07:00
parent ab2da6d913
commit 96fd5c4121
2 changed files with 8 additions and 8 deletions

View File

@ -967,7 +967,7 @@ static bool8 ReadUPSPatch (Stream *, long, int32 &);
static long ReadInt (Stream *, unsigned);
static bool8 ReadIPSPatch (Stream *, long, int32 &);
#ifdef UNZIP_SUPPORT
static int unzFindExtension (unzFile &, const char *, bool restart = TRUE, bool print = TRUE);
static int unzFindExtension (unzFile &, const char *, bool restart = TRUE, bool print = TRUE, bool allowExact = FALSE);
#endif
// deinterleave
@ -4188,10 +4188,10 @@ static bool8 ReadIPSPatch (Stream *r, long offset, int32 &rom_size)
}
#ifdef UNZIP_SUPPORT
static int unzFindExtension (unzFile &file, const char *ext, bool restart, bool print)
static int unzFindExtension (unzFile &file, const char *ext, bool restart, bool print, bool allowExact)
{
unz_file_info info;
int port, l = strlen(ext);
int port, l = strlen(ext), e = allowExact ? 0 : 1;
if (restart)
port = unzGoToFirstFile(file);
@ -4206,7 +4206,7 @@ static int unzFindExtension (unzFile &file, const char *ext, bool restart, bool
unzGetCurrentFileInfo(file, &info, name, 128, NULL, 0, NULL, 0);
len = strlen(name);
if (len >= l + 1 && name[len - l - 1] == '.' && strcasecmp(name + len - l, ext) == 0 && unzOpenCurrentFile(file) == UNZ_OK)
if (len >= l + e && name[len - l - 1] == '.' && strcasecmp(name + len - l, ext) == 0 && unzOpenCurrentFile(file) == UNZ_OK)
{
if (print)
printf("Using patch %s", name);

View File

@ -206,10 +206,10 @@ size_t partial_samples;
int16 *bufPos, *bufBegin, *bufEnd;
#ifdef UNZIP_SUPPORT
static int unzFindExtension(unzFile &file, const char *ext, bool restart = TRUE, bool print = TRUE)
static int unzFindExtension(unzFile &file, const char *ext, bool restart = TRUE, bool print = TRUE, bool allowExact = FALSE)
{
unz_file_info info;
int port, l = strlen(ext);
int port, l = strlen(ext), e = allowExact ? 0 : 1;
if (restart)
port = unzGoToFirstFile(file);
@ -224,7 +224,7 @@ static int unzFindExtension(unzFile &file, const char *ext, bool restart = TRUE,
unzGetCurrentFileInfo(file, &info, name, 128, NULL, 0, NULL, 0);
len = strlen(name);
if (len >= l && strcasecmp(name + len - l, ext) == 0 && unzOpenCurrentFile(file) == UNZ_OK)
if (len >= l + e && strcasecmp(name + len - l, ext) == 0 && unzOpenCurrentFile(file) == UNZ_OK)
{
if (print)
printf("Using msu file %s", name);
@ -267,7 +267,7 @@ STREAM S9xMSU1OpenFile(char *msu_ext)
if (unzFile)
{
int port = unzFindExtension(unzFile, msu_ext);
int port = unzFindExtension(unzFile, msu_ext, true, true, true);
if (port == UNZ_OK)
{
printf(" in %s.\n", zip_filename);