Changeset 3060 for trunk/src/kmk/kmkbuiltin/touch.c
- Timestamp:
- Sep 21, 2017, 5:11:07 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin/touch.c
r3059 r3060 38 38 # include <ctype.h> 39 39 # include <io.h> 40 # include <sys/timeb.h> 40 41 #else 41 42 # include <unistd.h> … … 47 48 #include "kbuild_version.h" 48 49 #include "kmkbuiltin.h" 50 51 #ifdef _MSC_VER 52 # include "nt/ntstat.h" 53 # undef FILE_TIMESTAMP_HI_RES 54 # define FILE_TIMESTAMP_HI_RES 1 55 #endif 56 49 57 50 58 /********************************************************************************************************************************* … … 99 107 int cFiles; 100 108 /** The specified files. */ 101 c onst char**papszFiles;109 char **papszFiles; 102 110 } KMKTOUCHOPTS; 103 111 typedef KMKTOUCHOPTS *PKMKTOUCHOPTS; 112 104 113 105 114 … … 217 226 { 218 227 const char * const pszTsIn = pszTs; 219 KBOOL fIsZulu = K_FALSE;220 228 struct tm ExpTime; 221 229 … … 244 252 return touch_error("Malformed timestamp '%s' given to -d: expected to two digit month at position 6 followed by a dash", 245 253 pszTsIn); 246 ExpTime.tm_mon = TWO_CHARS_TO_INT(pszTs[0], pszTs[1]) ;254 ExpTime.tm_mon = TWO_CHARS_TO_INT(pszTs[0], pszTs[1]) - 1; 247 255 pszTs += 3; 248 256 … … 301 309 302 310 /* zulu time indicator */ 311 ExpTime.tm_isdst = -1; 303 312 if (*pszTs == 'Z' || *pszTs == 'z') 304 313 { 305 fIsZulu = K_TRUE;314 ExpTime.tm_isdst = 0; 306 315 pszTs++; 307 316 if (*pszTs != '\0') … … 315 324 * Convert to UTC seconds using either timegm or mktime. 316 325 */ 317 ExpTime.tm_isdst = fIsZulu ? 0 : -1;318 326 ExpTime.tm_yday = -1; 319 327 ExpTime.tm_wday = -1; 320 pDst->tv_sec = fIsZulu ? timegm(&ExpTime) : mktime(&ExpTime); 321 if (pDst->tv_sec != -1) 322 return 0; 323 return touch_error("%s failed on '%s': %s", fIsZulu ? "timegm" : "mktime", pszTs, strerror(errno)); 328 if (ExpTime.tm_isdst == 0) 329 { 330 pDst->tv_sec = timegm(&ExpTime); 331 if (pDst->tv_sec == -1) 332 return touch_error("timegm failed on '%s': %s", pszTs, strerror(errno)); 333 } 334 else 335 { 336 pDst->tv_sec = mktime(&ExpTime); 337 if (pDst->tv_sec == -1) 338 return touch_error("mktime failed on '%s': %s", pszTs, strerror(errno)); 339 } 340 return 0; 324 341 } 325 342 … … 421 438 } 422 439 423 pExpTime->tm_mon = TWO_CHARS_TO_INT(pszTs[cchTsNoSec - 8], pszTs[cchTsNoSec - 7]) ;440 pExpTime->tm_mon = TWO_CHARS_TO_INT(pszTs[cchTsNoSec - 8], pszTs[cchTsNoSec - 7]) - 1; 424 441 pExpTime->tm_mday = TWO_CHARS_TO_INT(pszTs[cchTsNoSec - 6], pszTs[cchTsNoSec - 5]); 425 442 pExpTime->tm_hour = TWO_CHARS_TO_INT(pszTs[cchTsNoSec - 4], pszTs[cchTsNoSec - 3]); … … 894 911 Opts.fDereference = K_TRUE; 895 912 Opts.cFiles = 0; 896 Opts.papszFiles = (c onst char **)calloc(argc, sizeof(constchar *));913 Opts.papszFiles = (char **)calloc(argc, sizeof(char *)); 897 914 if (Opts.papszFiles) 898 915 {
Note:
See TracChangeset
for help on using the changeset viewer.