From e76409232ce6a027bd3f06da79616830d3da9980 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Fri, 29 Jan 2016 10:28:53 +0200 Subject: [PATCH] lib: Add str_is_float check function --- src/lib/strnum.c | 26 ++++++++++++++++++++++++++ src/lib/strnum.h | 4 ++++ 2 files changed, 30 insertions(+) diff --git a/src/lib/strnum.c b/src/lib/strnum.c index f8301ea497..72e155fa18 100644 --- a/src/lib/strnum.c +++ b/src/lib/strnum.c @@ -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 */ diff --git a/src/lib/strnum.h b/src/lib/strnum.h index 58de24fdd4..471d4aa365 100644 --- a/src/lib/strnum.h +++ b/src/lib/strnum.h @@ -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. */