static void show(char *zone, time_t t, int v) { register struct tm * tmp; (void) printf("%-*s ", (int) longest, zone); if (v) { tmp = gmtime(&t); if (tmp == NULL) { (void) printf(tformat(), t); } else { dumptime(tmp); (void) printf(" UTC"); } (void) printf(" = "); } tmp = my_localtime(&t); dumptime(tmp); if (tmp != NULL) { if (*abbr(tmp) != '\0') (void) printf(" %s", abbr(tmp)); if (v) { (void) printf(" isdst=%d", tmp->tm_isdst); #ifdef TM_GMTOFF (void) printf(" gmtoff=%ld", tmp->TM_GMTOFF); #endif /* defined TM_GMTOFF */ } } (void) printf("\n"); if (tmp != NULL && *abbr(tmp) != '\0') abbrok(abbr(tmp), zone); }
static time_t hunt(char *name, time_t lot, time_t hit) { time_t t; long diff; struct tm lotm; register struct tm * lotmp; struct tm tm; register struct tm * tmp; char loab[MAX_STRING_LENGTH]; lotmp = my_localtime(&lot); if (lotmp != NULL) { lotm = *lotmp; (void) strncpy(loab, abbr(&lotm), (sizeof loab) - 1); } for ( ; ; ) { diff = (long) (hit - lot); if (diff < 2) break; t = lot; t += diff / 2; if (t <= lot) ++t; else if (t >= hit) --t; tmp = my_localtime(&t); if (tmp != NULL) tm = *tmp; if ((lotmp == NULL || tmp == NULL) ? (lotmp == tmp) : (delta(&tm, &lotm) == (t - lot) && tm.tm_isdst == lotm.tm_isdst && strcmp(abbr(&tm), loab) == 0)) { lot = t; lotm = tm; lotmp = tmp; } else hit = t; } show(name, lot, TRUE); show(name, hit, TRUE); return hit; }
int main(int argc, char *argv[]) { register int i; register int c; register int vflag; register char * cutarg; register long cutloyear = ZDUMP_LO_YEAR; register long cuthiyear = ZDUMP_HI_YEAR; register time_t cutlotime; register time_t cuthitime; register char ** fakeenv; time_t now; time_t t; time_t newt; struct tm tm; struct tm newtm; register struct tm * tmp; register struct tm * newtmp; INITIALIZE(cutlotime); INITIALIZE(cuthitime); #if HAVE_GETTEXT (void) setlocale(LC_ALL, ""); #ifdef TZ_DOMAINDIR (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); #endif /* defined TEXTDOMAINDIR */ (void) textdomain(TZ_DOMAIN); #endif /* HAVE_GETTEXT */ progname = argv[0]; for (i = 1; i < argc; ++i) if (strcmp(argv[i], "--version") == 0) { (void) printf("zdump %s%s\n", PKGVERSION, TZVERSION); exit(EXIT_SUCCESS); } else if (strcmp(argv[i], "--help") == 0) { usage(stdout, EXIT_SUCCESS); } vflag = 0; cutarg = NULL; while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v') if (c == 'v') vflag = 1; else cutarg = optarg; if ((c != EOF && c != -1) || (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) { usage(stderr, EXIT_FAILURE); } if (vflag) { if (cutarg != NULL) { long lo; long hi; char dummy; if (sscanf(cutarg, "%ld%c", &hi, &dummy) == 1) { cuthiyear = hi; } else if (sscanf(cutarg, "%ld,%ld%c", &lo, &hi, &dummy) == 2) { cutloyear = lo; cuthiyear = hi; } else { (void) fprintf(stderr, _("%s: wild -c argument %s\n"), progname, cutarg); exit(EXIT_FAILURE); } } checkabsolutes(); cutlotime = yeartot(cutloyear); cuthitime = yeartot(cuthiyear); } (void) time(&now); longest = 0; for (i = optind; i < argc; ++i) if (strlen(argv[i]) > longest) longest = strlen(argv[i]); { register int from; register int to; for (i = 0; environ[i] != NULL; ++i) continue; fakeenv = malloc((i + 2) * sizeof *fakeenv); if (fakeenv == NULL || (fakeenv[0] = malloc(longest + 4)) == NULL) { (void) perror(progname); exit(EXIT_FAILURE); } to = 0; (void) strcpy(fakeenv[to++], "TZ="); for (from = 0; environ[from] != NULL; ++from) if (strncmp(environ[from], "TZ=", 3) != 0) fakeenv[to++] = environ[from]; fakeenv[to] = NULL; environ = fakeenv; } for (i = optind; i < argc; ++i) { static char buf[MAX_STRING_LENGTH]; (void) strcpy(&fakeenv[0][3], argv[i]); if (!vflag) { show(argv[i], now, FALSE); continue; } warned = FALSE; t = absolute_min_time; show(argv[i], t, TRUE); t += SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); if (t < cutlotime) t = cutlotime; tmp = my_localtime(&t); if (tmp != NULL) { tm = *tmp; (void) strncpy(buf, abbr(&tm), (sizeof buf) - 1); } for ( ; ; ) { if (t >= cuthitime || t >= cuthitime - SECSPERHOUR * 12) break; newt = t + SECSPERHOUR * 12; newtmp = localtime(&newt); if (newtmp != NULL) newtm = *newtmp; if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) : (delta(&newtm, &tm) != (newt - t) || newtm.tm_isdst != tm.tm_isdst || strcmp(abbr(&newtm), buf) != 0)) { newt = hunt(argv[i], t, newt); newtmp = localtime(&newt); if (newtmp != NULL) { newtm = *newtmp; (void) strncpy(buf, abbr(&newtm), (sizeof buf) - 1); } } t = newt; tm = newtm; tmp = newtmp; } t = absolute_max_time; t -= SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); t += SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); } if (fflush(stdout) || ferror(stdout)) { (void) fprintf(stderr, "%s: ", progname); (void) perror(_("Error writing to standard output")); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); /* If exit fails to exit... */ return EXIT_FAILURE; }
int main(int argc, char *argv[]) { int i; int vflag; int Vflag; char * cutarg; char * cuttimes; time_t cutlotime; time_t cuthitime; char ** fakeenv; time_t now; time_t t; time_t newt; struct tm tm; struct tm newtm; struct tm * tmp; struct tm * newtmp; cutlotime = absolute_min_time; cuthitime = absolute_max_time; #if HAVE_GETTEXT (void) setlocale(LC_ALL, ""); #ifdef TZ_DOMAINDIR (void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR); #endif /* defined TEXTDOMAINDIR */ (void) textdomain(TZ_DOMAIN); #endif /* HAVE_GETTEXT */ progname = argv[0]; for (i = 1; i < argc; ++i) if (strcmp(argv[i], "--version") == 0) { (void) printf("zdump %s%s\n", PKGVERSION, TZVERSION); exit(EXIT_SUCCESS); } else if (strcmp(argv[i], "--help") == 0) { usage(stdout, EXIT_SUCCESS); } vflag = Vflag = 0; cutarg = cuttimes = NULL; for (;;) switch (getopt(argc, argv, "c:t:vV")) { case 'c': cutarg = optarg; break; case 't': cuttimes = optarg; break; case 'v': vflag = 1; break; case 'V': Vflag = 1; break; case -1: if (! (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) goto arg_processing_done; /* Fall through. */ default: usage(stderr, EXIT_FAILURE); } arg_processing_done:; if (vflag | Vflag) { intmax_t lo; intmax_t hi; char dummy; intmax_t cutloyear = ZDUMP_LO_YEAR; intmax_t cuthiyear = ZDUMP_HI_YEAR; if (cutarg != NULL) { if (sscanf(cutarg, "%"SCNdMAX"%c", &hi, &dummy) == 1) { cuthiyear = hi; } else if (sscanf(cutarg, "%"SCNdMAX",%"SCNdMAX"%c", &lo, &hi, &dummy) == 2) { cutloyear = lo; cuthiyear = hi; } else { (void) fprintf(stderr, _("%s: wild -c argument %s\n"), progname, cutarg); exit(EXIT_FAILURE); } } if (cutarg != NULL || cuttimes == NULL) { cutlotime = yeartot(cutloyear); cuthitime = yeartot(cuthiyear); } if (cuttimes != NULL) { if (sscanf(cuttimes, "%"SCNdMAX"%c", &hi, &dummy) == 1) { if (hi < cuthitime) { if (hi < absolute_min_time) hi = absolute_min_time; cuthitime = hi; } } else if (sscanf(cuttimes, "%"SCNdMAX",%"SCNdMAX"%c", &lo, &hi, &dummy) == 2) { if (cutlotime < lo) { if (absolute_max_time < lo) lo = absolute_max_time; cutlotime = lo; } if (hi < cuthitime) { if (hi < absolute_min_time) hi = absolute_min_time; cuthitime = hi; } } else { (void) fprintf(stderr, _("%s: wild -t argument %s\n"), progname, cuttimes); exit(EXIT_FAILURE); } } } (void) time(&now); longest = 0; for (i = optind; i < argc; ++i) if (strlen(argv[i]) > longest) longest = strlen(argv[i]); { int from; int to; for (i = 0; environ[i] != NULL; ++i) continue; fakeenv = malloc((i + 2) * sizeof *fakeenv); if (fakeenv == NULL || (fakeenv[0] = malloc(longest + 4)) == NULL) { err(EXIT_FAILURE, "Can't allocated %zu bytes", longest + 4); } to = 0; (void)strcpy(fakeenv[to++], "TZ="); /* XXX strcpy is safe */ for (from = 0; environ[from] != NULL; ++from) if (strncmp(environ[from], "TZ=", 3) != 0) fakeenv[to++] = environ[from]; fakeenv[to] = NULL; environ = fakeenv; } for (i = optind; i < argc; ++i) { static char buf[MAX_STRING_LENGTH]; (void) strcpy(&fakeenv[0][3], argv[i]); /* XXX strcpy is safe */ if (! (vflag | Vflag)) { show(argv[i], now, FALSE); continue; } warned = FALSE; t = absolute_min_time; if (!Vflag) { show(argv[i], t, TRUE); t += SECSPERDAY; show(argv[i], t, TRUE); } if (t < cutlotime) t = cutlotime; tmp = my_localtime(&t); if (tmp != NULL) { tm = *tmp; (void) strncpy(buf, abbr(&tm), (sizeof buf) - 1); } for ( ; ; ) { newt = (t < absolute_max_time - SECSPERDAY / 2 ? t + SECSPERDAY / 2 : absolute_max_time); if (cuthitime <= newt) break; newtmp = localtime(&newt); if (newtmp != NULL) newtm = *newtmp; if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) : (delta(&newtm, &tm) != (newt - t) || newtm.tm_isdst != tm.tm_isdst || strcmp(abbr(&newtm), buf) != 0)) { newt = hunt(argv[i], t, newt); newtmp = localtime(&newt); if (newtmp != NULL) { newtm = *newtmp; (void) strncpy(buf, abbr(&newtm), (sizeof buf) - 1); } } t = newt; tm = newtm; tmp = newtmp; } if (!Vflag) { t = absolute_max_time; t -= SECSPERDAY; show(argv[i], t, TRUE); t += SECSPERDAY; show(argv[i], t, TRUE); } } if (fflush(stdout) || ferror(stdout)) { err(EXIT_FAILURE, _("Error writing standard output")); } exit(EXIT_SUCCESS); /* If exit fails to exit... */ return EXIT_FAILURE; }
int main(int argc, char *argv[]) { int i; int vflag; int Vflag; char *cutarg; char *cuttimes; time_t cutlotime; time_t cuthitime; char **fakeenv; time_t now; time_t t; time_t newt; struct tm tm; struct tm newtm; struct tm *tmp; struct tm *newtmp; cutlotime = absolute_min_time; cuthitime = absolute_max_time; vflag = Vflag = 0; cutarg = cuttimes = NULL; for (;;) switch (getopt(argc, argv, "c:t:vV")) { case 'c': cutarg = optarg; break; case 't': cuttimes = optarg; break; case 'v': vflag = 1; break; case 'V': Vflag = 1; break; case -1: if (! (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) goto arg_processing_done; /* Fall through. */ default: usage(); } arg_processing_done:; if (vflag | Vflag) { intmax_t lo; intmax_t hi; char *loend, *hiend; intmax_t cutloyear = ZDUMP_LO_YEAR; intmax_t cuthiyear = ZDUMP_HI_YEAR; if (cutarg != NULL) { lo = strtoimax(cutarg, &loend, 10); if (cutarg != loend && !*loend) { hi = lo; cuthiyear = hi; } else if (cutarg != loend && *loend == ',' && (hi = strtoimax(loend + 1, &hiend, 10), loend + 1 != hiend && !*hiend)) { cutloyear = lo; cuthiyear = hi; } else { errx(EXIT_FAILURE, _("wild -c argument %s\n"), cutarg); } } if (cutarg != NULL || cuttimes == NULL) { cutlotime = yeartot(cutloyear); cuthitime = yeartot(cuthiyear); } if (cuttimes != NULL) { lo = strtoimax(cuttimes, &loend, 10); if (cuttimes != loend && !*loend) { hi = lo; if (hi < cuthitime) { if (hi < absolute_min_time) hi = absolute_min_time; cuthitime = hi; } } else if (cuttimes != loend && *loend == ',' && (hi = strtoimax(loend + 1, &hiend, 10), loend + 1 != hiend && !*hiend)) { if (cutlotime < lo) { if (absolute_max_time < lo) lo = absolute_max_time; cutlotime = lo; } if (hi < cuthitime) { if (hi < absolute_min_time) hi = absolute_min_time; cuthitime = hi; } } else { errx(EXIT_FAILURE, _("wild -t argument %s\n"), cuttimes); } } } time(&now); longest = 0; for (i = optind; i < argc; ++i) if (strlen(argv[i]) > longest) longest = strlen(argv[i]); { int from; int to; for (i = 0; environ[i] != NULL; ++i) continue; fakeenv = malloc((i + 2) * sizeof *fakeenv); if (fakeenv == NULL || (fakeenv[0] = malloc(longest + 4)) == NULL) { errx(EXIT_FAILURE, _("malloc() failed")); } to = 0; strcpy(fakeenv[to++], "TZ="); for (from = 0; environ[from] != NULL; ++from) if (strncmp(environ[from], "TZ=", 3) != 0) fakeenv[to++] = environ[from]; fakeenv[to] = NULL; environ = fakeenv; } for (i = optind; i < argc; ++i) { static char buf[MAX_STRING_LENGTH]; strcpy(&fakeenv[0][3], argv[i]); if (! (vflag | Vflag)) { show(argv[i], now, FALSE); continue; } warned = FALSE; t = absolute_min_time; if (!Vflag) { show(argv[i], t, TRUE); t += SECSPERDAY; show(argv[i], t, TRUE); } if (t < cutlotime) t = cutlotime; tmp = my_localtime(&t); if (tmp != NULL) { tm = *tmp; strncpy(buf, abbr(&tm), (sizeof buf) - 1); } for ( ; ; ) { newt = (t < absolute_max_time - SECSPERDAY / 2 ? t + SECSPERDAY / 2 : absolute_max_time); if (cuthitime <= newt) break; newtmp = localtime(&newt); if (newtmp != NULL) newtm = *newtmp; if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) : (delta(&newtm, &tm) != (newt - t) || newtm.tm_isdst != tm.tm_isdst || strcmp(abbr(&newtm), buf) != 0)) { newt = hunt(argv[i], t, newt); newtmp = localtime(&newt); if (newtmp != NULL) { newtm = *newtmp; strncpy(buf, abbr(&newtm), (sizeof buf) - 1); } } t = newt; tm = newtm; tmp = newtmp; } if (!Vflag) { t = absolute_max_time; t -= SECSPERDAY; show(argv[i], t, TRUE); t += SECSPERDAY; show(argv[i], t, TRUE); } } if (fflush(stdout) || ferror(stdout)) errx(EXIT_FAILURE, _("error writing standard output")); exit(EXIT_SUCCESS); /* If exit fails to exit... */ return EXIT_FAILURE; }
int main(int argc, char *argv[]) { int i; int c; int vflag; char *cutarg; long cutloyear = ZDUMP_LO_YEAR; long cuthiyear = ZDUMP_HI_YEAR; time_t cutlotime; time_t cuthitime; char **fakeenv; time_t now; time_t t; time_t newt; struct tm tm; struct tm newtm; struct tm *tmp; struct tm *newtmp; INITIALIZE(cutlotime); INITIALIZE(cuthitime); vflag = 0; cutarg = NULL; while ((c = getopt(argc, argv, "c:v")) == 'c' || c == 'v') if (c == 'v') vflag = 1; else cutarg = optarg; if ((c != EOF && c != -1) || (optind == argc - 1 && strcmp(argv[optind], "=") == 0)) { usage(); } if (vflag) { if (cutarg != NULL) { long lo; long hi; char dummy; if (sscanf(cutarg, "%ld%c", &hi, &dummy) == 1) { cuthiyear = hi; } else if (sscanf(cutarg, "%ld,%ld%c", &lo, &hi, &dummy) == 2) { cutloyear = lo; cuthiyear = hi; } else { errx(EXIT_FAILURE, _("wild -c argument %s\n"), cutarg); } } setabsolutes(); cutlotime = yeartot(cutloyear); cuthitime = yeartot(cuthiyear); } time(&now); longest = 0; for (i = optind; i < argc; ++i) if (strlen(argv[i]) > longest) longest = strlen(argv[i]); { int from; int to; for (i = 0; environ[i] != NULL; ++i) continue; fakeenv = (char **) malloc((size_t) ((i + 2) * sizeof *fakeenv)); if (fakeenv == NULL || (fakeenv[0] = (char *) malloc((size_t) (longest + 4))) == NULL) errx(EXIT_FAILURE, _("malloc() failed")); to = 0; strcpy(fakeenv[to++], "TZ="); for (from = 0; environ[from] != NULL; ++from) if (strncmp(environ[from], "TZ=", 3) != 0) fakeenv[to++] = environ[from]; fakeenv[to] = NULL; environ = fakeenv; } for (i = optind; i < argc; ++i) { static char buf[MAX_STRING_LENGTH]; strcpy(&fakeenv[0][3], argv[i]); if (!vflag) { show(argv[i], now, FALSE); continue; } warned = FALSE; t = absolute_min_time; show(argv[i], t, TRUE); t += SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); if (t < cutlotime) t = cutlotime; tmp = my_localtime(&t); if (tmp != NULL) { tm = *tmp; strncpy(buf, abbr(&tm), (sizeof buf) - 1); } for ( ; ; ) { if (t >= cuthitime || t >= cuthitime - SECSPERHOUR * 12) break; newt = t + SECSPERHOUR * 12; newtmp = localtime(&newt); if (newtmp != NULL) newtm = *newtmp; if ((tmp == NULL || newtmp == NULL) ? (tmp != newtmp) : (delta(&newtm, &tm) != (newt - t) || newtm.tm_isdst != tm.tm_isdst || strcmp(abbr(&newtm), buf) != 0)) { newt = hunt(argv[i], t, newt); newtmp = localtime(&newt); if (newtmp != NULL) { newtm = *newtmp; strncpy(buf, abbr(&newtm), (sizeof buf) - 1); } } t = newt; tm = newtm; tmp = newtmp; } t = absolute_max_time; t -= SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); t += SECSPERHOUR * HOURSPERDAY; show(argv[i], t, TRUE); } if (fflush(stdout) || ferror(stdout)) errx(EXIT_FAILURE, _("error writing standard output")); exit(EXIT_SUCCESS); /* If exit fails to exit... */ return EXIT_FAILURE; }