From 49260e6db20aa865e485a02fae5c0249d1df0d8a Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 20 Oct 2008 22:18:40 +0200 Subject: [PATCH] path: replaced parent_path() with g_path_get_dirname() Again, GLib's version is more robust than ours. --- src/database.c | 11 +++++++---- src/path.c | 28 ---------------------------- src/path.h | 10 ---------- 3 files changed, 7 insertions(+), 42 deletions(-) diff --git a/src/database.c b/src/database.c index 93ce2e96b..74a3a3e3c 100644 --- a/src/database.c +++ b/src/database.c @@ -33,6 +33,7 @@ #include #include +#include static struct directory *music_root; @@ -151,19 +152,18 @@ db_check(void) /* If the file doesn't exist, we can't check if we can write * it, so we are going to try to get the directory path, and * see if we can write a file in that */ - char dirPath[MPD_PATH_MAX]; - parent_path(dirPath, dbFile); - if (*dirPath == '\0') - strcpy(dirPath, "/"); + char *dirPath = g_path_get_dirname(dbFile); /* Check that the parent part of the path is a directory */ if (stat(dirPath, &st) < 0) { + g_free(dirPath); ERROR("Couldn't stat parent directory of db file " "\"%s\": %s\n", dbFile, strerror(errno)); return -1; } if (!S_ISDIR(st.st_mode)) { + g_free(dirPath); ERROR("Couldn't create db file \"%s\" because the " "parent path is not a directory\n", dbFile); return -1; @@ -173,9 +173,12 @@ db_check(void) if (access(dirPath, R_OK | W_OK)) { ERROR("Can't create db file in \"%s\": %s\n", dirPath, strerror(errno)); + g_free(dirPath); return -1; } + g_free(dirPath); + return 0; } diff --git a/src/path.c b/src/path.c index 14cb34ea9..5398c7f1a 100644 --- a/src/path.c +++ b/src/path.c @@ -202,34 +202,6 @@ void pathcpy_trunc(char *dest, const char *src) dest[len] = '\0'; } -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'; - } - - return path_max_tmp; -} - char *sanitizePathDup(const char *path) { int len = strlen(path) + 1; diff --git a/src/path.h b/src/path.h index 62e7acc03..739985a0c 100644 --- a/src/path.h +++ b/src/path.h @@ -58,16 +58,6 @@ char *pfx_dir(char *dst, /* 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 "/" */ char *sanitizePathDup(const char *path);