projects
/
mymail.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Changed indentation to avoid a gcc warning.
[mymail.git]
/
mymail.c
diff --git
a/mymail.c
b/mymail.c
index
80864d2
..
a04fde8
100644
(file)
--- a/
mymail.c
+++ b/
mymail.c
@@
-21,11
+21,13
@@
/*
/*
- This command is a dumb mail indexer. It can either (1) scan
- directories containing mbox files, and create a db file containing
- for each mail a list of fields computed from the header, or (2)
- read such a db file and get all the mails matching regexp-defined
- conditions on the fields, to create a resulting mbox file.
+ mymail is a simple mail indexer. It can:
+
+ (1) scan mbox files, and create a db file containing for each mail a
+ list of fields computed from its header.
+
+ (2) read such a db file, gets all the mails matching regexp-defined
+ conditions on the fields, and generates a resulting mbox file.
It is low-tech, simple, light and fast.
It is low-tech, simple, light and fast.
@@
-35,6
+37,7
@@
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
+#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
@@
-46,7
+49,7
@@
#include <time.h>
#define MYMAIL_DB_MAGIC_TOKEN "mymail_index_file"
#include <time.h>
#define MYMAIL_DB_MAGIC_TOKEN "mymail_index_file"
-#define MYMAIL_VERSION "0.9.
8
"
+#define MYMAIL_VERSION "0.9.
10
"
#define MYMAIL_DB_FORMAT_VERSION 1
#define MYMAIL_DB_FORMAT_VERSION 1
@@
-68,8
+71,11
@@
struct alias_node {
int global_quiet;
int global_use_leading_time;
int global_quiet;
int global_use_leading_time;
+int global_nb_mails_max;
+int global_discard_mail_from_the_future;
regex_t global_leading_from_line_regexp;
struct alias_node *global_alias_list;
regex_t global_leading_from_line_regexp;
struct alias_node *global_alias_list;
+time_t global_current_time;
/********************************************************************/
/********************************************************************/
@@
-83,6
+89,9
@@
enum {
ID_PARTICIPANT,
ID_BODY,
ID_TIME_INTERVAL,
ID_PARTICIPANT,
ID_BODY,
ID_TIME_INTERVAL,
+ ID_MAIL_ID,
+ ID_REFERENCE_ID,
+ ID_THREAD_ID,
MAX_ID
};
MAX_ID
};
@@
-95,7
+104,10
@@
static char *field_keys[] = {
"date",
"part",
"body",
"date",
"part",
"body",
- "interval"
+ "interval",
+ "mailid",
+ "reference",
+ "thread"
};
/********************************************************************/
};
/********************************************************************/
@@
-152,6
+164,20
@@
static struct parsable_field fields_to_parse[] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
},
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
},
+ {
+ ID_MAIL_ID,
+ REG_ICASE,
+ "^message-id: ",
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ },
+
+ {
+ ID_REFERENCE_ID,
+ REG_ICASE,
+ "^\\(in-reply-to\\|references\\): ",
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+ },
+
};
/********************************************************************/
};
/********************************************************************/
@@
-199,7
+225,7
@@
void *safe_malloc(size_t n) {
void *p = malloc(n);
if(!p && n != 0) {
fprintf(stderr,
void *p = malloc(n);
if(!p && n != 0) {
fprintf(stderr,
- "
selector
: cannot allocate memory: %s\n", strerror(errno));
+ "
mymail
: cannot allocate memory: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
return p;
exit(EXIT_FAILURE);
}
return p;
@@
-211,8
+237,9
@@
FILE *safe_fopen(const char *path, const char *mode, const char *comment) {
return result;
} else {
fprintf(stderr,
return result;
} else {
fprintf(stderr,
- "mymail: Cannot open file '%s' (%s) with mode \"%s\".\n",
- path, comment, mode);
+ "mymail: Cannot open file '%s' (%s) with mode \"%s\": %s\n",
+ path, comment, mode,
+ strerror(errno));
exit(EXIT_FAILURE);
}
}
exit(EXIT_FAILURE);
}
}
@@
-238,6
+265,8
@@
void print_usage(FILE *out) {
fprintf(out, " -t, --use-leading-time\n");
fprintf(out, " use the time stamp from the leading line of each mail and not the Date:\n");
fprintf(out, " field\n");
fprintf(out, " -t, --use-leading-time\n");
fprintf(out, " use the time stamp from the leading line of each mail and not the Date:\n");
fprintf(out, " field\n");
+ fprintf(out, " -f, --do-not-discard-mails-from-the-future\n");
+ fprintf(out, " do not ignore mails with a date more than 24h in the future\n");
fprintf(out, " -p <db filename pattern>, --db-pattern <db filename pattern>\n");
fprintf(out, " set the db filename pattern for recursive search\n");
fprintf(out, " -r <db root path>, --db-root <db root path>\n");
fprintf(out, " -p <db filename pattern>, --db-pattern <db filename pattern>\n");
fprintf(out, " set the db filename pattern for recursive search\n");
fprintf(out, " -r <db root path>, --db-root <db root path>\n");
@@
-254,8
+283,11
@@
void print_usage(FILE *out) {
fprintf(out, " index mails\n");
fprintf(out, " -o <output filename>, --output <output filename>\n");
fprintf(out, " set the result file, use stdout if unset\n");
fprintf(out, " index mails\n");
fprintf(out, " -o <output filename>, --output <output filename>\n");
fprintf(out, " set the result file, use stdout if unset\n");
+ fprintf(out, " -n <max number of mails>, --nb-mails-max <max number of mails>\n");
+ fprintf(out, " set the maximum number of mails to extract\n");
fprintf(out, " -a <search field>, --default-search <search field>\n");
fprintf(out, " set the default search field\n");
fprintf(out, " -a <search field>, --default-search <search field>\n");
fprintf(out, " set the default search field\n");
+
}
/*********************************************************************/
}
/*********************************************************************/
@@
-289,6
+321,10
@@
int db_line_match_search(struct search_condition *condition,
(condition->db_key == ID_FROM && db_key == ID_LEADING_LINE)
(condition->db_key == ID_FROM && db_key == ID_LEADING_LINE)
+ ||
+
+ (condition->db_key == ID_THREAD_ID && (db_key == ID_MAIL_ID ||
+ db_key == ID_REFERENCE_ID))
)
&&
)
&&
@@
-345,6
+381,7
@@
void extract_mail(const char *mail_filename, unsigned long int position_in_mail,
/* printf("Extract\n"); */
mail_file = safe_fopen(mail_filename, "r", "mbox for mail extraction");
/* printf("Extract\n"); */
mail_file = safe_fopen(mail_filename, "r", "mbox for mail extraction");
+ /* fchmod(fileno(mail_file), 0x660); */
fseek(mail_file, position_in_mail, SEEK_SET);
if(fgets(raw_mbox_line, BUFFER_SIZE, mail_file)) {
fseek(mail_file, position_in_mail, SEEK_SET);
if(fgets(raw_mbox_line, BUFFER_SIZE, mail_file)) {
@@
-419,7
+456,8
@@
void update_time(int db_key, const char *db_value, time_t *t) {
if(db_key == ID_LEADING_LINE) {
c = db_value;
if(db_key == ID_LEADING_LINE) {
c = db_value;
- while(*c && *c != ' ') c++; while(*c && *c == ' ') c++;
+ while(*c && *c != ' ') c++;
+ while(*c && *c == ' ') c++;
/* printf("From %s", db_value); */
strptime(c, "%a %b %e %k:%M:%S %Y", &tm);
*t = mktime(&tm);
/* printf("From %s", db_value); */
strptime(c, "%a %b %e %k:%M:%S %Y", &tm);
*t = mktime(&tm);
@@
-437,6
+475,7
@@
void update_time(int db_key, const char *db_value, time_t *t) {
}
int search_in_db(const char *db_filename,
}
int search_in_db(const char *db_filename,
+ int nb_extracted_mails,
int nb_search_conditions,
struct search_condition *search_conditions,
FILE *output_file) {
int nb_search_conditions,
struct search_condition *search_conditions,
FILE *output_file) {
@@
-451,13
+490,10
@@
int search_in_db(const char *db_filename,
int db_key;
int hits[MAX_NB_SEARCH_CONDITIONS];
int nb_body_conditions, need_time;
int db_key;
int hits[MAX_NB_SEARCH_CONDITIONS];
int nb_body_conditions, need_time;
- int nb_extracted_mails;
time_t mail_time;
int m, n;
time_t mail_time;
int m, n;
- nb_extracted_mails = 0;
-
if(!global_quiet) {
printf("Searching in '%s' ... ", db_filename);
fflush(stdout);
if(!global_quiet) {
printf("Searching in '%s' ... ", db_filename);
fflush(stdout);
@@
-488,7
+524,7
@@
int search_in_db(const char *db_filename,
for(n = 0; n < nb_search_conditions; n++) { hits[n] = 0; }
nb_body_conditions = 0;
for(n = 0; n < nb_search_conditions; n++) { hits[n] = 0; }
nb_body_conditions = 0;
- need_time =
0
;
+ need_time =
global_discard_mail_from_the_future
;
mail_time = 0;
for(n = 0; n < nb_search_conditions; n++) {
mail_time = 0;
for(n = 0; n < nb_search_conditions; n++) {
@@
-502,23
+538,30
@@
int search_in_db(const char *db_filename,
strcpy(current_mail_filename, "");
strcpy(current_mail_filename, "");
- while(fgets(raw_db_line, BUFFER_SIZE, db_file)) {
+ while(nb_extracted_mails < global_nb_mails_max &&
+ fgets(raw_db_line, BUFFER_SIZE, db_file)) {
+
+ /* Removes the CR */
+ char *s = raw_db_line;
+ while(*s && *s != '\n') { s++; }
+ *s = '\0';
+
db_value = parse_token(db_key_string, TOKEN_BUFFER_SIZE, ' ', raw_db_line);
if(strcmp("mail", db_key_string) == 0) {
db_value = parse_token(db_key_string, TOKEN_BUFFER_SIZE, ' ', raw_db_line);
if(strcmp("mail", db_key_string) == 0) {
- if(current_mail_filename[0]
) {
- if(check_full_mail_match(current_mail_filename,
-
mail_ti
me,
-
nb_search_conditions, search_conditions
,
- nb_body_conditions, hits, current_position_in_mail)) {
- extract_mail(current_mail_filename, current_position_in_mail, output_file);
-
nb_extracted_mails++
;
- }
+ if(current_mail_filename[0]
&&
+ (!global_discard_mail_from_the_future || mail_time < global_current_time + 3600 * 24) &&
+
check_full_mail_match(current_mail_filena
me,
+
mail_time
,
+ nb_search_conditions, search_conditions,
+ nb_body_conditions, hits, current_position_in_mail)) {
+
extract_mail(current_mail_filename, current_position_in_mail, output_file)
;
+ nb_extracted_mails++;
}
for(n = 0; n < nb_search_conditions; n++) { hits[n] = 0; }
db_value = parse_token(position_in_file_string, TOKEN_BUFFER_SIZE, ' ', db_value);
}
for(n = 0; n < nb_search_conditions; n++) { hits[n] = 0; }
db_value = parse_token(position_in_file_string, TOKEN_BUFFER_SIZE, ' ', db_value);
-
db_value = parse_token(current_mail_filename, PATH_MAX+1, '\n', db_value
);
+
strncpy(current_mail_filename, db_value, PATH_MAX + 1
);
current_position_in_mail = atol(position_in_file_string);
}
current_position_in_mail = atol(position_in_file_string);
}
@@
-541,14
+584,18
@@
int search_in_db(const char *db_filename,
}
}
}
}
- if(current_mail_filename[0]) {
- if(check_full_mail_match(current_mail_filename,
- mail_time,
- nb_search_conditions, search_conditions,
- nb_body_conditions, hits, current_position_in_mail)) {
- extract_mail(current_mail_filename, current_position_in_mail, output_file);
- nb_extracted_mails++;
- }
+ /* printf("global_discard_mail_from_the_future = %d\n",
+ global_discard_mail_from_the_future); */
+
+ if(nb_extracted_mails < global_nb_mails_max &&
+ current_mail_filename[0] &&
+ (!global_discard_mail_from_the_future || mail_time < global_current_time + 3600 * 24) &&
+ check_full_mail_match(current_mail_filename,
+ mail_time,
+ nb_search_conditions, search_conditions,
+ nb_body_conditions, hits, current_position_in_mail)) {
+ extract_mail(current_mail_filename, current_position_in_mail, output_file);
+ nb_extracted_mails++;
}
fclose(db_file);
}
fclose(db_file);
@@
-562,6
+609,7
@@
int search_in_db(const char *db_filename,
}
int recursive_search_in_db(const char *entry_name, regex_t *db_filename_regexp,
}
int recursive_search_in_db(const char *entry_name, regex_t *db_filename_regexp,
+ int nb_extracted_mails,
int nb_search_conditions,
struct search_condition *search_conditions,
FILE *output_file) {
int nb_search_conditions,
struct search_condition *search_conditions,
FILE *output_file) {
@@
-569,7
+617,6
@@
int recursive_search_in_db(const char *entry_name, regex_t *db_filename_regexp,
struct dirent *dir_e;
struct stat sb;
char subname[PATH_MAX + 1];
struct dirent *dir_e;
struct stat sb;
char subname[PATH_MAX + 1];
- int nb_extracted_mails = 0;
if(lstat(entry_name, &sb) != 0) {
fprintf(stderr,
if(lstat(entry_name, &sb) != 0) {
fprintf(stderr,
@@
-584,12
+631,14
@@
int recursive_search_in_db(const char *entry_name, regex_t *db_filename_regexp,
dir = opendir(entry_name);
if(dir) {
dir = opendir(entry_name);
if(dir) {
- while((dir_e = readdir(dir))) {
+ while((dir_e = readdir(dir)) &&
+ nb_extracted_mails < global_nb_mails_max) {
if(!ignore_entry(dir_e->d_name)) {
snprintf(subname, PATH_MAX, "%s/%s", entry_name, dir_e->d_name);
if(!ignore_entry(dir_e->d_name)) {
snprintf(subname, PATH_MAX, "%s/%s", entry_name, dir_e->d_name);
- nb_extracted_mails += recursive_search_in_db(subname, db_filename_regexp,
- nb_search_conditions, search_conditions,
- output_file);
+ nb_extracted_mails = recursive_search_in_db(subname, db_filename_regexp,
+ nb_extracted_mails,
+ nb_search_conditions, search_conditions,
+ output_file);
}
}
closedir(dir);
}
}
closedir(dir);
@@
-600,8
+649,10
@@
int recursive_search_in_db(const char *entry_name, regex_t *db_filename_regexp,
while(*s) { if(*s == '/') { filename = s+1; } s++; }
if(regexec(db_filename_regexp, filename, 0, 0, 0) == 0) {
while(*s) { if(*s == '/') { filename = s+1; } s++; }
if(regexec(db_filename_regexp, filename, 0, 0, 0) == 0) {
- nb_extracted_mails +=
- search_in_db(entry_name, nb_search_conditions, search_conditions, output_file);
+ nb_extracted_mails =
+ search_in_db(entry_name,
+ nb_extracted_mails,
+ nb_search_conditions, search_conditions, output_file);
}
}
}
}
@@
-760,6
+811,7
@@
static struct option long_options[] = {
{ "version", no_argument, 0, 'v' },
{ "quiet", no_argument, 0, 'q' },
{ "use-leading-time", no_argument, 0, 't' },
{ "version", no_argument, 0, 'v' },
{ "quiet", no_argument, 0, 'q' },
{ "use-leading-time", no_argument, 0, 't' },
+ { "do-not-discard-mails-from-the-future", no_argument, 0, 'f' },
{ "db-file-output", 1, 0, 'd' },
{ "db-pattern", 1, 0, 'p' },
{ "db-root", 1, 0, 'r' },
{ "db-file-output", 1, 0, 'd' },
{ "db-pattern", 1, 0, 'p' },
{ "db-root", 1, 0, 'r' },
@@
-769,6
+821,7
@@
static struct option long_options[] = {
{ "index", 0, 0, 'i' },
{ "output", 1, 0, 'o' },
{ "default-search", 1, 0, 'a' },
{ "index", 0, 0, 'i' },
{ "output", 1, 0, 'o' },
{ "default-search", 1, 0, 'a' },
+ { "nb-mails-max", 1, 0, 'n' },
{ 0, 0, 0, 0 }
};
{ 0, 0, 0, 0 }
};
@@
-783,11
+836,16
@@
struct time_criterion {
static struct time_criterion time_criteria[] = {
static struct time_criterion time_criteria[] = {
+ { "1h", 0, 1, -1, -1 },
+ { "2h", 0, 2, -1, -1 },
+ { "4h", 0, 4, -1, -1 },
{ "8h", 0, 8, -1, -1 },
{ "24h", 0, 24, -1, -1 },
{ "48h", 0, 48, -1, -1 },
{ "week", 0, 24 * 7, -1, -1 },
{ "8h", 0, 8, -1, -1 },
{ "24h", 0, 24, -1, -1 },
{ "48h", 0, 48, -1, -1 },
{ "week", 0, 24 * 7, -1, -1 },
+ { "2weeks", 0, 24 * 14, -1, -1 },
{ "month", 0, 24 * 31, -1, -1 },
{ "month", 0, 24 * 31, -1, -1 },
+ { "semester", 0, 24 * 185, -1, -1 },
{ "trimester", 0, 24 * 92, -1, -1 },
{ "year", 0, 24 * 365, -1, -1 },
{ "trimester", 0, 24 * 92, -1, -1 },
{ "year", 0, 24 * 365, -1, -1 },
@@
-807,17
+865,15
@@
static struct time_criterion time_criteria[] = {
/*********************************************************************/
time_t time_for_past_day(int day) {
/*********************************************************************/
time_t time_for_past_day(int day) {
- time_t t;
struct tm *tm;
int delta_day;
struct tm *tm;
int delta_day;
- t = time(0);
- tm = localtime(&t);
+ tm = localtime(&global_current_time);
if(day > 0) {
delta_day = (7 + tm->tm_wday - day) % 7;
} else {
delta_day = - day;
}
if(day > 0) {
delta_day = (7 + tm->tm_wday - day) % 7;
} else {
delta_day = - day;
}
- return
t
- (delta_day * 3600 * 24 + tm->tm_sec + 60 * tm->tm_min + 3600 * tm->tm_hour);
+ return
global_current_time
- (delta_day * 3600 * 24 + tm->tm_sec + 60 * tm->tm_min + 3600 * tm->tm_hour);
}
void init_condition(struct search_condition *condition, const char *full_string,
}
void init_condition(struct search_condition *condition, const char *full_string,
@@
-855,9
+911,9
@@
void init_condition(struct search_condition *condition, const char *full_string,
condition->time_start = time_for_past_day(time_criteria[k].past_week_day);
condition->time_stop = condition->time_start + 3600 * 24;
} else {
condition->time_start = time_for_past_day(time_criteria[k].past_week_day);
condition->time_stop = condition->time_start + 3600 * 24;
} else {
- condition->time_start =
time(0)
- 3600 * time_criteria[k].start_hour;
+ condition->time_start =
global_current_time
- 3600 * time_criteria[k].start_hour;
if(time_criteria[k].end_hour >= 0) {
if(time_criteria[k].end_hour >= 0) {
- condition->time_stop =
time(0)
- 3600 * time_criteria[k].end_hour;
+ condition->time_stop =
global_current_time
- 3600 * time_criteria[k].end_hour;
} else {
condition->time_stop = 0;
}
} else {
condition->time_stop = 0;
}
@@
-1006,6
+1062,9
@@
int main(int argc, char **argv) {
struct search_condition search_conditions[MAX_NB_SEARCH_CONDITIONS];
struct alias_node *a, *b;
struct search_condition search_conditions[MAX_NB_SEARCH_CONDITIONS];
struct alias_node *a, *b;
+ /* Group and others have no access */
+ umask(S_IRWXG | S_IRWXO);
+
if(regcomp(&global_leading_from_line_regexp, LEADING_FROM_LINE_REGEXP_STRING, 0)) {
fprintf(stderr,
"mymail: Cannot compile leading \"from\" line regexp. That is strange.\n");
if(regcomp(&global_leading_from_line_regexp, LEADING_FROM_LINE_REGEXP_STRING, 0)) {
fprintf(stderr,
"mymail: Cannot compile leading \"from\" line regexp. That is strange.\n");
@@
-1023,6
+1082,10
@@
int main(int argc, char **argv) {
global_alias_list = 0;
global_quiet = 0;
global_use_leading_time = 0;
global_alias_list = 0;
global_quiet = 0;
global_use_leading_time = 0;
+ global_nb_mails_max = 250;
+ global_discard_mail_from_the_future = 1;
+ global_current_time = time(0);
+
default_search_field = 0;
strncpy(output_filename, "", PATH_MAX);
default_search_field = 0;
strncpy(output_filename, "", PATH_MAX);
@@
-1031,20
+1094,20
@@
int main(int argc, char **argv) {
}
/*
}
/*
- {
-#warning Test code added on 2013 May 02 11:17:01
+
{
+
#warning Test code added on 2013 May 02 11:17:01
struct alias_node *a;
for(a = global_alias_list; a; a = a->next) {
struct alias_node *a;
for(a = global_alias_list; a; a = a->next) {
- printf ("ALIAS [%s] [%s]\n", a->alias, a->value);
+ printf ("ALIAS [%s] [%s]\n", a->alias, a->value);
+ }
}
}
- }
*/
setlocale(LC_ALL, "");
nb_search_conditions = 0;
*/
setlocale(LC_ALL, "");
nb_search_conditions = 0;
- while ((c = getopt_long(argc, argv, "hvqip:s:d:r:l:o:a:m:",
+ while ((c = getopt_long(argc, argv, "hvq
tf
ip:s:d:r:l:o:a:m:",
long_options, NULL)) != -1) {
switch(c) {
long_options, NULL)) != -1) {
switch(c) {
@@
-1065,6
+1128,10
@@
int main(int argc, char **argv) {
global_use_leading_time = 1;
break;
global_use_leading_time = 1;
break;
+ case 'f':
+ global_discard_mail_from_the_future = 0;
+ break;
+
case 'i':
action_index = 1;
break;
case 'i':
action_index = 1;
break;
@@
-1126,12
+1193,26
@@
int main(int argc, char **argv) {
default_search_field = optarg;
break;
default_search_field = optarg;
break;
+ case 'n':
+ global_nb_mails_max = atoi(optarg);
+ break;
+
default:
error = 1;
break;
}
}
default:
error = 1;
break;
}
}
+ if(error) {
+ print_usage(stderr);
+ exit(EXIT_FAILURE);
+ }
+
+ if(show_help) {
+ print_usage(stdout);
+ exit(EXIT_SUCCESS);
+ }
+
/* Set all the values that may defined in the arguments, through
environment variables, or hard-coded */
/* Set all the values that may defined in the arguments, through
environment variables, or hard-coded */
@@
-1155,18
+1236,6
@@
int main(int argc, char **argv) {
"MYMAIL_MBOX_PATTERN",
0);
"MYMAIL_MBOX_PATTERN",
0);
- /* Start the processing */
-
- if(error) {
- print_usage(stderr);
- exit(EXIT_FAILURE);
- }
-
- if(show_help) {
- print_usage(stdout);
- exit(EXIT_SUCCESS);
- }
-
/* mbox indexing */
if(action_index) {
/* mbox indexing */
if(action_index) {
@@
-1256,9
+1325,10
@@
int main(int argc, char **argv) {
exit(EXIT_FAILURE);
}
exit(EXIT_FAILURE);
}
- nb_extracted_mails += recursive_search_in_db(db_root_path, &db_filename_regexp,
- nb_search_conditions, search_conditions,
- output_file);
+ nb_extracted_mails = recursive_search_in_db(db_root_path, &db_filename_regexp,
+ nb_extracted_mails,
+ nb_search_conditions, search_conditions,
+ output_file);
regfree(&db_filename_regexp);
}
regfree(&db_filename_regexp);
}
@@
-1275,8
+1345,10
@@
int main(int argc, char **argv) {
s = parse_token(db_filename, PATH_MAX + 1, ';', s);
if(db_filename[0]) {
s = parse_token(db_filename, PATH_MAX + 1, ';', s);
if(db_filename[0]) {
- nb_extracted_mails +=
- search_in_db(db_filename, nb_search_conditions, search_conditions, output_file);
+ nb_extracted_mails =
+ search_in_db(db_filename,
+ nb_extracted_mails,
+ nb_search_conditions, search_conditions, output_file);
}
}
}
}
}
}
@@
-1284,8
+1356,10
@@
int main(int argc, char **argv) {
/* Search in all db files listed in the command arguments */
while(optind < argc) {
/* Search in all db files listed in the command arguments */
while(optind < argc) {
- nb_extracted_mails +=
- search_in_db(argv[optind], nb_search_conditions, search_conditions, output_file);
+ nb_extracted_mails =
+ search_in_db(argv[optind],
+ nb_extracted_mails,
+ nb_search_conditions, search_conditions, output_file);
optind++;
}
}
optind++;
}
}