From: Francois Fleuret Date: Tue, 12 Feb 2013 08:01:22 +0000 (+0100) Subject: Added safe_fopen. X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=mymail.git;a=commitdiff_plain;h=874926dc3a56a9127e32c757db0c32a4388c958b Added safe_fopen. --- diff --git a/mymail.c b/mymail.c index 5fb92be..fd200a1 100644 --- a/mymail.c +++ b/mymail.c @@ -182,18 +182,16 @@ char *default_value(char *current_value, } } -/********************************************************************/ - -/* malloc with error checking. */ - -void *safe_malloc(size_t n) { - void *p = malloc(n); - if(!p && n != 0) { +FILE *safe_fopen(const char *path, const char *mode, const char *comment) { + FILE *result = fopen(path, mode); + if(result) { + return result; + } else { fprintf(stderr, - "mymail: cannot allocate memory: %s\n", strerror(errno)); + "mymail: Cannot open file '%s' (%s) with mode \"%s\".\n", + path, comment, mode); exit(EXIT_FAILURE); } - return p; } /*********************************************************************/ @@ -327,14 +325,7 @@ void update_body_hits(char *mail_filename, int position_in_mail, nb_body_hits = 0; header = 1; - mail_file = fopen(mail_filename, "r"); - - if(!mail_file) { - fprintf(stderr, - "mymail: Cannot open mbox '%s' for body scan.\n", - mail_filename); - exit(EXIT_FAILURE); - } + mail_file = safe_fopen(mail_filename, "r", "mbox for body scan"); fseek(mail_file, position_in_mail, SEEK_SET); @@ -371,15 +362,7 @@ void extract_mail(const char *mail_filename, unsigned long int position_in_mail, char raw_mbox_line[BUFFER_SIZE]; FILE *mail_file; - mail_file = fopen(mail_filename, "r"); - - if(!mail_file) { - fprintf(stderr, - "mymail: Cannot open mbox '%s' for mail extraction.\n", - mail_filename); - exit(EXIT_FAILURE); - } - + mail_file = safe_fopen(mail_filename, "r", "mbox for mail extraction"); fseek(mail_file, position_in_mail, SEEK_SET); if(fgets(raw_mbox_line, BUFFER_SIZE, mail_file)) { @@ -419,15 +402,7 @@ int search_in_db(const char *db_filename, fflush(stdout); } - db_file = fopen(db_filename, "r"); - - if(!db_file) { - fprintf(stderr, - "mymail: Cannot open \"%s\" for reading: %s\n", - db_filename, - strerror(errno)); - exit(EXIT_FAILURE); - } + db_file = safe_fopen(db_filename, "r", "index file for search"); /* First, check the db file leading line integrity */ @@ -603,13 +578,7 @@ void index_mbox(const char *mbox_filename, int in_header, new_header; unsigned long int position_in_file; - file = fopen(mbox_filename, "r"); - - if(!file) { - fprintf(stderr, "mymail: Cannot open '%s'.\n", mbox_filename); - if(paranoid) { exit(EXIT_FAILURE); } - return; - } + file = safe_fopen(mbox_filename, "r", "mbox for indexing"); in_header = 0; new_header = 0; @@ -1072,15 +1041,7 @@ int main(int argc, char **argv) { mbox_filename_regexp = 0; } - db_file = fopen(db_filename, "w"); - - if(!db_file) { - fprintf(stderr, - "mymail: Cannot open \"%s\" for writing: %s\n", - db_filename, - strerror(errno)); - exit(EXIT_FAILURE); - } + db_file = safe_fopen(db_filename, "w", "index file for indexing"); for(f = 0; f < nb_fields_to_parse; f++) { if(regcomp(&fields_to_parse[f].regexp, @@ -1123,15 +1084,7 @@ int main(int argc, char **argv) { int nb_extracted_mails = 0; if(output_filename[0]) { - output_file = fopen(output_filename, "w"); - - if(!output_file) { - fprintf(stderr, - "mymail: Cannot open result file \"%s\" for writing: %s\n", - output_filename, - strerror(errno)); - exit(EXIT_FAILURE); - } + output_file = safe_fopen(output_filename, "w", "result mbox"); } else { output_file = stdout; quiet = 1;