summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pulsecore/core-util.c24
-rw-r--r--src/pulsecore/core-util.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index a644b664..4962112b 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 0fe865ec..d26cf241 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