diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index a644b6642..4962112bb 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -1507,3 +1507,27 @@ void pa_close_pipe(int fds[2]) { fds[0] = fds[1] = -1; } + +char *pa_readlink(const char *p) { + size_t l = 100; + + for (;;) { + char *c; + ssize_t n; + + c = pa_xnew(char, l); + + if ((n = readlink(p, c, l-1)) < 0) { + pa_xfree(c); + return NULL; + } + + if (n < l-1) { + c[l-1] = 0; + return c; + } + + pa_xfree(c); + l *= 2; + } +} diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index 0fe865ec4..d26cf2411 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -122,4 +122,6 @@ static inline unsigned pa_make_power_of_two(unsigned n) { void pa_close_pipe(int fds[2]); +char *pa_readlink(const char *p); + #endif