- hour = ATOI2(timearg);
- min = ATOI2(timearg);
- if (month < 1 || month > 12 || day < 1 || day > 31 ||
- hour < 0 || hour > 23 || min < 0 || min > 59)
- goto badtime;
- shuttime = 0;
- year += TM_YEAR_BASE;
- if (isleap(year) && month > 2)
- ++shuttime;
- for (--year; year >= EPOCH_YEAR; --year)
- shuttime += isleap(year) ?
- DAYSPERLYEAR : DAYSPERNYEAR;
- while (--month)
- shuttime += dmsize[month];
- shuttime += day - 1;
- shuttime = HOURSPERDAY * shuttime + hour;
- shuttime = MINSPERHOUR * shuttime + min;
- shuttime *= SECSPERMIN;
- shuttime -= lt->tm_gmtoff;
- if ((offset = shuttime - now) >= 0)
- break;
- /* FALLTHROUGH */
+ lt->tm_hour = ATOI2(timearg);
+ if (lt->tm_hour < 0 || lt->tm_hour > 23)
+ badtime();
+ lt->tm_min = ATOI2(timearg);
+ if (lt->tm_min < 0 || lt->tm_min > 59)
+ badtime();
+ lt->tm_sec = 0;
+ if ((shuttime = mktime(lt)) == -1)
+ badtime();
+ if ((offset = shuttime - now) < 0) {
+ (void)fprintf(stderr,
+ "shutdown: that time is already past.\n");
+ exit(1);
+ }
+ break;