1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-04 21:47:31 +03:00

util: modernize readlink_malloc() a bit

This commit is contained in:
Lennart Poettering 2014-02-11 16:45:35 +01:00
parent c50e4f95d8
commit 2d2ebd6b8f

View File

@ -761,28 +761,31 @@ char *strappend(const char *s, const char *suffix) {
return strnappend(s, suffix, suffix ? strlen(suffix) : 0); return strnappend(s, suffix, suffix ? strlen(suffix) : 0);
} }
int readlink_malloc(const char *p, char **r) { int readlink_malloc(const char *p, char **ret) {
size_t l = 100; size_t l = 100;
int r;
assert(p); assert(p);
assert(r); assert(ret);
for (;;) { for (;;) {
char *c; char *c;
ssize_t n; ssize_t n;
if (!(c = new(char, l))) c = new(char, l);
if (!c)
return -ENOMEM; return -ENOMEM;
if ((n = readlink(p, c, l-1)) < 0) { n = readlink(p, c, l-1);
int ret = -errno; if (n < 0) {
r = -errno;
free(c); free(c);
return ret; return r;
} }
if ((size_t) n < l-1) { if ((size_t) n < l-1) {
c[n] = 0; c[n] = 0;
*r = c; *ret = c;
return 0; return 0;
} }