From 7716a6c23419d434581aaa913cc8d901d3c84af2 Mon Sep 17 00:00:00 2001 From: "J. Alexander Treuman" Date: Wed, 7 Jun 2006 21:00:36 +0000 Subject: Check that db_file exists before checking if we can write to it. Committed on behalf of qball. git-svn-id: https://svn.musicpd.org/mpd/trunk@4255 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/directory.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/directory.c') diff --git a/src/directory.c b/src/directory.c index 2464271f4..9c8e3ba98 100644 --- a/src/directory.c +++ b/src/directory.c @@ -48,6 +48,7 @@ #include #include #include +#include #define DIRECTORY_DIR "directory: " #define DIRECTORY_MTIME "mtime: " @@ -989,7 +990,36 @@ void sortDirectory(Directory * directory) { int checkDirectoryDB() { char * dbFile = getDbFile(); + /** + * Check if the file exists + */ + if(access(dbFile, F_OK)) { + char *dirPath = NULL; + char *dbPath = strdup(dbFile); + + /** + * If the file doesn't exits, 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 + */ + dirPath = dirname(dbPath); + + /** + * Check if we can write to the directory + */ + if(access(dirPath, R_OK|W_OK)) + { + ERROR("Can't create db file in \"%s\": %s", dirPath, strerror(errno)); + free(dbPath); + return -1; + } + free(dbPath); + return 0; + + } + /** + * File exists, now check if we can write it + */ if(access(dbFile, R_OK|W_OK)) { ERROR("db file \"%s\" cannot be opened for reading/writing: %s", dbFile, strerror(errno)); -- cgit v1.2.3