]> git.ipfire.org Git - thirdparty/ldns.git/commitdiff
strtottl added
authorMiek Gieben <miekg@NLnetLabs.nl>
Thu, 7 Apr 2005 10:41:49 +0000 (10:41 +0000)
committerMiek Gieben <miekg@NLnetLabs.nl>
Thu, 7 Apr 2005 10:41:49 +0000 (10:41 +0000)
util.c
util.h

diff --git a/util.c b/util.c
index b159277934a8b0bf42cab1a3afa6ad2c9249d4b8..9e083f602ab682a74fef16235f8cc0baa2126170 100644 (file)
--- 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 43c6412c40db4d827ea59ae064e12d8124ea45ab..7a1b1c3c5b00b0a20eeea7e5fe71644783b0e466 100644 (file)
--- 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 */