X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook.c;h=acf95ca871c68578f4ef76c766060525c2f090bc;hb=ca9cda9e7096dad72f1335a810314001daca7314;hp=45eb83d54bc28abf0aadb95f97b66e4ec1de168d;hpb=481433c4d30a6bd8d8f9cfb88e1d83af69a640a2;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index 45eb83d..acf95ca 100644 --- a/abook.c +++ b/abook.c @@ -12,6 +12,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H # include "config.h" #endif @@ -62,10 +63,46 @@ datafile_writeable() return TRUE; } +static void +check_abook_directory() +{ + struct stat s; + char *dir; + + assert(!is_ui_initialized()); + + if(alternative_datafile) + return; + + dir = strconcat(getenv("HOME"), "/" DIR_IN_HOME, NULL); + assert(dir != NULL); + + if(stat(dir, &s) == -1) { + if(errno != ENOENT) { + perror(dir); + free(dir); + exit(1); + } + if(mkdir(dir, 0700) == -1) { + printf("Cannot create directory %s\n", dir); + perror(dir); + free(dir); + exit(1); + } + } else if(!S_ISDIR(s.st_mode)) { + printf("%s is not a directory\n", dir); + free(dir); + exit(1); + } + + free(dir); +} + static void init_abook() { set_filenames(); + check_abook_directory(); init_options(); signal(SIGKILL, quit_abook_sig); @@ -85,7 +122,7 @@ init_abook() "If you continue all changes will " "be lost. Do you want to continue?", FALSE)) { close_config(); - close_database(); + /*close_database();*/ close_ui(); exit(1); } @@ -154,10 +191,12 @@ set_filenames() } if(!datafile) - datafile = strconcat(getenv("HOME"), "/" DATAFILE, NULL); + datafile = strconcat(getenv("HOME"), "/" DIR_IN_HOME "/" + DATAFILE, NULL); if(!rcfile) - rcfile = strconcat(getenv("HOME"), "/" RCFILE, NULL); + rcfile = strconcat(getenv("HOME"), "/" DIR_IN_HOME "/" + RCFILE, NULL); atexit(free_filenames); }