From 6be195ba38164ae044e31b02e5f8f5ebc641054d Mon Sep 17 00:00:00 2001 From: Simen Svale Skogsrud Date: Fri, 18 Feb 2011 23:08:06 +0100 Subject: [PATCH] cleaned up handling of number parsing in settings_execute_command --- nuts_bolts.c | 4 ++-- nuts_bolts.h | 3 +++ settings.c | 8 ++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/nuts_bolts.c b/nuts_bolts.c index 614f3cd..0a8bf5c 100644 --- a/nuts_bolts.c +++ b/nuts_bolts.c @@ -9,10 +9,10 @@ int read_double(char *line, uint8_t *char_counter, double *double_ptr) *double_ptr = strtod(start, &end); if(end == start) { - return(0); + return(false); }; *char_counter = end - line; - return(1); + return(true); } diff --git a/nuts_bolts.h b/nuts_bolts.h index 7cd745d..bc0b892 100644 --- a/nuts_bolts.h +++ b/nuts_bolts.h @@ -33,6 +33,9 @@ #define clear_vector(a) memset(a, 0, sizeof(a)) #define max(a,b) (((a) > (b)) ? (a) : (b)) +// Read a floating point value from a string. Line points to the input buffer, char_counter +// is the indexer pointing to the current character of the line, while double_ptr is +// a pointer to the result variable. Returns true when it succeeds int read_double(char *line, uint8_t *char_counter, double *double_ptr); #endif diff --git a/settings.c b/settings.c index 1e6f290..ca1bc05 100644 --- a/settings.c +++ b/settings.c @@ -92,11 +92,15 @@ uint8_t settings_execute_line(char *line) { if(line[char_counter] == 0) { settings_dump(); return(STATUS_OK); } - read_double(line, &char_counter, ¶meter); + if(!read_double(line, &char_counter, ¶meter)) { + return(STATUS_BAD_NUMBER_FORMAT); + }; if(line[char_counter++] != '=') { return(STATUS_UNSUPPORTED_STATEMENT); } - read_double(line, &char_counter, &value); + if(!read_double(line, &char_counter, &value)) { + return(STATUS_BAD_NUMBER_FORMAT); + } if(line[char_counter] != 0) { return(STATUS_UNSUPPORTED_STATEMENT); }