Skip to content
Permalink
Browse files
Avoids unzLocateFile(), since we already did all the searching oursel…
…ves.
  • Loading branch information
icculus committed Jul 28, 2001
1 parent e2edafa commit 0fe5d822a891a4ea4651e8fc057a36cdc497475e
Showing with 19 additions and 10 deletions.
  1. +19 −10 archivers/zip.c
@@ -516,12 +516,6 @@ static int ZIP_exists_symcheck(DirHandle *h, const char *name, int follow)
} /* ZIP_exists_symcheck */


static int ZIP_exists_nofollow(DirHandle *h, const char *name)
{
return(ZIP_exists_symcheck(h, name, 0));
} /* ZIP_exists_nofollow */


static int ZIP_exists(DirHandle *h, const char *name)
{
int retval = ZIP_exists_symcheck(h, name, SYMLINK_RECURSE_COUNT);
@@ -560,7 +554,7 @@ static int ZIP_isDirectory(DirHandle *h, const char *name)

static int ZIP_isSymLink(DirHandle *h, const char *name)
{
int retval = ZIP_exists_nofollow(h, name);
int retval = ZIP_exists_symcheck(h, name, 0);
if (retval == -1)
return(0);

@@ -574,15 +568,30 @@ static FileHandle *ZIP_openRead(DirHandle *h, const char *filename)
FileHandle *retval = NULL;
ZIPinfo *zi = ((ZIPinfo *) (h->opaque));
ZIPfileinfo *finfo = NULL;
int pos = ZIP_exists_symcheck(h, filename, SYMLINK_RECURSE_COUNT);
unzFile f;

BAIL_IF_MACRO(!ZIP_exists(h, filename), ERR_NO_SUCH_FILE, NULL);
BAIL_IF_MACRO(pos == -1, ERR_NO_SUCH_FILE, NULL);

f = unzOpen(zi->archiveName);
BAIL_IF_MACRO(f == NULL, ERR_IO_ERROR, NULL);

if ( (unzLocateFile(f, filename, 2) != UNZ_OK) ||
(unzOpenCurrentFile(f) != UNZ_OK) ||
if (unzGoToFirstFile(f) != UNZ_OK)
{
unzClose(f);
BAIL_IF_MACRO(1, ERR_IO_ERROR, NULL);
} /* if */

for (; pos > 0; pos--)
{
if (unzGoToNextFile(f) != UNZ_OK)
{
unzClose(f);
BAIL_IF_MACRO(1, ERR_IO_ERROR, NULL);
} /* if */
} /* for */

if ( (unzOpenCurrentFile(f) != UNZ_OK) ||
( (finfo = (ZIPfileinfo *) malloc(sizeof (ZIPfileinfo))) == NULL ) )
{
unzClose(f);

0 comments on commit 0fe5d82

Please sign in to comment.