locale-util: add freelocale() cleanup helper

This commit is contained in:
Lennart Poettering 2018-01-16 11:48:25 +01:00
parent fc432c2314
commit e520e0fc2c
3 changed files with 14 additions and 10 deletions

View file

@ -22,6 +22,7 @@
#include <libintl.h>
#include <stdbool.h>
#include <locale.h>
#include "macro.h"
@ -75,3 +76,10 @@ LocaleVariable locale_variable_from_string(const char *s) _pure_;
int get_keymaps(char ***l);
bool keymap_is_valid(const char *name);
static inline void freelocalep(locale_t *p) {
if (*p == (locale_t) 0)
return;
freelocale(*p);
}

View file

@ -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;
}

View file

@ -21,6 +21,7 @@
#include "alloc-util.h"
#include "curl-util.h"
#include "fd-util.h"
#include "locale-util.h"
#include "string-util.h"
static void curl_glue_check_finished(CurlGlue *g) {
@ -414,8 +415,8 @@ int curl_header_strdup(const void *contents, size_t sz, const char *field, char
}
int curl_parse_http_time(const char *t, usec_t *ret) {
_cleanup_(freelocalep) locale_t loc = (locale_t) 0;
const char *e;
locale_t loc;
struct tm tm;
time_t v;
@ -434,7 +435,6 @@ int curl_parse_http_time(const char *t, usec_t *ret) {
if (!e || *e != 0)
/* ANSI C */
e = strptime_l(t, "%a %b %d %H:%M:%S %Y", &tm, loc);
freelocale(loc);
if (!e || *e != 0)
return -EINVAL;