From: Francois Fleuret Date: Sun, 27 Jan 2013 14:31:13 +0000 (+0100) Subject: Started the indexing part. X-Git-Url: https://fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=mymail.git;a=commitdiff_plain;h=2784e69f483494bdaa06056a4384a85b410a4f6a Started the indexing part. --- diff --git a/mymail.c b/mymail.c index ba446d2..da9bed1 100644 --- a/mymail.c +++ b/mymail.c @@ -42,6 +42,11 @@ #define BUFFER_SIZE 16384 +struct parsable_field { + char *regexp; + char *db_filename; +}; + /********************************************************************/ /* malloc with error checking. */ @@ -66,7 +71,9 @@ void usage(FILE *out) { fprintf(out, "\n"); } -void read_file(const char *input_filename) { +void read_file(const char *input_filename, + int nb_fields_to_parse, struct parsable_field *fields_to_parse, + FILE **db_files) { char raw_line[BUFFER_SIZE]; FILE *file; int in_header; @@ -108,14 +115,19 @@ int ignore_entry(const char *name) { (name[0] == '.' && name[1] != '/'); } -void process_dir(const char *dir_name) { +void process_entry(const char *dir_name, + int nb_fields_to_parse, struct parsable_field *fields_to_parse, + FILE **db_files) { DIR *dir; struct dirent *dir_e; struct stat sb; char subname[PATH_MAX + 1]; if(lstat(dir_name, &sb) != 0) { - fprintf(stderr, "mymail: Can not stat \"%s\": %s\n", dir_name, strerror(errno)); + fprintf(stderr, + "mymail: Can not stat \"%s\": %s\n", + dir_name, + strerror(errno)); exit(EXIT_FAILURE); } else { } @@ -131,14 +143,14 @@ void process_dir(const char *dir_name) { while((dir_e = readdir(dir))) { if(!ignore_entry(dir_e->d_name)) { snprintf(subname, PATH_MAX, "%s/%s", dir_name, dir_e->d_name); - process_dir(subname); + process_entry(subname, nb_fields_to_parse, fields_to_parse, db_files); } } closedir(dir); } else { if(S_ISREG(sb.st_mode)) { printf("Processing regular file '%s'.\n", dir_name); - read_file(dir_name); + read_file(dir_name, nb_fields_to_parse, fields_to_parse, db_files); } } } @@ -157,13 +169,20 @@ static struct option long_options[] = { { 0, 0, 0, 0 } }; +static struct parsable_field fields_to_parse[] = { + { "^[Tt][Oo]:", "/tmp/mymail-to" } +}; + int main(int argc, char **argv) { int error = 0, show_help = 0; + const int nb_fields_to_parse = sizeof(fields_to_parse) / sizeof(struct parsable_field); char c; + int f; + FILE **db_files; setlocale(LC_ALL, ""); - while ((c = getopt_long(argc, argv, "o:s:x:vwmqf:ibzdeajyunt:r:l:c:-h", + while ((c = getopt_long(argc, argv, "h", long_options, NULL)) != -1) { switch(c) { @@ -188,10 +207,30 @@ int main(int argc, char **argv) { exit(EXIT_SUCCESS); } + db_files = safe_malloc(nb_fields_to_parse * sizeof(FILE *)); + + for(f = 0; f < nb_fields_to_parse; f++) { + db_files[f] = fopen(fields_to_parse[f].db_filename, "w"); + if(!db_files[f]) { + fprintf(stderr, + "mymail: Can not open \"%s\" for writing: %s\n", + fields_to_parse[f].db_filename, + strerror(errno)); + } + } + while(optind < argc) { - process_dir(argv[optind]); + process_entry(argv[optind], + nb_fields_to_parse, fields_to_parse, + db_files); optind++; } + for(f = 0; f < nb_fields_to_parse; f++) { + fclose(db_files[f]); + } + + free(db_files); + exit(EXIT_SUCCESS); }