view release on metacpan or search on metacpan
unzip-6.0/macos/source/macos.c view on Meta::CPAN
/* Function version() */
/************************/
void version(__G)
__GDEF
{
/*
ZCONST char Far CompiledWith[] =
"Compiled with %s%s for %s%s%s%s.\n\n"; */
char DateTime[50];
#ifdef __MWERKS__
char CompVer[10];
sprintf(CompVer, "%x", __MWERKS__);
#endif
sprintf(DateTime,"%s %s",__DATE__, __TIME__);
sprintf((char *)slide, LoadFarString(CompiledWith),
#ifdef __MWERKS__
" Metrowerks CodeWarrior version ",CompVer,
#else
" ", " ",
#endif
#ifdef __MC68K__
" MC68K Processor",
#else
" PowerPC Processor",
#endif
#ifdef __DATE__
"\n compile time: ", DateTime, ""
#else
"", "", ""
#endif
);
(*G.message)((zvoid *)&G, slide, (ulg)strlen((char *)slide), 0);
} /* end function version() */
#endif /* !SFX */
unzip-6.0/macos/source/macos.c view on Meta::CPAN
/*
** Print mac extra-field
**
*/
static void PrintMacExtraInfo(MACINFO *mi)
{
#define MY_FNDRINFO fpb.hFileInfo.ioFlFndrInfo
DateTimeRec MacTime;
static ZCONST char space[] = " ";
static ZCONST char line[] = "------------------------------------"\
"------------------------------";
printf("\n\n%s", line);
printf("\nFullPath = [%s]", mi->FullPath);
printf("\nFinderComment = [%s]", mi->FinderComment);
printf("\nText Encoding Base (Filename) \"%s\" \n",
PrintTextEncoding(mi->fpb.hFileInfo.ioFlXFndrInfo.fdScript));
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <OSUtils.h>
#include "mactime.h"
/*
The MacOS function GetDateTime returns the
number of seconds elapsed since midnight, January 1, 1904.
*/
const unsigned long MacOS_2_Unix = 2082844800L;
/*****************************************************************************/
/* Macros, typedefs */
/*****************************************************************************/
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
time_t my_time(time_t *time)
{
time_t tmp_time;
GetDateTime(&tmp_time);
MACOS_TO_UNIX(tmp_time);
if (time)
{
*time = tmp_time;
}
return tmp_time;
}
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
* extend across the DST changeover time, but
* this function resets itself every 2 hours.
*/
static void myReadLocation(MachineLocation * loc)
{
static MachineLocation storedLoc; /* InsideMac, OSUtilities, page 4-20 */
static time_t first_call = 0, last_call = 86400;
if ((last_call - first_call) > 7200)
{
GetDateTime(&first_call);
ReadLocation(&storedLoc);
}
GetDateTime(&last_call);
*loc = storedLoc;
}
static Boolean DaylightSaving(void)
{
MachineLocation loc;
unsigned char dlsDelta;
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
{
unsigned long maclocal;
/*
* Get the current time expressed as the number of seconds
* elapsed since the Mac epoch, midnight, Jan. 1, 1904 (local time).
* On a Mac, current time accuracy is up to a second.
*/
GetDateTime(&maclocal); /* Get Mac local time */
maclocal -= GMTDelta(); /* Get Mac GMT */
MACOS_TO_UNIX(maclocal);
return maclocal; /* return unix GMT */
}
/*
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
*timer = t;
return t;
}
static struct tm *time2tm(const time_t *timer)
{
DateTimeRec dtr;
MachineLocation loc;
time_t macLocal = *timer;
static struct tm statictime;
static const short monthday[12] =
{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
UNIX_TO_MACOS(macLocal);
SecondsToDate(macLocal, &dtr);
unzip-6.0/macos/source/mactime.c view on Meta::CPAN
return(&statictime);
}
static time_t tm2time(struct tm *tp)
{
time_t intMacTime;
DateTimeRec dtr;
normalize(&tp->tm_sec, &tp->tm_min, 60);
normalize(&tp->tm_min, &tp->tm_hour,60);
normalize(&tp->tm_hour,&tp->tm_mday,24);
normalize(&tp->tm_mon, &tp->tm_year,12);
dtr.year = tp->tm_year + 1900; /* years since 1900 */
dtr.month = tp->tm_mon + 1; /* month, 0 = January and 11 = December */
dtr.day = tp->tm_mday; /* day of the month, from 1 to 31 */
dtr.hour = tp->tm_hour; /* hour, from 0 to 23 */
unzip-6.0/macos/source/mactime.h view on Meta::CPAN
* We hope time_t is an unsigned long (ulg) on the Macintosh...
*/
/*
This Offset is only used by MacFileDate_to_UTime()
*/
#define MACOS_TO_UNIX(x) (x) -= (unsigned long)MacOS_2_Unix
#define UNIX_TO_MACOS(x) (x) += (unsigned long)MacOS_2_Unix
/*
The MacOS function GetDateTime returns the
number of seconds elapsed since midnight, January 1, 1904.
*/
extern const unsigned long MacOS_2_Unix;
/* prototypes for public utility functions */
time_t MacFtime2UnixFtime(unsigned long macftime);
unsigned long UnixFtime2MacFtime(time_t unxftime);
time_t AdjustForTZmoveMac(unsigned long macloctim, long s_gmtoffs);
Boolean GetGMToffsetMac(unsigned long macftime, long *UTCoffset);
unzip-6.0/os2/os2.c view on Meta::CPAN
code. Most or all of the routines which make direct use of OS/2 system
calls (i.e., the non-lowercase routines) are Kai Uwe Rommel's. The read-
dir() suite was written by Michael Rendell and ported to OS/2 by Kai Uwe;
it is in the public domain.
Contains: GetCountryInfo()
SetFileSize()
GetFileTime()
SetFileTime() (TIMESTAMP only)
stamp_file() (TIMESTAMP only)
Utime2DosDateTime()
SetPathAttrTimes()
SetEAs()
GetLoadPath()
opendir()
closedir()
readdir()
[ seekdir() ] not used
[ telldir() ] not used
free_dircontents()
getdirent()
unzip-6.0/os2/os2.c view on Meta::CPAN
#include "os2acl.h"
extern ZCONST char Far TruncEAs[];
/* local prototypes */
#ifdef TIMESTAMP
static int SetFileTime(ZCONST char *name, ulg stamp);
#endif
#if defined(USE_EF_UT_TIME) || defined(TIMESTAMP)
static ulg Utime2DosDateTime OF((time_t uxtime));
#endif
static int getOS2filetimes OF((__GPRO__
ulg *pM_dt, ulg *pA_dt, ulg *pC_dt));
static void SetPathAttrTimes OF((__GPRO__ int flags, int dir));
static int SetEAs OF((__GPRO__ const char *path,
void *ef_block));
static int SetACL OF((__GPRO__ const char *path,
void *ef_block));
static int EvalExtraFields OF((__GPRO__ const char *path,
void *extra_field, unsigned ef_len));
unzip-6.0/os2/os2.c view on Meta::CPAN
if (DosSetPathInfo((PSZ) name, FIL_STANDARD, (PBYTE) &fs, sizeof(fs), 0))
return -1;
return 0;
}
int stamp_file(ZCONST char *fname, time_t modtime)
{
return SetFileTime(fname, Utime2DosDateTime(modtime));
}
#endif /* TIMESTAMP */
/* The following DOS date/time structures are machine-dependent as they
* assume "little-endian" byte order. For OS/2-specific code, which
* is run on x86 CPUs (or emulators?), this assumption is valid; but
* care should be taken when using this code as template for other ports.
*/
unzip-6.0/os2/os2.c view on Meta::CPAN
FDATE fd; /* system file date record:
* USHORT day : 5
* USHORT month : 4;
* USHORT year : 7; */
} _fdt;
} F_DATE_TIME, *PF_DATE_TIME;
#if defined(USE_EF_UT_TIME) || defined(TIMESTAMP)
static ulg Utime2DosDateTime(uxtime)
time_t uxtime;
{
F_DATE_TIME dosfiletime;
struct tm *t;
/* round up to even seconds */
/* round up (down if "up" overflows) to even seconds */
if (((ulg)uxtime) & 1)
uxtime = (uxtime + 1 > uxtime) ? uxtime + 1 : uxtime - 1;
unzip-6.0/os2/os2.c view on Meta::CPAN
} else {
dosfiletime._fdt.ft.twosecs = t->tm_sec >> 1;
dosfiletime._fdt.ft.minutes = t->tm_min;
dosfiletime._fdt.ft.hours = t->tm_hour;
dosfiletime._fdt.fd.day = t->tm_mday;
dosfiletime._fdt.fd.month = t->tm_mon + 1;
dosfiletime._fdt.fd.year = t->tm_year - 80;
}
return dosfiletime.timevalue;
} /* end function Utime2DosDateTime() */
#endif /* USE_EF_UT_TIME || TIMESTAMP */
static int getOS2filetimes(__GPRO__ ulg *pM_dt, ulg *pA_dt, ulg *pC_dt)
{
#ifdef USE_EF_UT_TIME
unsigned eb_izux_flg;
iztimes z_utime;
#endif
unzip-6.0/os2/os2.c view on Meta::CPAN
if (G.extra_field &&
#ifdef IZ_CHECK_TZ
G.tz_is_valid &&
#endif
((eb_izux_flg = ef_scan_for_izux(G.extra_field,
G.lrec.extra_field_length, 0, G.lrec.last_mod_dos_datetime,
&z_utime, NULL)) & EB_UT_FL_MTIME))
{
TTrace((stderr, "getOS2filetimes: UT e.f. modif. time = %lu\n",
z_utime.mtime));
*pM_dt = Utime2DosDateTime(z_utime.mtime);
if (eb_izux_flg & EB_UT_FL_ATIME) {
TTrace((stderr, "getOS2filetimes: UT e.f. access time = %lu\n",
z_utime.atime));
*pA_dt = Utime2DosDateTime(z_utime.atime);
}
if (eb_izux_flg & EB_UT_FL_CTIME) {
TTrace((stderr, "getOS2filetimes: UT e.f. creation time = %lu\n",
z_utime.ctime));
*pC_dt = Utime2DosDateTime(z_utime.ctime);
} else {
/* no creation time value supplied, set it to modification time */
*pC_dt = *pM_dt;
eb_izux_flg |= EB_UT_FL_CTIME;
}
return (int)eb_izux_flg;
}
#endif /* USE_EF_UT_TIME */
*pC_dt = *pM_dt = G.lrec.last_mod_dos_datetime;
TTrace((stderr, "\ngetOS2filetimes: DOS dir modific./creation time = %lu\n",
unzip-6.0/os2/os2.c view on Meta::CPAN
#ifdef USE_EF_UT_TIME
if (G.extra_field &&
#ifdef IZ_CHECK_TZ
G.tz_is_valid &&
#endif
(ef_scan_for_izux(G.extra_field, G.lrec.extra_field_length, 0,
G.lrec.last_mod_dos_datetime, &z_utime, NULL)
& EB_UT_FL_MTIME))
{
TTrace((stderr, "check_for_newer: using Unix extra field mtime\n"));
archive = Utime2DosDateTime(z_utime.mtime);
} else {
archive = G.lrec.last_mod_dos_datetime;
}
#else /* !USE_EF_UT_TIME */
archive = G.lrec.last_mod_dos_datetime;
#endif /* ?USE_EF_UT_TIME */
return (existing >= archive);
} /* end function check_for_newer() */
unzip-6.0/win32-experimental/unz60d10_w32wide-Unicode_patch.txt view on Meta::CPAN
+ if (!fs_uses_loctime) {
+ time_t ux_modtime;
+
+ ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime);
+ utime2NtfsFileTime(ux_modtime, pModFT);
+ } else
+#endif /* NO_W32TIMES_IZFIX */
+ {
+ FILETIME lft;
+
+ DosDateTimeToFileTime((WORD)(G.lrec.last_mod_dos_datetime >> 16),
+ (WORD)(G.lrec.last_mod_dos_datetime & 0xFFFFL),
+ &lft);
+ LocalFileTimeToFileTime(&lft, pModFT);
+ }
+ *pAccFT = *pModFT;
+ return (EB_UT_FL_MTIME | EB_UT_FL_ATIME);
+
+ } /* end function getNTfiletime() */
+#endif /* (UNICODE_SUPPORT && WIN32_WIDE) */
+
unzip-6.0/win32-experimental/unz60d10_w32wide-Unicode_patch.txt view on Meta::CPAN
+ FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft));
+ FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft));
+#ifndef NO_W32TIMES_IZFIX
+ if (!fs_uses_loctime) {
+ /* On a filesystem that stores UTC timestamps, we refill
+ * the time fields of the struct stat buffer by directly
+ * using the UTC values as returned by the Win32
+ * GetFileTime() API call.
+ */
+ NtfsFileTime2utime(&Modft, &(buf->st_mtime));
+ if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0)
+ NtfsFileTime2utime(&Accft, &(buf->st_atime));
+ else
+ buf->st_atime = buf->st_mtime;
+ if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0)
+ NtfsFileTime2utime(&Creft, &(buf->st_ctime));
+ else
+ buf->st_ctime = buf->st_mtime;
+ TTrace((stdout,"NTFS, recalculated modtime %08lx\n",
+ buf->st_mtime));
+ } else
+#endif /* NO_W32TIMES_IZFIX */
+ {
+ /* On VFAT and FAT-like filesystems, the FILETIME values
+ * are converted back to the stable local time before
+ * converting them to UTC unix time-stamps.
+ */
+ VFatFileTime2utime(&Modft, &(buf->st_mtime));
+ if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0)
+ VFatFileTime2utime(&Accft, &(buf->st_atime));
+ else
+ buf->st_atime = buf->st_mtime;
+ if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0)
+ VFatFileTime2utime(&Creft, &(buf->st_ctime));
+ else
+ buf->st_ctime = buf->st_mtime;
+ TTrace((stdout, "VFAT, recalculated modtime %08lx\n",
+ buf->st_mtime));
+ }
+ }
+ }
+ free(path);
+
unzip-6.0/win32/rsxntwin.h view on Meta::CPAN
#define FILE_SHARE_DELETE 0x00000004
#define FILE_PERSISTENT_ACLS 0x00000008
#define HFILE_ERROR ((HFILE)-1)
#define FS_PERSISTENT_ACLS FILE_PERSISTENT_ACLS
BOOL WINAPI DosDateTimeToFileTime(WORD, WORD, LPFILETIME);
#ifndef SetVolumeLabel
#define SetVolumeLabel TFUNCT(SetVolumeLabel)
#endif
BOOL WINAPI SetVolumeLabel(LPCTSTR, LPCTSTR);
#ifndef GetDriveType
#define GetDriveType TFUNCT(GetDriveType)
unzip-6.0/win32/win32.c view on Meta::CPAN
static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft);
static int show_NTFileTime(FILE *hdo, char *TTmsg, int isloc, FILETIME *pft)
{
SYSTEMTIME w32tm;
int rval;
rval = FileTimeToSystemTime(pft, &w32tm);
if (!rval) {
fprintf(hdo, "%s\n %08lX,%08lX (%s) -> Conversion failed !!!\n",
TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime),
(isloc ? "local" : "UTC"));
} else {
fprintf(hdo, "%s\n %08lx,%08lx -> %04u-%02u-%02u, %02u:%02u:%02u %s\n",
TTmsg, (ulg)(pft->dwHighDateTime), (ulg)(pft->dwLowDateTime),
w32tm.wYear, w32tm.wMonth, w32tm.wDay, w32tm.wHour,
w32tm.wMinute, w32tm.wSecond, (isloc ? "local" : "UTC"));
}
return rval;
}
#define FTTrace(x) show_NTFileTime x
#else
#define FTTrace(x)
#endif /* DEBUG_TIME */
/* end of DEBUG_TIME insertion */
unzip-6.0/win32/win32.c view on Meta::CPAN
static void utime2NtfsFileTime(time_t ut, FILETIME *pft)
{
#ifdef IZ_USE_INT64
ULLNG64 NTtime;
/* NT_QUANTA_PER_UNIX is small enough so that "ut * NT_QUANTA_PER_UNIX"
* cannot overflow in 64-bit signed calculation, regardless whether "ut"
* is signed or unsigned. */
NTtime = ((LLONG64)ut * NT_QUANTA_PER_UNIX) +
((ULLNG64)UNIX_TIME_ZERO_LO + ((ULLNG64)UNIX_TIME_ZERO_HI << 32));
pft->dwLowDateTime = (DWORD)NTtime;
pft->dwHighDateTime = (DWORD)(NTtime >> 32);
#else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */
unsigned int b1, b2, carry = 0;
unsigned long r0, r1, r2, r3;
long r4; /* signed, to catch environments with signed time_t */
b1 = ut & 0xFFFF;
b2 = (ut >> 16) & 0xFFFF; /* if ut is over 32 bits, too bad */
r1 = b1 * (NT_QUANTA_PER_UNIX & 0xFFFF);
r2 = b1 * (NT_QUANTA_PER_UNIX >> 16);
r3 = b2 * (NT_QUANTA_PER_UNIX & 0xFFFF);
r4 = b2 * (NT_QUANTA_PER_UNIX >> 16);
r0 = (r1 + (r2 << 16)) & 0xFFFFFFFFL;
if (r0 < r1)
carry++;
r1 = r0;
r0 = (r0 + (r3 << 16)) & 0xFFFFFFFFL;
if (r0 < r1)
carry++;
pft->dwLowDateTime = r0 + UNIX_TIME_ZERO_LO;
if (pft->dwLowDateTime < r0)
carry++;
pft->dwHighDateTime = r4 + (r2 >> 16) + (r3 >> 16)
+ UNIX_TIME_ZERO_HI + carry;
#endif /* ?IZ_USE_INT64 */
} /* end function utime2NtfsFileTime() */
#endif /* !NO_W32TIMES_IZFIX */
/*********************************/
/* Function utime2VFatFileTime() */ /* convert Unix time_t format into the */
unzip-6.0/win32/win32.c view on Meta::CPAN
#if (defined(W32_STAT_BANDAID) && !defined(NO_W32TIMES_IZFIX))
/*********************************/
/* Function NtfsFileTime2utime() */
/*********************************/
static int NtfsFileTime2utime(const FILETIME *pft, time_t *ut)
{
#ifdef IZ_USE_INT64
ULLNG64 NTtime;
NTtime = ((ULLNG64)pft->dwLowDateTime +
((ULLNG64)pft->dwHighDateTime << 32));
#ifndef TIME_T_TYPE_DOUBLE
/* underflow and overflow handling */
#ifdef CHECK_UTIME_SIGNED_UNSIGNED
if ((time_t)0x80000000L < (time_t)0L)
{
if (NTtime < ((ULLNG64)UNIX_TIME_SMIN_LO +
((ULLNG64)UNIX_TIME_SMIN_HI << 32))) {
*ut = (time_t)LONG_MIN;
return FALSE;
unzip-6.0/win32/win32.c view on Meta::CPAN
return TRUE;
#else /* !IZ_USE_INT64 (64-bit integer arithmetics may not be supported) */
time_t days;
SYSTEMTIME w32tm;
#ifndef TIME_T_TYPE_DOUBLE
/* underflow and overflow handling */
#ifdef CHECK_UTIME_SIGNED_UNSIGNED
if ((time_t)0x80000000L < (time_t)0L)
{
if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) ||
((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) &&
(pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) {
*ut = (time_t)LONG_MIN;
return FALSE;
if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) ||
((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) &&
(pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) {
*ut = (time_t)LONG_MAX;
return FALSE;
}
}
else
#endif /* CHECK_UTIME_SIGNED_UNSIGNED */
{
if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) ||
((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) &&
(pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) {
*ut = (time_t)0;
return FALSE;
}
if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) ||
((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) &&
(pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) {
*ut = (time_t)ULONG_MAX;
return FALSE;
}
}
#endif /* !TIME_T_TYPE_DOUBLE */
FileTimeToSystemTime(pft, &w32tm);
/* set `days' to the number of days into the year */
days = w32tm.wDay - 1 + ydays[w32tm.wMonth-1] +
unzip-6.0/win32/win32.c view on Meta::CPAN
time(ut);
return FALSE;
}
FTTrace((stdout, "VFatFT2utime, feed for mktime()", 1, &lft));
#ifndef HAVE_MKTIME
/* This version of the FILETIME-to-UNIXTIME conversion function
* uses DOS-DATE-TIME format as intermediate stage. For modification
* and access times, this is no problem. But, the extra fine resolution
* of the VFAT-stored creation time gets lost.
*/
if (!FileTimeToDosDateTime(&lft, &wDOSDate, &wDOSTime)) {
static const FILETIME dosmin_ft =
{DOSTIME_MIN_FT_LO, DOSTIME_MIN_FT_HI};
if (CompareFileTime(&lft, &dosmin_ft) <= 0) {
/* underflow -> set to minimum DOS time */
wDOSDate = (WORD)((DWORD)DOSTIME_MINIMUM >> 16);
wDOSTime = (WORD)DOSTIME_MINIMUM;
} else {
/* overflow -> set to maximum DOS time */
wDOSDate = (WORD)0xFF9F; /* 2107-12-31 */
wDOSTime = (WORD)0xBF7D; /* 23:59:58 */
}
}
TTrace((stdout,"DosDateTime is %04u-%02u-%02u %02u:%02u:%02u\n",
(unsigned)((wDOSDate>>9)&0x7f)+1980,(unsigned)((wDOSDate>>5)&0x0f),
(unsigned)(wDOSDate&0x1f),(unsigned)((wDOSTime>>11)&0x1f),
(unsigned)((wDOSTime>>5)&0x3f),(unsigned)((wDOSTime<<1)&0x3e)));
*ut = dos_to_unix_time(((ulg)wDOSDate << 16) | (ulg)wDOSTime);
/* a cheap error check: dos_to_unix_time() only returns an odd time
* when clipping at maximum time_t value. DOS_DATE_TIME values have
* a resolution of 2 seconds and are therefore even numbers.
*/
return (((*ut)&1) == (time_t)0);
unzip-6.0/win32/win32.c view on Meta::CPAN
FileTimeToSystemTime(&lft, &w32tm);
#ifndef TIME_T_TYPE_DOUBLE
/* underflow and overflow handling */
/* TODO: The range checks are not accurate, the actual limits may
* be off by one daylight-saving-time shift (typically 1 hour),
* depending on the current state of "is_dst".
*/
#ifdef CHECK_UTIME_SIGNED_UNSIGNED
if ((time_t)0x80000000L < (time_t)0L)
{
if ((pft->dwHighDateTime < UNIX_TIME_SMIN_HI) ||
((pft->dwHighDateTime == UNIX_TIME_SMIN_HI) &&
(pft->dwLowDateTime < UNIX_TIME_SMIN_LO))) {
*ut = (time_t)LONG_MIN;
return FALSE;
if ((pft->dwHighDateTime > UNIX_TIME_SMAX_HI) ||
((pft->dwHighDateTime == UNIX_TIME_SMAX_HI) &&
(pft->dwLowDateTime > UNIX_TIME_SMAX_LO))) {
*ut = (time_t)LONG_MAX;
return FALSE;
}
}
else
#endif /* CHECK_UTIME_SIGNED_UNSIGNED */
{
if ((pft->dwHighDateTime < UNIX_TIME_ZERO_HI) ||
((pft->dwHighDateTime == UNIX_TIME_ZERO_HI) &&
(pft->dwLowDateTime < UNIX_TIME_ZERO_LO))) {
*ut = (time_t)0;
return FALSE;
}
if ((pft->dwHighDateTime > UNIX_TIME_UMAX_HI) ||
((pft->dwHighDateTime == UNIX_TIME_UMAX_HI) &&
(pft->dwLowDateTime > UNIX_TIME_UMAX_LO))) {
*ut = (time_t)ULONG_MAX;
return FALSE;
}
}
#endif /* !TIME_T_TYPE_DOUBLE */
ltm.tm_year = w32tm.wYear - 1900;
ltm.tm_mon = w32tm.wMonth - 1;
ltm.tm_mday = w32tm.wDay;
ltm.tm_hour = w32tm.wHour;
ltm.tm_min = w32tm.wMinute;
unzip-6.0/win32/win32.c view on Meta::CPAN
if (!fs_uses_loctime) {
time_t ux_modtime;
ux_modtime = dos_to_unix_time(G.lrec.last_mod_dos_datetime);
utime2NtfsFileTime(ux_modtime, pModFT);
} else
#endif /* NO_W32TIMES_IZFIX */
{
FILETIME lft;
DosDateTimeToFileTime((WORD)(G.lrec.last_mod_dos_datetime >> 16),
(WORD)(G.lrec.last_mod_dos_datetime & 0xFFFFL),
&lft);
LocalFileTimeToFileTime(&lft, pModFT);
}
*pAccFT = *pModFT;
return (EB_UT_FL_MTIME | EB_UT_FL_ATIME);
} /* end function getNTfiletime() */
unzip-6.0/win32/win32.c view on Meta::CPAN
FTTrace((stdout, "GetFileTime returned Modft", 0, &Modft));
FTTrace((stdout, "GetFileTime returned Creft", 0, &Creft));
#ifndef NO_W32TIMES_IZFIX
if (!fs_uses_loctime) {
/* On a filesystem that stores UTC timestamps, we refill
* the time fields of the struct stat buffer by directly
* using the UTC values as returned by the Win32
* GetFileTime() API call.
*/
NtfsFileTime2utime(&Modft, &(buf->st_mtime));
if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0)
NtfsFileTime2utime(&Accft, &(buf->st_atime));
else
buf->st_atime = buf->st_mtime;
if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0)
NtfsFileTime2utime(&Creft, &(buf->st_ctime));
else
buf->st_ctime = buf->st_mtime;
TTrace((stdout,"NTFS, recalculated modtime %08lx\n",
buf->st_mtime));
} else
#endif /* NO_W32TIMES_IZFIX */
{
/* On VFAT and FAT-like filesystems, the FILETIME values
* are converted back to the stable local time before
* converting them to UTC unix time-stamps.
*/
VFatFileTime2utime(&Modft, &(buf->st_mtime));
if (Accft.dwLowDateTime != 0 || Accft.dwHighDateTime != 0)
VFatFileTime2utime(&Accft, &(buf->st_atime));
else
buf->st_atime = buf->st_mtime;
if (Creft.dwLowDateTime != 0 || Creft.dwHighDateTime != 0)
VFatFileTime2utime(&Creft, &(buf->st_ctime));
else
buf->st_ctime = buf->st_mtime;
TTrace((stdout, "VFAT, recalculated modtime %08lx\n",
buf->st_mtime));
}
}
}
# undef Ansi_Path
return 0;