aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-20 22:18:40 +0200
committerMax Kellermann <max@duempel.org>2008-10-20 22:18:40 +0200
commit49260e6db20aa865e485a02fae5c0249d1df0d8a (patch)
tree03446e4b7e117e87d048d2e36ad199b68cefe752
parentba96920a52bbd2208aa1f3b284edc864e26198ce (diff)
downloadmpd-49260e6db20aa865e485a02fae5c0249d1df0d8a.tar.gz
mpd-49260e6db20aa865e485a02fae5c0249d1df0d8a.tar.xz
mpd-49260e6db20aa865e485a02fae5c0249d1df0d8a.zip
path: replaced parent_path() with g_path_get_dirname()
Again, GLib's version is more robust than ours.
Diffstat (limited to '')
-rw-r--r--src/database.c11
-rw-r--r--src/path.c28
-rw-r--r--src/path.h10
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 <assert.h>
#include <string.h>
+#include <glib.h>
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);