X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=abook.c;h=06c4ea788ccd2f0d2d82569bfa481792b4794aac;hb=7a7531e544d236d58ca077ce56b7d6d0c60faa09;hp=d7965098aa7fa9c57a8689465d4161a76841e30c;hpb=98f2bc1e0859323f381aa818a8c00d7ee85399d8;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index d796509..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,15 +170,16 @@ quit_abook() static void quit_abook_sig(int i) { - quit_abook(); + quit_abook(QUIT_SAVE); } int main(int argc, char **argv) { #if defined(HAVE_SETLOCALE) && defined(HAVE_LOCALE_H) - setlocale(LC_ALL, "" ); + 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); } @@ -451,7 +467,7 @@ mutt_query(char *str) putchar('\n'); while(i >= 0) { muttq_print_item(stdout, i); - i = find_item(str, i+1, search_fields); + i = find_item(str, i + 1, search_fields); } } @@ -530,8 +546,7 @@ launch_mutt(int item) } } - cmd = strconcat(mutt_command, " \'", mailstr, - "\'", NULL); + cmd = strconcat(mutt_command, " \'", mailstr, "\'", NULL); free(mailstr); #ifdef DEBUG fprintf(stderr, "cmd: %s\n", cmd); @@ -571,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) { @@ -642,7 +624,7 @@ convert(char *srcformat, char *srcfile, char *dstformat, char *dstfile) init_opts(); load_opts(rcfile); - switch( import_file(srcformat, srcfile) ) { + switch(import_file(srcformat, srcfile)) { case -1: fprintf(stderr, "input format %s not supported\n", srcformat); @@ -655,7 +637,7 @@ convert(char *srcformat, char *srcfile, char *dstformat, char *dstfile) } if(!ret) - switch( export_file(dstformat, dstfile) ) { + switch(export_file(dstformat, dstfile)) { case -1: fprintf(stderr, "output format %s not supported\n", @@ -745,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; @@ -775,7 +757,7 @@ add_email(int quiet) char *name = NULL, *email = NULL; struct stat s; - if( (fstat(fileno(stdin), &s)) == -1 || S_ISDIR(s.st_mode)) { + if( (fstat(fileno(stdin), &s)) == -1 || S_ISDIR(s.st_mode) ) { fprintf(stderr, "stdin is a directory or cannot stat stdin\n"); exit(1); } @@ -788,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();