]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Add str_is_float check function
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 29 Jan 2016 08:28:53 +0000 (10:28 +0200)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 29 Jan 2016 08:48:51 +0000 (10:48 +0200)
src/lib/strnum.c
src/lib/strnum.h

index f8301ea497ca4baf8e2d82d17493bf1be9aba756..72e155fa187b95eb16179a94afbcb84027590cc2 100644 (file)
@@ -17,6 +17,32 @@ bool str_is_numeric(const char *str, char end_char)
        return TRUE;
 }
 
+bool str_is_float(const char *str, char end_char)
+{
+       bool dot_seen = FALSE;
+       bool num_seen = FALSE;
+
+       if (*str == '\0' || *str == end_char)
+               return FALSE;
+
+       while (*str != '\0' && *str != end_char) {
+               if (*str == '.') {
+                       if (dot_seen || !num_seen) return FALSE;
+                       dot_seen = TRUE;
+                       num_seen = FALSE;
+                       str++;
+                       /* enforce that number follows dot */
+                       continue;
+               }
+               if (*str < '0' || *str > '9')
+                       return FALSE;
+               num_seen = TRUE;
+               str++;
+       }
+
+       return num_seen;
+}
+
 /* 
  * Unsigned decimal
  */
index 58de24fdd4a4c68fcc8427574e4820971a3c7e8d..471d4aa3657f57182cb9792da79dc4b124d733e3 100644 (file)
@@ -180,6 +180,10 @@ int str_to_time(const char *str, time_t *num_r)
    Stop when `end_char' is found from string. */
 bool str_is_numeric(const char *str, char end_char) ATTR_PURE;
 
+/* Return TRUE when string has one or more numbers, followed
+   with zero or one dot, followed with at least one number. */
+bool str_is_float(const char *str, char end_char) ATTR_PURE;
+
 /* Returns human readable string about what is wrong with the string.
    This function assumes that str_to_*() had already returned -1 for the
    string. */