locale-util: add freelocale() cleanup helper
This commit is contained in:
parent
fc432c2314
commit
e520e0fc2c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue