int paranoid;
int quiet;
-char *default_search_field;
int ignore_dot_files;
/********************************************************************/
return (a && !b) || (!a && b);
}
-char *parse_token(char *token_buffer, size_t token_buffer_size,
- char separator, char *string) {
+const char *parse_token(char *token_buffer, size_t token_buffer_size,
+ char separator, const char *string) {
char *u = token_buffer;
while(u < token_buffer + token_buffer_size - 1 && *string &&
*string != separator) {
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 {
int is_a_leading_from_line(char *mbox_line) {
return
-
- /*
-
- The mbox man page in qmail documentation states:
-
- > The reader should not attempt to take advantage of the fact
- > that every From_ line (past the beginning of the file) is
- > preceded by a blank line.
-
- */
-
strncmp(mbox_line, "From ", 5) == 0 &&
regexec(&leading_from_line_regexp, mbox_line, 0, 0, 0) == 0;
}
int mbox_line_match_search(struct search_condition *condition,
- int mbox_id, char *mbox_value) {
+ int mbox_id, const char *mbox_value) {
if(condition->field_id == ID_INTERVAL) {
if(mbox_id == ID_LEADING_LINE) {
- char *c;
+ const char *c;
time_t t;
struct tm tm;
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], *mbox_value;
+ char mbox_name[TOKEN_BUFFER_SIZE];
+ const char *mbox_value;
int mbox_id;
int already_written, m, n;
int nb_body_conditions, nb_fulfilled_body_conditions;
exit(EXIT_FAILURE);
}
+ /* printf("recursive_search_in_db %s\n", entry_name); */
+
dir = opendir(entry_name);
if(dir) {
/*********************************************************************/
-void init_condition(struct search_condition *condition, char *full_string) {
+void init_condition(struct search_condition *condition, const char *full_string,
+ const char *default_search_field) {
char full_search_field[TOKEN_BUFFER_SIZE], *search_field;
int m;
- char *string;
+ const char *string;
string = parse_token(full_search_field, TOKEN_BUFFER_SIZE, ' ', full_string);
search_field = full_search_field;
/*********************************************************************/
int main(int argc, char **argv) {
- char *db_filename;
- char *db_filename_regexp_string;
- char *db_root_path;
- char *db_filename_list;
- char *mbox_filename_regexp_string;
+ char *db_filename = 0;
+ char *db_filename_regexp_string = 0;
+ char *db_root_path = 0;
+ char *db_filename_list = 0;
+ char *mbox_filename_regexp_string = 0;
+ char *default_search_field;
char output_filename[PATH_MAX + 1];
- int action_index;
+ int action_index = 0;
int error = 0, show_help = 0;
const int nb_fields_to_parse = sizeof(fields_to_parse) / sizeof(struct parsable_field);
char c;
}
paranoid = 0;
- action_index = 0;
- db_filename = 0;
- db_filename_regexp_string = 0;
- db_root_path = 0;
- db_filename_list = 0;
- mbox_filename_regexp_string = 0;
quiet = 0;
default_search_field = 0;
ignore_dot_files = 1;
+ strncpy(output_filename, "", PATH_MAX);
setlocale(LC_ALL, "");
nb_search_conditions = 0;
- while ((c = getopt_long(argc, argv, "hvqip:s:d:r:l:o:a:",
+ while ((c = getopt_long(argc, argv, "hvqip:s:d:r:l:o:a:m:",
long_options, NULL)) != -1) {
switch(c) {
fprintf(stderr, "mymail: Too many search patterns.\n");
exit(EXIT_FAILURE);
}
- init_condition(&search_conditions[nb_search_conditions], optarg);
+ init_condition(&search_conditions[nb_search_conditions], optarg, default_search_field);
nb_search_conditions++;
break;
db_filename_regexp_string = default_value(db_filename_regexp_string,
"MYMAIL_DB_FILE",
- "^mymail.db$");
+ "\.db$");
db_root_path = default_value(db_root_path,
"MYMAIL_DB_ROOT",
mbox_filename_regexp_string = default_value(mbox_filename_regexp_string,
"MYMAIL_MBOX_PATTERN",
- "mbox$");
+ 0);
/* Start the processing */
if(db_filename_list) {
char db_filename[PATH_MAX + 1];
- char *s;
+ const char *s;
s = db_filename_list;