diff options
author | Lennart Poettering <lennart@poettering.net> | 2018-01-16 11:48:25 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-01-16 11:53:43 +0100 |
commit | e520e0fc2c6075a592d62175232849f19f7b7417 (patch) | |
tree | ffd6f28a082cdf7da812308d4998f25ce682f7e4 /src/basic/parse-util.c | |
parent | fc432c231450166b31127f4cd0965d85e2ea15df (diff) | |
download | systemd-e520e0fc2c6075a592d62175232849f19f7b7417.tar.gz |
locale-util: add freelocale() cleanup helper
Diffstat (limited to 'src/basic/parse-util.c')
-rw-r--r-- | src/basic/parse-util.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c index 33f94f3fc2..ab80c2b04b 100644 --- a/src/basic/parse-util.c +++ b/src/basic/parse-util.c @@ -28,6 +28,7 @@ #include "alloc-util.h" #include "errno-list.h" #include "extract-word.h" +#include "locale-util.h" #include "macro.h" #include "parse-util.h" #include "process-util.h" @@ -531,9 +532,9 @@ int safe_atoi16(const char *s, int16_t *ret) { } int safe_atod(const char *s, double *ret_d) { + _cleanup_(freelocalep) locale_t loc = (locale_t) 0; char *x = NULL; double d = 0; - locale_t loc; assert(s); assert(ret_d); @@ -544,16 +545,11 @@ int safe_atod(const char *s, double *ret_d) { errno = 0; d = strtod_l(s, &x, loc); - if (errno > 0) { - freelocale(loc); + if (errno > 0) return -errno; - } - if (!x || x == s || *x) { - freelocale(loc); + if (!x || x == s || *x != 0) return -EINVAL; - } - freelocale(loc); *ret_d = (double) d; return 0; } |