X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook.c;h=06c4ea788ccd2f0d2d82569bfa481792b4794aac;hb=7a7531e544d236d58ca077ce56b7d6d0c60faa09;hp=7ce99ae3366d9269b12bfb21d9ca49afd8b387ed;hpb=e0e2b1ebd0bbc1728e7117ff88e5046f2870cfaa;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index 7ce99ae..06c4ea7 100644 --- a/abook.c +++ b/abook.c @@ -6,19 +6,21 @@ * Copyright (C) Jaakko Heinonen */ +#include +#include +#include +#include +#include #include #include -#include #include -#include -#include -#include #ifdef HAVE_CONFIG_H # include "config.h" #endif #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE) # include #endif +#include #include "abook.h" #include "ui.h" #include "database.h" @@ -29,7 +31,7 @@ #include "options.h" #include "getname.h" #include "getopt.h" -#include +#include "xmalloc.h" static void init_abook(); static void quit_abook_sig(int i); @@ -98,6 +100,16 @@ check_abook_directory() free(dir); } +static void +xmalloc_error_handler(int err) +{ + if(is_ui_initialized()) + quit_abook(QUIT_SAVE); + + fprintf(stderr, "Memory allocation failure: %s\n", strerror(err)); + exit(EXIT_FAILURE); +} + static void init_abook() { @@ -137,12 +149,15 @@ init_abook() } void -quit_abook() +quit_abook(int save_db) { - if(opt_get_bool(BOOL_AUTOSAVE)) - save_database(); - else if(statusline_ask_boolean("Save database", TRUE)) - save_database(); + if(save_db) { + if(opt_get_bool(BOOL_AUTOSAVE)) + save_database(); + else if(statusline_ask_boolean("Save database", TRUE)) + save_database(); + } else if(!statusline_ask_boolean("Quit without saving", FALSE)) + return; free_opts(); close_database(); @@ -155,7 +170,7 @@ quit_abook() static void quit_abook_sig(int i) { - quit_abook(); + quit_abook(QUIT_SAVE); } int @@ -164,6 +179,7 @@ main(int argc, char **argv) #if defined(HAVE_SETLOCALE) && defined(HAVE_LOCALE_H) setlocale(LC_ALL, ""); #endif + xmalloc_set_error_handler(xmalloc_error_handler); parse_command_line(argc, argv); @@ -171,7 +187,7 @@ main(int argc, char **argv) get_commands(); - quit_abook(); + quit_abook(QUIT_SAVE); return 0; } @@ -179,8 +195,8 @@ main(int argc, char **argv) static void free_filenames() { - my_free(rcfile); - my_free(datafile); + xfree(rcfile); + xfree(datafile); } @@ -570,39 +586,6 @@ launch_wwwbrowser(int item) ui_init_curses(); } -void * -abook_malloc(size_t size) -{ - void *ptr; - - if ( (ptr = malloc(size)) == NULL ) { - if( is_ui_initialized() ) - quit_abook(); - perror("malloc() failed"); - exit(1); - } - - return ptr; -} - -void * -abook_realloc(void *ptr, size_t size) -{ - ptr = realloc(ptr, size); - - if(size == 0) - return NULL; - - if(ptr == NULL) { - if(is_ui_initialized()) - quit_abook(); - perror("realloc() failed"); - exit(1); - } - - return ptr; -} - FILE * abook_fopen (const char *path, const char *mode) { @@ -744,13 +727,13 @@ add_email_add_item(int quiet, char *name, char *email) "you may want to use --add-email-quiet\n"); exit(1); } - printf("Add ``%s <%s>'' to %s ? (y/n)\n", - name, - email, - datafile - ); + do { - c = fgetc(in); + printf("Add ``%s <%s>'' to %s ? (y/n)\n", + name, + email, + datafile); + c = getc(in); if(c == 'n' || c == 'N') { fclose(in); return 0; @@ -787,10 +770,10 @@ add_email(int quiet) getname(line, &name, &email); add_email_count += add_email_add_item(quiet, name, email); - my_free(name); - my_free(email); + xfree(name); + xfree(email); } - my_free(line); + xfree(line); } while( !feof(stdin) ); quit_add_email();