diff options
-rw-r--r-- | src/pulsecore/core-util.c | 25 | ||||
-rw-r--r-- | src/pulsecore/core-util.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index d0ff7512..61f9a656 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -2604,3 +2604,28 @@ char *pa_unescape(char *p) { return p; } + +char *pa_realpath(const char *path) { + char *r, *t; + pa_assert(path); + + /* We want only abolsute paths */ + if (path[0] != '/') { + errno = EINVAL; + return NULL; + } + +#ifndef __GLIBC__ +#error "It's not clear whether this system supports realpath(..., NULL) like GNU libc does. If it doesn't we need a private version of realpath() here." +#endif + + if (!(r = realpath(path, NULL))) + return NULL; + + /* We copy this here in case our pa_xmalloc() is not implemented + * on top of libc malloc() */ + t = pa_xstrdup(r); + pa_xfree(r); + + return t; +} diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h index 8fd521b1..0ba33f31 100644 --- a/src/pulsecore/core-util.h +++ b/src/pulsecore/core-util.h @@ -221,4 +221,6 @@ char *pa_replace(const char*s, const char*a, const char *b); char *pa_unescape(char *p); +char *pa_realpath(const char *path); + #endif |