Mercurial > dovecot > core-2.2
changeset 19675:364874711d5b
lib: Add str_is_float check function
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Fri, 29 Jan 2016 10:28:53 +0200 |
parents | fc0219628b49 |
children | 286e4218fb07 |
files | src/lib/strnum.c src/lib/strnum.h |
diffstat | 2 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/strnum.c Thu Jan 28 20:47:02 2016 +0200 +++ b/src/lib/strnum.c Fri Jan 29 10:28:53 2016 +0200 @@ -17,6 +17,32 @@ 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 */
--- a/src/lib/strnum.h Thu Jan 28 20:47:02 2016 +0200 +++ b/src/lib/strnum.h Fri Jan 29 10:28:53 2016 +0200 @@ -180,6 +180,10 @@ 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. */