X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=filter.c;h=9549017727ec0d0c7f1aa26770425180af014347;hb=addc54efb596b39b0e4e6ce219ee0f1506337475;hp=9f62171f0f93e4ad122e63494fea928fcb4b7af1;hpb=c5d8ef5198f2bfd02f678b7a709b6538ef83cd44;p=pkg%2Fabook.git diff --git a/filter.c b/filter.c index 9f62171..9549017 100644 --- a/filter.c +++ b/filter.c @@ -1,6 +1,6 @@ /* - * $Id: filter.c,v 1.31 2004/06/30 19:48:28 jheinonen Exp $ + * $Id: filter.c,v 1.38 2005/08/13 14:10:57 jheinonen Exp $ * * by JH * @@ -22,6 +22,7 @@ #include "list.h" #include "misc.h" #include "options.h" +#include "xmalloc.h" #include extern int items; @@ -96,14 +97,14 @@ void print_filters() { int i; - + puts("input:"); for(i=0; *i_filters[i].filtname ; i++) printf("\t%s\t%s\n", i_filters[i].filtname, i_filters[i].desc); putchar('\n'); - + puts("output:"); for(i=0; *e_filters[i].filtname ; i++) printf("\t%s\t%s\n", e_filters[i].filtname, @@ -144,13 +145,13 @@ get_real_name() pwent = getpwnam(username); - if((tmp = strdup(pwent->pw_gecos)) == NULL) - return strdup(username); + if((tmp = xstrdup(pwent->pw_gecos)) == NULL) + return xstrdup(username); rtn = sscanf(pwent->pw_gecos, "%[^,]", tmp); if (rtn == EOF || rtn == 0) { free(tmp); - return strdup(username); + return xstrdup(username); } else return tmp; } @@ -158,21 +159,21 @@ get_real_name() /* * import */ - + static int i_read_file(char *filename, int (*func) (FILE *in)); static void import_screen() { int i; - + clear(); refresh_statusline(); headerline("import database"); mvaddstr(3, 1, "please select a filter"); - + for(i=0; *i_filters[i].filtname ; i++) mvprintw(5 + i, 6, "%c -\t%s\t%s\n", 'a' + i, @@ -190,27 +191,27 @@ import_database() int tmp = items; import_screen(); - + filter = getch() - 'a'; if(filter == 'x' - 'a' || filter >= number_of_input_filters() || filter < 0) { refresh_screen(); return 1; } - + mvaddstr(5+filter, 2, "->"); - + filename = ask_filename("Filename: "); - if( !filename ) { + if(!filename) { refresh_screen(); return 2; } - - if( i_read_file(filename, i_filters[filter].func ) ) + + if(i_read_file(filename, i_filters[filter].func )) statusline_msg("Error occured while opening the file"); - else if( tmp == items ) + else if(tmp == items) statusline_msg("Hmm.., file seems not to be a valid file"); - + refresh_screen(); free(filename); @@ -225,14 +226,14 @@ i_read_file(char *filename, int (*func) (FILE *in)) FILE *in; int ret = 0; - if( ( in = abook_fopen( filename, "r" ) ) == NULL ) + if( (in = abook_fopen( filename, "r" )) == NULL ) return 1; ret = (*func) (in); fclose(in); - return ret; + return ret; } int @@ -243,30 +244,30 @@ import_file(char filtname[FILTNAME_LEN], char *filename) int ret = 0; for(i=0;; i++) { - if( ! strncasecmp(i_filters[i].filtname, filtname, + if(! strncasecmp(i_filters[i].filtname, filtname, FILTNAME_LEN) ) break; - if( ! *i_filters[i].filtname ) { + if(! *i_filters[i].filtname) { i = -1; break; } } - if( i<0 ) + if(i < 0) return -1; - if( !strcmp(filename, "-") ) { + if(!strcmp(filename, "-")) { struct stat s; - if( (fstat(fileno(stdin), &s)) == -1 || S_ISDIR(s.st_mode)) + if((fstat(fileno(stdin), &s)) == -1 || S_ISDIR(s.st_mode)) ret = 1; else ret = (*i_filters[i].func) (stdin); } else ret = i_read_file(filename, i_filters[i].func); - - if( tmp == items ) + + if(tmp == items) ret = 1; - + return ret; } @@ -281,7 +282,7 @@ static void export_screen() { int i; - + clear(); @@ -289,9 +290,9 @@ export_screen() headerline("export database"); mvaddstr(3, 1, "please select a filter"); - - for(i=0; *e_filters[i].filtname ; i++) + + for(i = 0; *e_filters[i].filtname ; i++) mvprintw(5 + i, 6, "%c -\t%s\t%s\n", 'a' + i, e_filters[i].filtname, e_filters[i].desc); @@ -307,17 +308,17 @@ export_database() char *filename; export_screen(); - + filter = getch() - 'a'; if(filter == 'x' - 'a' || filter >= number_of_output_filters() || filter < 0) { refresh_screen(); return 1; } - + mvaddstr(5+filter, 2, "->"); - if( selected_items() ) { + if(selected_items()) { statusline_addstr("Export All/Selected/Cancel (A/s/c)"); switch( tolower(getch()) ) { case 's': @@ -329,16 +330,16 @@ export_database() } clear_statusline(); } - + filename = ask_filename("Filename: "); - if( !filename ) { + if(!filename) { refresh_screen(); return 2; } - - if( e_write_file(filename, e_filters[filter].func, enum_mode ) ) + + if( e_write_file(filename, e_filters[filter].func, enum_mode)) statusline_msg("Error occured while exporting"); - + refresh_screen(); free(filename); @@ -353,16 +354,16 @@ e_write_file(char *filename, int (*func) (FILE *in, struct db_enumerator e), int ret = 0; struct db_enumerator enumerator = init_db_enumerator(mode); - if( (out = fopen(filename, "a")) == NULL ) + if((out = fopen(filename, "a")) == NULL) return 1; - if( ftell(out) ) + if(ftell(out)) return 1; ret = (*func) (out, enumerator); - + fclose(out); - + return ret; } @@ -373,10 +374,10 @@ fexport(char filtname[FILTNAME_LEN], FILE *handle, int enum_mode) struct db_enumerator e = init_db_enumerator(enum_mode); for(i=0;; i++) { - if( ! strncasecmp(e_filters[i].filtname, filtname, - FILTNAME_LEN) ) + if(!strncasecmp(e_filters[i].filtname, filtname, + FILTNAME_LEN)) break; - if( ! *e_filters[i].filtname ) { + if(!*e_filters[i].filtname) { i = -1; break; } @@ -394,21 +395,21 @@ export_file(char filtname[FILTNAME_LEN], char *filename) int i; int ret = 0; struct db_enumerator e = init_db_enumerator(mode); - + for(i=0;; i++) { - if( ! strncasecmp(e_filters[i].filtname, filtname, - FILTNAME_LEN) ) + if(!strncasecmp(e_filters[i].filtname, filtname, + FILTNAME_LEN)) break; - if( ! *e_filters[i].filtname ) { + if(!*e_filters[i].filtname) { i = -1; break; } } - if( i<0 ) + if(i < 0) return -1; - if( !strcmp(filename, "-") ) + if(!strcmp(filename, "-")) ret = (e_filters[i].func) (stdout, e); else ret = e_write_file(filename, e_filters[i].func, mode); @@ -430,10 +431,10 @@ static void ldif_fix_string(char *str); #define LDIF_ITEM_FIELDS 16 -typedef char* ldif_item[LDIF_ITEM_FIELDS]; +typedef char *ldif_item[LDIF_ITEM_FIELDS]; static ldif_item ldif_field_names = { - "cn", + "cn", "mail", "streetaddress", "streetaddress2", @@ -455,7 +456,7 @@ static int ldif_conv_table[LDIF_ITEM_FIELDS] = { NAME, /* "cn" */ EMAIL, /* "mail" */ ADDRESS, /* "streetaddress" */ - ADDRESS2, /* "streetaddress2" */ + ADDRESS2, /* "streetaddress2" */ CITY, /* "locality" */ STATE, /* "st" */ ZIP, /* "postalcode" */ @@ -471,7 +472,7 @@ static int ldif_conv_table[LDIF_ITEM_FIELDS] = { }; -static char * +static char * ldif_read_line(FILE *in) { char *buf = NULL; @@ -484,10 +485,10 @@ ldif_read_line(FILE *in) pos = ftell(in); line = getaline(in); - - if( feof(in) || !line ) + + if(feof(in) || !line) break; - + if(i == 1) { buf = line; continue; @@ -518,27 +519,27 @@ ldif_read_line(FILE *in) } static void -ldif_add_item(ldif_item ldif_item) +ldif_add_item(ldif_item li) { list_item abook_item; int i; memset(abook_item, 0, sizeof(abook_item)); - if( !ldif_item[LDIF_ITEM_FIELDS -1] ) + if(!li[LDIF_ITEM_FIELDS -1]) goto bail_out; for(i=0; i < LDIF_ITEM_FIELDS; i++) { - if(ldif_conv_table[i] >= 0 && ldif_item[i] && *ldif_item[i] ) - abook_item[ldif_conv_table[i]] = strdup(ldif_item[i]); + if(ldif_conv_table[i] >= 0 && li[i] && *li[i]) + abook_item[ldif_conv_table[i]] = xstrdup(li[i]); } add_item2database(abook_item); bail_out: for(i=0; i < LDIF_ITEM_FIELDS; i++) - my_free(ldif_item[i]); + xfree(li[i]); } @@ -547,19 +548,19 @@ ldif_convert(ldif_item item, char *type, char *value) { int i; - if( !strcmp(type, "dn") ) { + if(!strcmp(type, "dn")) { ldif_add_item(item); return; } for(i=0; i < LDIF_ITEM_FIELDS; i++) { - if( !safe_strcmp(ldif_field_names[i], type) && *value ) { - if( i == LDIF_ITEM_FIELDS -1) /* this is a dirty hack */ - if( safe_strcmp("person", value)) + if(!safe_strcmp(ldif_field_names[i], type) && *value) { + if(i == LDIF_ITEM_FIELDS - 1) /* this is a dirty hack */ + if(safe_strcmp("person", value)) break; if(item[i]) - my_free(item[i]); - item[i] = strdup(value); + xfree(item[i]); + item[i] = xstrdup(value); } } } @@ -575,11 +576,11 @@ ldif_parse_file(FILE *handle) memset(item, 0, sizeof(item)); do { - if( ! (line = ldif_read_line(handle)) ) + if( !(line = ldif_read_line(handle)) ) continue; - if( -1 == ( str_parse_line(line, &type, &value, &vlen)) ) { - my_free(line); + if(-1 == (str_parse_line(line, &type, &value, &vlen))) { + xfree(line); continue; /* just skip the errors */ } @@ -587,7 +588,7 @@ ldif_parse_file(FILE *handle) ldif_convert(item, type, value); - my_free(line); + xfree(line); } while ( !feof(handle) ); ldif_convert(item, "dn", ""); @@ -630,7 +631,7 @@ mutt_read_line(FILE *in, char **alias, char **rest) while( ISSPACE(*ptr) ) ptr++; - if( strncmp("alias", ptr, 5) ) { + if(strncmp("alias", ptr, 5)) { free(line); return 1; } @@ -645,21 +646,17 @@ mutt_read_line(FILE *in, char **alias, char **rest) while( ! ISSPACE(*ptr) ) ptr++; - /* includes also the trailing zero */ - alias_len = (size_t)(ptr - tmp + 1); + alias_len = (size_t)(ptr - tmp); - if( (*alias = (char *)malloc(alias_len)) == NULL) { - free(line); - return 1; - } + *alias = xmalloc_inc(alias_len, 1); - strncpy(*alias, tmp, alias_len - 1); - *(*alias + alias_len - 1) = 0; + strncpy(*alias, tmp, alias_len); + *(*alias + alias_len) = 0; while(ISSPACE(*ptr)) ptr++; - *rest = strdup(ptr); + *rest = xstrdup(ptr); free(line); return 0; @@ -725,7 +722,7 @@ mutt_parse_email(list_item item) free(item[EMAIL]); item[EMAIL] = tmp; } else { - my_free(email); + xfree(email); } } } @@ -740,11 +737,11 @@ mutt_parse_file(FILE *in) for(;;) { memset(item, 0, sizeof(item)); - if( !mutt_read_line(in, &item[NICK], + if(!mutt_read_line(in, &item[NICK], &item[NAME]) ) mutt_parse_email(item); - if( feof(in) ) { + if(feof(in)) { free_list_item(item); break; } @@ -792,7 +789,7 @@ ldif_export_database(FILE *out, struct db_enumerator e) ldif_fput_type_and_value(out, "dn", tmp); free(tmp); - for(j=0; j < LDIF_ITEM_FIELDS; j++) { + for(j = 0; j < LDIF_ITEM_FIELDS; j++) { if(ldif_conv_table[j] >= 0) { if(ldif_conv_table[j] == EMAIL) ldif_fput_type_and_value(out, @@ -829,7 +826,7 @@ html_export_database(FILE *out, struct db_enumerator e) { char tmp[MAX_EMAILSTR_LEN]; - if( items < 1 ) + if(items < 1) return 2; extra_column = (extra_column > 2 && extra_column < ITEM_FIELDS) ? @@ -883,7 +880,7 @@ html_export_write_tail(FILE *out) fprintf(out, "\n\n"); fprintf(out, "\n\n\n"); } - + /* * end of html export filter */ @@ -910,7 +907,7 @@ pine_convert_emails(char *s) int i; char *tmp; - if( s == NULL || *s != '(' ) + if(s == NULL || *s != '(') return; for(i=0; s[i]; i++ ) @@ -919,10 +916,10 @@ pine_convert_emails(char *s) if( ( tmp = strchr(s,')')) ) *tmp=0; - for(i=1; ( tmp = strchr(s, ',') ) != NULL ; i++, s=tmp+1 ) - if( i > MAX_EMAILS - 1 ) { + for(i = 1; ( tmp = strchr(s, ',') ) != NULL ; i++, s = tmp + 1) + if(i > MAX_EMAILS - 1) { *tmp = 0; - break; + break; } } @@ -937,10 +934,10 @@ pine_parse_buf(char *buf) int i, len, last; int pine_conv_table[]= {NICK, NAME, EMAIL, -1, NOTES}; - memset(&item, 0, sizeof(item) ); - + memset(&item, 0, sizeof(item)); + for(i=0, last=0; !last ; i++) { - if( ! (end = strchr(start, '\t')) ) + if( !(end = strchr(start, '\t')) ) last=1; len = last ? strlen(start) : (int) (end-start); @@ -951,7 +948,7 @@ pine_parse_buf(char *buf) strncpy(tmp, start, len); tmp[len] = 0; if(*tmp) - item[pine_conv_table[i]] = strdup(tmp); + item[pine_conv_table[i]] = xstrdup(tmp); } start = end + 1; } @@ -971,32 +968,32 @@ pine_parse_file(FILE *in) char *ptr; int i; - fgets(line, LINESIZE, in); + fgets(line, LINESIZE, in); while(!feof(in)) { for(i = 2;;i++) { - buf = (char *) realloc(buf, i*LINESIZE); + buf = xrealloc(buf, i*LINESIZE); if(i == 2) strcpy(buf, line); fgets(line, LINESIZE, in); ptr=(char *)&line; - if(*ptr != ' ' || feof(in) ) + if(*ptr != ' ' || feof(in)) break; else - while( *ptr == ' ') + while(*ptr == ' ') ptr++; strcat(buf, ptr); } - if( *buf == '#' ) { - my_free(buf); + if(*buf == '#') { + xfree(buf); continue; } pine_fixbuf(buf); pine_parse_buf(buf); - my_free(buf); + xfree(buf); } return 0; @@ -1041,9 +1038,9 @@ pine_export_database(FILE *out, struct db_enumerator e) /* FIXME * these files should be parsed according to a certain - * lay out, or the default if layout is not given, at + * lay out, or the default if layout is not given, at * the moment only default is done... - */ + */ #define CSV_COMMENT_CHAR '#' @@ -1084,13 +1081,13 @@ csv_convert_emails(char *s) int i; char *tmp; - if( s == NULL ) + if(s == NULL) return; - for(i=1; ( tmp = strchr(s, ',') ) != NULL ; i++, s = tmp + 1 ) - if( i > MAX_EMAILS - 1 ) { + for(i = 1; ( tmp = strchr(s, ',') ) != NULL ; i++, s = tmp + 1 ) + if(i > MAX_EMAILS - 1) { *tmp = 0; - break; + break; } } @@ -1101,24 +1098,24 @@ csv_remove_quotes(char *s) char *copy, *trimmed; int len; - copy = trimmed = strdup(s); + copy = trimmed = xstrdup(s); strtrim(trimmed); len = strlen(trimmed); if(trimmed[len - 1] == '\"' && *trimmed == '\"') { if(len < 3) { - my_free(copy); + xfree(copy); return NULL; } trimmed[len - 1] = 0; trimmed++; - trimmed = strdup(trimmed); + trimmed = xstrdup(trimmed); free(copy); return trimmed; } - my_free(copy); - return strdup(s); + xfree(copy); + return xstrdup(s); } static void @@ -1136,7 +1133,7 @@ csv_store_field(list_item item, char *s, int field) && csv_conv_table[field] >= 0) { item[csv_conv_table[field]] = newstr; } else { - my_free(newstr); + xfree(newstr); } } @@ -1155,7 +1152,7 @@ allcsv_store_field(list_item item, char *s, int field) && allcsv_conv_table[field] >= 0) { item[allcsv_conv_table[field]] = newstr; } else { - my_free(newstr); + xfree(newstr); } } @@ -1272,7 +1269,7 @@ csv_parse_file(FILE *in) if(line && *line && *line != CSV_COMMENT_CHAR) csv_parse_line(line); - my_free(line); + xfree(line); } return 0; @@ -1289,7 +1286,7 @@ allcsv_parse_file(FILE *in) if(line && *line && *line != CSV_COMMENT_CHAR) allcsv_parse_line(line); - my_free(line); + xfree(line); } return 0; @@ -1353,7 +1350,7 @@ csv_export_database(FILE *out, struct db_enumerator e) }; csv_export_common(out, e, csv_export_fields, NULL); - + return 0; } @@ -1411,7 +1408,7 @@ allcsv_export_database(FILE *out, struct db_enumerator e) fprintf(out, "\"CUSTOM5\"\n"); csv_export_common(out, e, allcsv_export_fields, NULL); - + return 0; } @@ -1423,7 +1420,7 @@ allcsv_export_database(FILE *out, struct db_enumerator e) #define PALM_CSV_END CSV_SPECIAL(1) #define PALM_CSV_CAT CSV_SPECIAL(2) -static void +static void palm_split_and_write_name(FILE *out, char *name) { char *p; @@ -1442,7 +1439,7 @@ palm_split_and_write_name(FILE *out, char *name) } } -static void +static void palm_csv_handle_specials(FILE *out, int item, int field) { switch(field) { @@ -1472,7 +1469,7 @@ palm_export_database(FILE *out, struct db_enumerator e) FAX, /* FAX */ MOBILEPHONE, /* OTHER */ EMAIL, /* EMAIL */ - ADDRESS, /* ADDRESS */ + ADDRESS, /* ADDRESS */ CITY, /* CITY */ STATE, /* STATE */ ZIP, /* ZIP */ @@ -1515,25 +1512,25 @@ gcrd_export_database(FILE *out, struct db_enumerator e) for( j = strlen(database[e.item][NAME]) - 1; j >= 0; j-- ) { if(database[e.item][NAME][j] == ' ') break; - } + } fprintf(out, "N:%s;%.*s\n", safe_str(name), j, safe_str(database[e.item][NAME]) - ); + ); free(name); if ( database[e.item][ADDRESS] ) fprintf(out, "ADR:;;%s;%s;%s;%s;%s;%s\n", safe_str(database[e.item][ADDRESS]), - safe_str(database[e.item][ADDRESS2]), + safe_str(database[e.item][ADDRESS2]), safe_str(database[e.item][CITY]), safe_str(database[e.item][STATE]), safe_str(database[e.item][ZIP]), safe_str(database[e.item][COUNTRY]) ); - + if (database[e.item][PHONE]) fprintf(out, "TEL;HOME:%s\n", database[e.item][PHONE]); if (database[e.item][WORKPHONE]) @@ -1546,19 +1543,19 @@ gcrd_export_database(FILE *out, struct db_enumerator e) if ( database[e.item][EMAIL] ) { split_emailstr(e.item, emails); for(j=0; j < MAX_EMAILS ; j++) { - if ( *emails[j] ) + if ( *emails[j] ) fprintf(out, "EMAIL;INTERNET:%s\n", emails[j]); } } - - if ( database[e.item][NOTES] ) + + if ( database[e.item][NOTES] ) fprintf(out, "NOTE:%s\n", database[e.item][NOTES]); if (database[e.item][URL]) fprintf(out, "URL:%s\n", database[e.item][URL]); fprintf(out, "END:VCARD\n\n"); - + } return 0; @@ -1577,18 +1574,18 @@ static char * mutt_alias_genalias(int i) { char *tmp, *pos; - + if(database[i][NICK]) - return strdup(database[i][NICK]); + return xstrdup(database[i][NICK]); - tmp = strdup(database[i][NAME]); + tmp = xstrdup(database[i][NAME]); if( ( pos = strchr(tmp, ' ') ) ) *pos = 0; strlower(tmp); - return tmp; + return tmp; } static int @@ -1605,7 +1602,7 @@ mutt_alias_export(FILE *out, struct db_enumerator e) alias, database[e.item][NAME], email); - my_free(alias); + xfree(alias); } return 0; @@ -1630,10 +1627,10 @@ text_write_address_us(FILE *out, int i) { if (database[i][CITY]) fprintf(out, "\n%s", database[i][CITY]); - + if (database[i][STATE] || database[i][ZIP]) { fputc('\n', out); - + if(database[i][STATE]) { fprintf(out, "%s", database[i][STATE]); if(database[i][ZIP]) @@ -1677,7 +1674,7 @@ text_write_address_eu(FILE *out, int i) { if(database[i][CITY]) fprintf(out, "%s", database[i][CITY]); } - + if (database[i][STATE]) fprintf(out, "\n%s", database[i][STATE]); @@ -1772,7 +1769,7 @@ elm_alias_export(FILE *out, struct db_enumerator e) alias, database[e.item][NAME], email); - my_free(alias); + xfree(alias); } return 0;