summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sv.c13
-rw-r--r--win32/win32.c10
2 files changed, 13 insertions, 10 deletions
diff --git a/sv.c b/sv.c
index 967a34c5f3..cd6473c080 100644
--- a/sv.c
+++ b/sv.c
@@ -5139,6 +5139,13 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
/* SIZE */
switch (*q) {
+#ifdef HAS_QUAD
+ case 'L': /* Ld */
+ case 'q': /* qd */
+ intsize = 'q';
+ q++;
+ break;
+#endif
case 'l':
#ifdef HAS_QUAD
if (*(q + 1) == 'l') { /* lld */
@@ -5146,12 +5153,8 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
q += 2;
break;
}
- case 'L': /* Ld */
- case 'q': /* qd */
- intsize = 'q';
- q++;
- break;
#endif
+ /* FALL THROUGH */
case 'h':
/* FALL THROUGH */
case 'V':
diff --git a/win32/win32.c b/win32/win32.c
index 4f0d7f8cd6..1bfb6feaa0 100644
--- a/win32/win32.c
+++ b/win32/win32.c
@@ -1296,14 +1296,13 @@ win32_times(struct tms *timebuf)
return 0;
}
-/* fix utime() so it works on directories in NT
- * thanks to Jan Dubois <jan.dubois@ibm.net>
- */
+/* fix utime() so it works on directories in NT */
static BOOL
filetime_from_time(PFILETIME pFileTime, time_t Time)
{
- struct tm *pTM = gmtime(&Time);
+ struct tm *pTM = localtime(&Time);
SYSTEMTIME SystemTime;
+ FILETIME LocalTime;
if (pTM == NULL)
return FALSE;
@@ -1316,7 +1315,8 @@ filetime_from_time(PFILETIME pFileTime, time_t Time)
SystemTime.wSecond = pTM->tm_sec;
SystemTime.wMilliseconds = 0;
- return SystemTimeToFileTime(&SystemTime, pFileTime);
+ return SystemTimeToFileTime(&SystemTime, &LocalTime) &&
+ LocalFileTimeToFileTime(&LocalTime, pFileTime);
}
DllExport int