123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "common.h"
- #include "convtime.h"
- #define SECONDS 1
- #define MINUTES (SECONDS * 60)
- #define HOURS (MINUTES * 60)
- #define DAYS (HOURS * 24)
- #define WEEKS (DAYS * 7)
- long int
- convtime(const char *s)
- {
- long total, secs;
- const char *p;
- char *endp;
- errno = 0;
- total = 0;
- p = s;
- if (p == NULL || *p == '\0')
- return -1;
- while (*p) {
- secs = strtol(p, &endp, 10);
- if (p == endp ||
- (errno == ERANGE && (secs == LONG_MIN || secs == LONG_MAX)) ||
- secs < 0)
- return -1;
- switch (*endp++) {
- case '\0':
- endp--;
- case 's':
- case 'S':
- break;
- case 'm':
- case 'M':
- secs *= MINUTES;
- break;
- case 'h':
- case 'H':
- secs *= HOURS;
- break;
- case 'd':
- case 'D':
- secs *= DAYS;
- break;
- case 'w':
- case 'W':
- secs *= WEEKS;
- break;
- default:
- return -1;
- }
- total += secs;
- if (total < 0)
- return -1;
- p = endp;
- }
- return total;
- }
|