From: Miek Gieben Date: Thu, 7 Apr 2005 10:41:49 +0000 (+0000) Subject: strtottl added X-Git-Tag: release-0.50~154 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb11b7cf5ff8d3d097fac74223dea2341c2271ab;p=thirdparty%2Fldns.git strtottl added --- diff --git a/util.c b/util.c index b1592779..9e083f60 100644 --- a/util.c +++ b/util.c @@ -151,3 +151,77 @@ int_to_hexdigit(int i) abort(); } } + + +uint32_t +strtottl(const char *nptr, const char **endptr) +{ + int sign = 0; + uint32_t i = 0; + uint32_t seconds = 0; + + for(*endptr = nptr; **endptr; (*endptr)++) { + switch (**endptr) { + case ' ': + case '\t': + break; + case '-': + if(sign == 0) { + sign = -1; + } else { + return (sign == -1) ? -seconds : seconds; + } + break; + case '+': + if(sign == 0) { + sign = 1; + } else { + return (sign == -1) ? -seconds : seconds; + } + break; + case 's': + case 'S': + seconds += i; + i = 0; + break; + case 'm': + case 'M': + seconds += i * 60; + i = 0; + break; + case 'h': + case 'H': + seconds += i * 60 * 60; + i = 0; + break; + case 'd': + case 'D': + seconds += i * 60 * 60 * 24; + i = 0; + break; + case 'w': + case 'W': + seconds += i * 60 * 60 * 24 * 7; + i = 0; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + i *= 10; + i += (**endptr - '0'); + break; + default: + seconds += i; + return (sign == -1) ? -seconds : seconds; + } + } + seconds += i; + return (sign == -1) ? -seconds : seconds; +} diff --git a/util.h b/util.h index 43c6412c..7a1b1c3c 100644 --- a/util.h +++ b/util.h @@ -162,4 +162,9 @@ int hexdigit_to_int(char ch); */ char int_to_hexdigit(int ch); +/** + * convert TTL string (1d2h, etc.) to a long. 0 on failure? + */ +uint32_t strtotll(const char *nptr, const char **endptr); + #endif /* !_UTIL_H */