From b1cdf8dadf7487d81262f2c4ab76abb378648381 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 3 Jan 2008 07:22:18 +0000 Subject: document parent_path() git-svn-id: https://svn.musicpd.org/mpd/trunk@7128 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/path.c | 10 ++++++++++ src/path.h | 13 ++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/path.c b/src/path.c index 8c7b61cd..a99f8bd2 100644 --- a/src/path.c +++ b/src/path.c @@ -225,13 +225,23 @@ void pathcpy_trunc(char *dest, const char *src) char *parent_path(char *path_max_tmp, const char *path) { char *c; + static const int handle_trailing_slashes = 0; pathcpy_trunc(path_max_tmp, path); + + if (handle_trailing_slashes) { + size_t last_char = strlen(path_max_tmp) - 1; + + while (last_char > 0 && path_max_tmp[last_char] == '/') + path_max_tmp[last_char--] = '\0'; + } + c = strrchr(path_max_tmp,'/'); if (c == NULL) path_max_tmp[0] = '\0'; else { + /* strip redundant slashes: */ while ((path_max_tmp <= c) && *(--c) == '/') /* nothing */ ; c[1] = '\0'; diff --git a/src/path.h b/src/path.h index 5a452ca7..fef93540 100644 --- a/src/path.h +++ b/src/path.h @@ -60,13 +60,20 @@ char *pfx_dir(char *dst, const char *path, const size_t path_len, const char *pfx, const size_t pfx_len); -/* relative music path to absolute music path - * char * passed is a static variable, so don't free it - */ +/* relative music path to absolute music path */ char *rmp2amp_r(char *dst, const char *rel_path); +/* relative playlist path to absolute playlist path */ char *rpp2app_r(char *dst, const char *rel_path); +/* + * parent_path - saner version of dirname(3) with slightly different semantics + * - we will return "" instead of "." or "/" if we have no parent + * this is because we only deal with internal paths + * - we always skip over redundant slashes in the middle, if there are any + * - we will never get meaningful paths with trailing slashes in our callers + * (set handle_trailing_slashes to true if we do) + */ char *parent_path(char *path_max_tmp, const char *path); /* strips extra "///" and leading "/" and trailing "/" */ -- cgit v1.2.3