Commit 49260e6d authored by Max Kellermann's avatar Max Kellermann

path: replaced parent_path() with g_path_get_dirname()

Again, GLib's version is more robust than ours.
parent ba96920a
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
#include <glib.h>
static struct directory *music_root; static struct directory *music_root;
...@@ -151,19 +152,18 @@ db_check(void) ...@@ -151,19 +152,18 @@ db_check(void)
/* If the file doesn't exist, we can't check if we can write /* 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 * it, so we are going to try to get the directory path, and
* see if we can write a file in that */ * see if we can write a file in that */
char dirPath[MPD_PATH_MAX]; char *dirPath = g_path_get_dirname(dbFile);
parent_path(dirPath, dbFile);
if (*dirPath == '\0')
strcpy(dirPath, "/");
/* Check that the parent part of the path is a directory */ /* Check that the parent part of the path is a directory */
if (stat(dirPath, &st) < 0) { if (stat(dirPath, &st) < 0) {
g_free(dirPath);
ERROR("Couldn't stat parent directory of db file " ERROR("Couldn't stat parent directory of db file "
"\"%s\": %s\n", dbFile, strerror(errno)); "\"%s\": %s\n", dbFile, strerror(errno));
return -1; return -1;
} }
if (!S_ISDIR(st.st_mode)) { if (!S_ISDIR(st.st_mode)) {
g_free(dirPath);
ERROR("Couldn't create db file \"%s\" because the " ERROR("Couldn't create db file \"%s\" because the "
"parent path is not a directory\n", dbFile); "parent path is not a directory\n", dbFile);
return -1; return -1;
...@@ -173,9 +173,12 @@ db_check(void) ...@@ -173,9 +173,12 @@ db_check(void)
if (access(dirPath, R_OK | W_OK)) { if (access(dirPath, R_OK | W_OK)) {
ERROR("Can't create db file in \"%s\": %s\n", dirPath, ERROR("Can't create db file in \"%s\": %s\n", dirPath,
strerror(errno)); strerror(errno));
g_free(dirPath);
return -1; return -1;
} }
g_free(dirPath);
return 0; return 0;
} }
......
...@@ -202,34 +202,6 @@ void pathcpy_trunc(char *dest, const char *src) ...@@ -202,34 +202,6 @@ void pathcpy_trunc(char *dest, const char *src)
dest[len] = '\0'; 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) char *sanitizePathDup(const char *path)
{ {
int len = strlen(path) + 1; int len = strlen(path) + 1;
......
...@@ -58,16 +58,6 @@ char *pfx_dir(char *dst, ...@@ -58,16 +58,6 @@ char *pfx_dir(char *dst,
/* relative playlist path to absolute playlist path */ /* relative playlist path to absolute playlist path */
char *rpp2app_r(char *dst, const char *rel_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 "/" */ /* strips extra "///" and leading "/" and trailing "/" */
char *sanitizePathDup(const char *path); char *sanitizePathDup(const char *path);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment