From 9fa9b9d104c730ef6d84b19245b61ebc9554b432 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Mon, 31 Jan 2011 00:18:15 +0000 Subject: CSS3 Selectors svn path=/trunk/libcss/; revision=11557 --- src/utils/utils.c | 25 +++++++++++++++++-------- src/utils/utils.h | 2 ++ 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src/utils') diff --git a/src/utils/utils.c b/src/utils/utils.c index 94b15e1..1745ea0 100644 --- a/src/utils/utils.c +++ b/src/utils/utils.c @@ -10,20 +10,29 @@ css_fixed css__number_from_lwc_string(lwc_string *string, bool int_only, size_t *consumed) { - size_t len; - const uint8_t *ptr; + if (string == NULL || lwc_string_length(string) == 0 || + consumed == NULL) + return 0; + + return css__number_from_string( + (uint8_t *)lwc_string_data(string), + lwc_string_length(string), + int_only, + consumed); +} + +css_fixed css__number_from_string(const uint8_t *data, size_t len, + bool int_only, size_t *consumed) +{ + const uint8_t *ptr = data; int sign = 1; int32_t intpart = 0; int32_t fracpart = 0; int32_t pwr = 1; - if (string == NULL || lwc_string_length(string) == 0 || - consumed == NULL) + if (data == NULL || len == 0 || consumed == NULL) return 0; - len = lwc_string_length(string); - ptr = (uint8_t *)lwc_string_data(string); - /* number = [+-]? ([0-9]+ | [0-9]* '.' [0-9]+) */ /* Extract sign, if any */ @@ -92,7 +101,7 @@ css_fixed css__number_from_lwc_string(lwc_string *string, } } - *consumed = (char *)ptr - lwc_string_data(string); + *consumed = ptr - data; if (sign > 0) { /* If the result is larger than we can represent, diff --git a/src/utils/utils.h b/src/utils/utils.h index 4859dea..1f7ed8c 100644 --- a/src/utils/utils.h +++ b/src/utils/utils.h @@ -36,6 +36,8 @@ css_fixed css__number_from_lwc_string(lwc_string *string, bool int_only, size_t *consumed); +css_fixed css__number_from_string(const uint8_t *data, size_t len, + bool int_only, size_t *consumed); static inline bool isDigit(uint8_t c) { -- cgit v1.2.3