better zip file handling. (less crashy...)

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@274 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2004-09-30 22:50:03 +00:00
parent 37a8fd5056
commit cc8b34639b

View file

@ -2051,8 +2051,7 @@ typedef struct zipfile_s
} zipfile_t;
static packfile_t *Com_FileInZip(zipfile_t *zip, char *filename);
char *Com_ReadFileInZip(zipfile_t *zip, char *buffer);
int com_filenum;
char *Com_ReadFileInZip(zipfile_t *zip, int index, char *buffer);
void *com_pathforfile; //fread and stuff is preferable if null.
#endif
@ -2691,7 +2690,7 @@ int FS_FLocateFile(char *filename, FSLF_ReturnType_e returntype, flocation_t *lo
loc->offset = pf->filepos;
loc->len = pf->filelen;
unzLocateFileMy (zip->handle, com_filenum, zip->files[com_filenum].filepos);
unzLocateFileMy (zip->handle, loc->index, zip->files[loc->index].filepos);
loc->offset = unzGetCurrentFileUncompressedPos(zip->handle);
if (loc->offset<0)
{ //file not found...
@ -2785,8 +2784,7 @@ int COM_FOpenLocationFILE(flocation_t *loc, FILE **file)
char *buf;
FILE *f = tmpfile();
buf = BZ_Malloc(loc->len);
com_filenum = loc->index;
Com_ReadFileInZip(loc->search->u.zip, buf);
Com_ReadFileInZip(loc->search->u.zip, loc->index, buf);
fwrite(buf, 1, loc->len, f);
BZ_Free(buf);
fseek(f, 0, SEEK_SET);
@ -2911,8 +2909,7 @@ qbyte *COM_LoadFile (char *path, int usehunk)
{
#ifdef ZLIB
case SPT_ZIP:
com_filenum = loc.index;
Com_ReadFileInZip(loc.search->u.zip, buf);
Com_ReadFileInZip(loc.search->u.zip, loc.index, buf);
break;
#endif
default:
@ -3591,19 +3588,19 @@ packfile_t *Com_FileInZip(zipfile_t *zip, char *filename)
#endif
return NULL;
}
char *Com_ReadFileInZip(zipfile_t *zip, char *buffer)
char *Com_ReadFileInZip(zipfile_t *zip, int index, char *buffer)
{
int err;
unzLocateFileMy (zip->handle, com_filenum, zip->files[com_filenum].filepos);
unzLocateFileMy (zip->handle, index, zip->files[index].filepos);
unzOpenCurrentFile (zip->handle);
err = unzReadCurrentFile (zip->handle, buffer, zip->files[com_filenum].filelen);
err = unzReadCurrentFile (zip->handle, buffer, zip->files[index].filelen);
unzCloseCurrentFile (zip->handle);
if (err!=zip->files[com_filenum].filelen)
if (err!=zip->files[index].filelen)
{
printf ("Can't extract file \"%s:%s\"", zip->filename, zip->files[com_filenum].name);
printf ("Can't extract file \"%s:%s\"", zip->filename, zip->files[index].name);
return 0;
}