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:
parent
c50e4f95d8
commit
2d2ebd6b8f
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user