aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/directory.c30
1 files changed, 30 insertions, 0 deletions
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 <errno.h>
#include <signal.h>
#include <assert.h>
+#include <libgen.h>
#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));