X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?a=blobdiff_plain;f=mymail.c;h=50e5ba517fd3b195a9558ce4f7d71906de10896f;hb=6535d20729f93dcfb759a8a9147f122857166d88;hp=ef6e5c16cba363e2f377a6ed3789bf1cfb40cb47;hpb=592f082bf057a152b394a2c331241063be96e2d9;p=mymail.git diff --git a/mymail.c b/mymail.c index ef6e5c1..50e5ba5 100644 --- a/mymail.c +++ b/mymail.c @@ -46,7 +46,7 @@ #include #define MYMAIL_DB_MAGIC_TOKEN "mymail_index_file" -#define VERSION "0.9.2" +#define VERSION "0.9.5" #define MAX_NB_SEARCH_CONDITIONS 32 @@ -55,13 +55,11 @@ #define LEADING_FROM_LINE_REGEXP_STRING "^From [^ ]* \\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\) \\(Jan\\|Feb\\|Mar\\|Apr\\|May\\|Jun\\|Jul\\|Aug\\|Sep\\|Oct\\|Nov\\|Dec\\) [ 123][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9][0-9][0-9][0-9]\n$" -regex_t leading_from_line_regexp; - /* Global variables! */ -int paranoid; int quiet; -int ignore_dot_files; + +regex_t leading_from_line_regexp; /********************************************************************/ @@ -78,7 +76,7 @@ enum { MAX_ID }; -static char *field_names[] = { +static char *field_keys[] = { "mail", "lead", "from", @@ -155,11 +153,12 @@ int xor(int a, int b) { const char *parse_token(char *token_buffer, size_t token_buffer_size, char separator, const char *string) { char *u = token_buffer; + while(*string == separator) { string++; } while(u < token_buffer + token_buffer_size - 1 && *string && *string != separator) { *(u++) = *(string++); } - while(*string == separator) string++; + while(*string == separator) { string++; } *u = '\0'; return string; } @@ -183,7 +182,6 @@ char *default_value(char *current_value, FILE *safe_fopen(const char *path, const char *mode, const char *comment) { FILE *result = fopen(path, mode); - /* printf("Opening '%s' with mode \"%s\"\n", path, mode); */ if(result) { return result; } else { @@ -238,7 +236,7 @@ int ignore_entry(const char *name) { return strcmp(name, ".") == 0 || strcmp(name, "..") == 0 || - (ignore_dot_files && name[0] == '.' && name[1] != '/'); + (name[0] == '.' && name[1] != '/'); } int is_a_leading_from_line(char *mbox_line) { @@ -365,7 +363,7 @@ int search_in_db(const char *db_filename, char raw_db_line[BUFFER_SIZE]; char current_mail_filename[PATH_MAX + 1]; unsigned long int current_position_in_mail; - char mbox_name[TOKEN_BUFFER_SIZE]; + char mbox_key[TOKEN_BUFFER_SIZE]; const char *mbox_value; int mbox_id; int already_written, m, n; @@ -415,9 +413,9 @@ int search_in_db(const char *db_filename, strcpy(current_mail_filename, ""); while(fgets(raw_db_line, BUFFER_SIZE, db_file)) { - mbox_value = parse_token(mbox_name, TOKEN_BUFFER_SIZE, ' ', raw_db_line); + mbox_value = parse_token(mbox_key, TOKEN_BUFFER_SIZE, ' ', raw_db_line); - if(strcmp("mail", mbox_name) == 0) { + if(strcmp("mail", mbox_key) == 0) { char position_in_file_string[TOKEN_BUFFER_SIZE]; if(current_mail_filename[0]) { @@ -432,19 +430,19 @@ int search_in_db(const char *db_filename, /* Now check the body ones */ + nb_fulfilled_body_conditions = 0; + if(nb_body_conditions > 0) { update_body_hits(current_mail_filename, current_position_in_mail, nb_search_conditions, search_conditions, nb_body_conditions, hits); - } - - nb_fulfilled_body_conditions = 0; - for(n = 0; n < nb_search_conditions; n++) { - if(search_conditions[n].field_id == ID_BODY && - xor(hits[n], search_conditions[n].negation)) { - nb_fulfilled_body_conditions++; + for(n = 0; n < nb_search_conditions; n++) { + if(search_conditions[n].field_id == ID_BODY && + xor(hits[n], search_conditions[n].negation)) { + nb_fulfilled_body_conditions++; + } } } @@ -466,7 +464,7 @@ int search_in_db(const char *db_filename, else { mbox_id = -1; for(m = 0; (m < MAX_ID) && mbox_id == -1; m++) { - if(strncmp(field_names[m], mbox_name, strlen(mbox_name)) == 0) { + if(strncmp(field_keys[m], mbox_key, strlen(mbox_key)) == 0) { mbox_id = m; } } @@ -544,7 +542,7 @@ void index_one_mbox_line(unsigned int nb_fields_to_parse, for(f = 0; f < nb_fields_to_parse; f++) { if(regexec(&fields_to_parse[f].regexp, raw_mbox_line, 1, &matches, 0) == 0) { fprintf(db_file, "%s %s\n", - field_names[fields_to_parse[f].id], + field_keys[fields_to_parse[f].id], raw_mbox_line + matches.rm_eo); } } @@ -575,7 +573,6 @@ void index_mbox(const char *mbox_filename, "Got a ^\"From \" in the header in %s:%lu.\n", mbox_filename, position_in_file); fprintf(stderr, "%s", raw_mbox_line); - if(paranoid) { exit(EXIT_FAILURE); } } in_header = 1; new_header = 1; @@ -704,6 +701,7 @@ static struct time_criterion time_criteria[] = { { "8h", 8, -1, -1 }, { "today", 24, -1, -1 }, { "24h", 24, -1, -1 }, + { "48h", 48, -1, -1 }, { "week", 24 * 7, -1, -1 }, { "month", 24 * 31, -1, -1 }, { "year", 24 * 365, -1, -1 }, @@ -776,7 +774,7 @@ void init_condition(struct search_condition *condition, const char *full_string, /* No time condition matched, look for the search fields */ for(m = 0; (m < MAX_ID) && condition->field_id == -1; m++) { - if(strncmp(field_names[m], search_field, strlen(search_field)) == 0) { + if(strncmp(field_keys[m], search_field, strlen(search_field)) == 0) { condition->field_id = m; } } @@ -786,7 +784,7 @@ void init_condition(struct search_condition *condition, const char *full_string, if(condition->field_id == -1) { if(default_search_field) { for(m = 0; (m < MAX_ID) && condition->field_id == -1; m++) { - if(strncmp(field_names[m], + if(strncmp(field_keys[m], default_search_field, strlen(default_search_field)) == 0) { condition->field_id = m; } @@ -797,7 +795,7 @@ void init_condition(struct search_condition *condition, const char *full_string, if(condition->field_id == -1) { fprintf(stderr, - "mymail: Syntax error in field name \"%s\".\n", + "mymail: Syntax error in field key \"%s\".\n", search_field); exit(EXIT_FAILURE); } @@ -808,7 +806,7 @@ void init_condition(struct search_condition *condition, const char *full_string, fprintf(stderr, "mymail: Syntax error in regexp \"%s\" for field \"%s\".\n", string, - field_names[condition->field_id]); + field_keys[condition->field_id]); exit(EXIT_FAILURE); } } @@ -847,10 +845,8 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); } - paranoid = 0; quiet = 0; default_search_field = 0; - ignore_dot_files = 1; strncpy(output_filename, "", PATH_MAX); setlocale(LC_ALL, ""); @@ -1006,7 +1002,7 @@ int main(int argc, char **argv) { fprintf(stderr, "mymail: Syntax error in regexp \"%s\" for field \"%s\".\n", fields_to_parse[f].regexp_string, - field_names[fields_to_parse[f].id]); + field_keys[fields_to_parse[f].id]); exit(EXIT_FAILURE); } }