shared: use _cleanup_ in specifier_printf (#7586)
Follow-up for e62d316561
.
This commit is contained in:
parent
848f01784e
commit
8208c8f25d
|
@ -46,10 +46,11 @@
|
||||||
#define POSSIBLE_SPECIFIERS ALPHANUMERICAL "%"
|
#define POSSIBLE_SPECIFIERS ALPHANUMERICAL "%"
|
||||||
|
|
||||||
int specifier_printf(const char *text, const Specifier table[], void *userdata, char **_ret) {
|
int specifier_printf(const char *text, const Specifier table[], void *userdata, char **_ret) {
|
||||||
char *ret, *t;
|
size_t l;
|
||||||
|
_cleanup_free_ char *ret = NULL;
|
||||||
|
char *t;
|
||||||
const char *f;
|
const char *f;
|
||||||
bool percent = false;
|
bool percent = false;
|
||||||
size_t l;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(text);
|
assert(text);
|
||||||
|
@ -80,32 +81,25 @@ int specifier_printf(const char *text, const Specifier table[], void *userdata,
|
||||||
size_t k, j;
|
size_t k, j;
|
||||||
|
|
||||||
r = i->lookup(i->specifier, i->data, userdata, &w);
|
r = i->lookup(i->specifier, i->data, userdata, &w);
|
||||||
if (r < 0) {
|
if (r < 0)
|
||||||
free(ret);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
|
||||||
|
|
||||||
j = t - ret;
|
j = t - ret;
|
||||||
k = strlen(w);
|
k = strlen(w);
|
||||||
|
|
||||||
n = new(char, j + k + l + 1);
|
n = new(char, j + k + l + 1);
|
||||||
if (!n) {
|
if (!n)
|
||||||
free(ret);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(n, ret, j);
|
memcpy(n, ret, j);
|
||||||
memcpy(n + j, w, k);
|
memcpy(n + j, w, k);
|
||||||
|
|
||||||
free(ret);
|
free_and_replace(ret, n);
|
||||||
|
t = ret + j + k;
|
||||||
ret = n;
|
} else if (strchr(POSSIBLE_SPECIFIERS, *f))
|
||||||
t = n + j + k;
|
|
||||||
} else if (strchr(POSSIBLE_SPECIFIERS, *f)) {
|
|
||||||
/* Oops, an unknown specifier. */
|
/* Oops, an unknown specifier. */
|
||||||
free(ret);
|
|
||||||
return -EBADSLT;
|
return -EBADSLT;
|
||||||
} else {
|
else {
|
||||||
*(t++) = '%';
|
*(t++) = '%';
|
||||||
*(t++) = *f;
|
*(t++) = *f;
|
||||||
}
|
}
|
||||||
|
@ -124,6 +118,7 @@ int specifier_printf(const char *text, const Specifier table[], void *userdata,
|
||||||
|
|
||||||
*t = 0;
|
*t = 0;
|
||||||
*_ret = ret;
|
*_ret = ret;
|
||||||
|
ret = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue