diff options
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 86 |
1 files changed, 0 insertions, 86 deletions
@@ -163,92 +163,6 @@ char *xregerror(int err, const regex_t *regex) { return str; } -int xlocaltime(const time_t *timep, struct tm *result) { - // Should be called before localtime_r() according to POSIX.1-2004 - tzset(); - - if (localtime_r(timep, result)) { - return 0; - } else { - return -1; - } -} - -int xgmtime(const time_t *timep, struct tm *result) { - // Should be called before gmtime_r() according to POSIX.1-2004 - tzset(); - - if (gmtime_r(timep, result)) { - return 0; - } else { - return -1; - } -} - -int xmktime(struct tm *tm, time_t *timep) { - *timep = mktime(tm); - - if (*timep == -1) { - int error = errno; - - struct tm tmp; - if (xlocaltime(timep, &tmp) != 0) { - return -1; - } - - if (tm->tm_year != tmp.tm_year || tm->tm_yday != tmp.tm_yday - || tm->tm_hour != tmp.tm_hour || tm->tm_min != tmp.tm_min || tm->tm_sec != tmp.tm_sec) { - errno = error; - return -1; - } - } - - return 0; -} - -int xtimegm(struct tm *tm, time_t *timep) { - // Some man pages for timegm() recommend this as a portable approach - int ret = -1; - int error; - - char *old_tz = getenv("TZ"); - if (old_tz) { - old_tz = strdup(old_tz); - if (!old_tz) { - error = errno; - goto fail; - } - } - - if (setenv("TZ", "UTC0", true) != 0) { - error = errno; - goto fail; - } - - ret = xmktime(tm, timep); - error = errno; - - if (old_tz) { - if (setenv("TZ", old_tz, true) != 0) { - ret = -1; - error = errno; - goto fail; - } - } else { - if (unsetenv("TZ") != 0) { - ret = -1; - error = errno; - goto fail; - } - } - - tzset(); -fail: - free(old_tz); - errno = error; - return ret; -} - void format_mode(mode_t mode, char str[11]) { strcpy(str, "----------"); |