From: Karel Zak Date: Tue, 12 Sep 2023 12:14:50 +0000 (+0200) Subject: include/strutils: add ul_strtold() X-Git-Tag: v2.40-rc1~151^2~69 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a57de0efc19ac813aa7c3fff753b0acf3eb0eacc;p=thirdparty%2Futil-linux.git include/strutils: add ul_strtold() Signed-off-by: Karel Zak --- diff --git a/include/strutils.h b/include/strutils.h index 7b44b4e00b..e9f8a0ce04 100644 --- a/include/strutils.h +++ b/include/strutils.h @@ -27,6 +27,7 @@ extern int ul_strtos64(const char *str, int64_t *num, int base); extern int ul_strtou64(const char *str, uint64_t *num, int base); extern int ul_strtos32(const char *str, int32_t *num, int base); extern int ul_strtou32(const char *str, uint32_t *num, int base); +extern int ul_strtold(const char *str, long double *num); extern int64_t str2num_or_err(const char *str, int base, const char *errmesg, int64_t low, int64_t up); extern uint64_t str2unum_or_err(const char *str, int base, const char *errmesg, uint64_t up); diff --git a/lib/strutils.c b/lib/strutils.c index ccf71b987f..422f8e5807 100644 --- a/lib/strutils.c +++ b/lib/strutils.c @@ -456,21 +456,28 @@ err: errx(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str); } -long double strtold_or_err(const char *str, const char *errmesg) +int ul_strtold(const char *str, long double *num) { - double num; char *end = NULL; errno = 0; if (str == NULL || *str == '\0') - goto err; - num = strtold(str, &end); + return -(errno = EINVAL); + *num = strtold(str, &end); - if (errno || str == end || (end && *end)) - goto err; + if (errno != 0) + return -errno; + if (str == end || (end && *end)) + return -(errno = EINVAL); + return 0; +} - return num; -err: +long double strtold_or_err(const char *str, const char *errmesg) +{ + long double num = 0; + + if (ul_strtold(str, &num) == 0) + return num; if (errno == ERANGE) err(STRTOXX_EXIT_CODE, "%s: '%s'", errmesg, str);