Implemeted getLastModTime method.

This commit is contained in:
Ryan C. Gordon 2002-06-06 05:38:47 +00:00
parent b0d5683f32
commit 05b565422a
1 changed files with 29 additions and 1 deletions

View File

@ -26,6 +26,7 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include "physfs.h"
#include "unzip.h"
@ -75,6 +76,7 @@ static LinkedStringList *ZIP_enumerateFiles(DirHandle *h,
static int ZIP_exists(DirHandle *h, const char *name);
static int ZIP_isDirectory(DirHandle *h, const char *name);
static int ZIP_isSymLink(DirHandle *h, const char *name);
static PHYSFS_sint64 ZIP_getLastModTime(DirHandle *h, const char *name);
static FileHandle *ZIP_openRead(DirHandle *h, const char *filename);
static void ZIP_dirClose(DirHandle *h);
@ -99,7 +101,7 @@ const DirFunctions __PHYSFS_DirFunctions_ZIP =
ZIP_exists, /* exists() method */
ZIP_isDirectory, /* isDirectory() method */
ZIP_isSymLink, /* isSymLink() method */
NULL, /* getLastModTime() method */ /* !!! FIXME: This can be determined in a zipfile. */
ZIP_getLastModTime, /* getLastModTime() method */
ZIP_openRead, /* openRead() method */
NULL, /* openWrite() method */
NULL, /* openAppend() method */
@ -581,6 +583,32 @@ static int ZIP_exists(DirHandle *h, const char *name)
} /* ZIP_exists */
static PHYSFS_sint64 ZIP_getLastModTime(DirHandle *h, const char *name)
{
ZIPinfo *zi = (ZIPinfo *) (h->opaque);
int pos = ZIP_exists_symcheck(h, name, SYMLINK_RECURSE_COUNT);
ZIPentry *entry;
struct tm t;
if (pos == -1)
return(0);
entry = &zi->entries[pos];
/* if it's a symlink, then we ran into a possible symlink loop. */
BAIL_IF_MACRO(entry->symlink != NULL, ERR_TOO_MANY_SYMLINKS, 0);
memset(&t, '\0', sizeof (t));
t.tm_year = entry->info.tmu_date.tm_year - 1900;
t.tm_mon = entry->info.tmu_date.tm_mon;
t.tm_mday = entry->info.tmu_date.tm_mday;
t.tm_hour = entry->info.tmu_date.tm_hour;
t.tm_min = entry->info.tmu_date.tm_min;
t.tm_sec = entry->info.tmu_date.tm_sec;
return((PHYSFS_sint64) mktime(&t));
} /* ZIP_getLastModTime */
static int ZIP_isDirectory(DirHandle *h, const char *name)
{
int dlen;