X-Git-Url: https://git.deb.at/?a=blobdiff_plain;ds=sidebyside;f=abook.c;h=45eb83d54bc28abf0aadb95f97b66e4ec1de168d;hb=1cea479962427f5818f7368fe2174f3131f6b356;hp=7b119b9b6c8b9174fbd0316e1660ede2c0881450;hpb=3cea3c8809447c5d6658671b78b9af7137fd9b0d;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index 7b119b9..45eb83d 100644 --- a/abook.c +++ b/abook.c @@ -33,7 +33,6 @@ static void init_abook(); static void quit_abook_sig(int i); static void set_filenames(); -static void free_filenames(); static void parse_command_line(int argc, char **argv); static void show_usage(); static void mutt_query(char *str); @@ -45,6 +44,24 @@ static void add_email(int); char *datafile = NULL; char *rcfile = NULL; +int alternative_datafile = FALSE; +int alternative_rcfile = FALSE; + +static int +datafile_writeable() +{ + FILE *f; + + assert(datafile != NULL); + + if( (f = fopen(datafile, "a")) == NULL) + return FALSE; + + fclose(f); + + return TRUE; +} + static void init_abook() { @@ -59,26 +76,21 @@ init_abook() umask(DEFAULT_UMASK); - /* - * this is very ugly for now - */ - /*if( options_get_int("datafile", "autosave") )*/ - - if( load_database(datafile) == 2 ) { - char *tmp = strconcat(getenv("HOME"), - "/" DATAFILE, NULL); - - if( safe_strcmp(tmp, datafile) ) { - refresh_screen(); - statusline_msg("Sorry, the specified file does " - "not appear to be a valid abook addressbook"); - statusline_msg("Will open default addressbook..."); - free(datafile); - datafile = tmp; - load_database(datafile); - } else - free(tmp); - } + if(!datafile_writeable()) { + char *s = mkstr("File %s is not writeable", datafile); + refresh_screen(); + statusline_msg(s); + free(s); + if(load_database(datafile) || !statusline_ask_boolean( + "If you continue all changes will " + "be lost. Do you want to continue?", FALSE)) { + close_config(); + close_database(); + close_ui(); + exit(1); + } + } else + load_database(datafile); refresh_screen(); } @@ -123,6 +135,14 @@ main(int argc, char **argv) return 0; } +static void +free_filenames() +{ + my_free(rcfile); + my_free(datafile); +} + + static void set_filenames() { @@ -142,13 +162,6 @@ set_filenames() atexit(free_filenames); } -static void -free_filenames() -{ - my_free(rcfile); - my_free(datafile); -} - /* * CLI */ @@ -261,6 +274,7 @@ parse_command_line(int argc, char **argv) break; case 'f': set_filename(&datafile, optarg); + alternative_datafile = TRUE; break; case OPT_MUTT_QUERY: query_string = optarg; @@ -268,6 +282,7 @@ parse_command_line(int argc, char **argv) break; case 'C': set_filename(&rcfile, optarg); + alternative_rcfile = TRUE; break; case OPT_CONVERT: change_mode(&mode, MODE_CONVERT);