/*
* $Id$
*
- * by JH <jheinonen@bigfoot.com>
+ * by JH <jheinonen@users.sourceforge.net>
*
* Copyright (C) Jaakko Heinonen
*/
{"Name", "name", TAB_CONTACT},/* NAME */
{"E-mails", "email", TAB_CONTACT},/* EMAIL */
{"Address", "address", TAB_ADDRESS},/* ADDRESS */
+ {"Address2", "address2", TAB_ADDRESS},/* ADDRESS2 */
{"City", "city", TAB_ADDRESS},/* CITY */
{"State/Province","state", TAB_ADDRESS},/* STATE */
{"ZIP/Postal Code","zip", TAB_ADDRESS},/* ZIP */
} else if((tmp = strchr(line, '=') ) && sec ) {
*tmp++ = '\0';
for(i=0; i<ITEM_FIELDS; i++)
- if( !strcmp(abook_fields[i].key, line) )
+ if( !strcmp(abook_fields[i].key, line) ) {
item[i] = strdup(tmp);
+ goto next;
+ }
}
+next:
free(line);
}
int j;
int i = 0;
- fprintf(out, "# abook addressbook file\n\n");
- fprintf(out, "[format]\n");
- fprintf(out, "program=" PACKAGE "\n");
- fprintf(out, "version=" VERSION "\n");
- fprintf(out, "\n\n");
+ fprintf(out,
+ "# abook addressbook file\n\n"
+ "[format]\n"
+ "program=" PACKAGE "\n"
+ "version=" VERSION "\n"
+ "\n\n"
+ );
db_enumerate_items(e) {
fprintf(out, "[%d]\n", i);
- for(j=0; j<ITEM_FIELDS; j++) {
+ for(j = 0; j < ITEM_FIELDS; j++) {
if( database[e.item][j] != NULL &&
*database[e.item][j] )
fprintf(out, "%s=%s\n",
#define _MAX_FIELD_LEN(X) (X == EMAIL ? MAX_EMAILSTR_LEN:MAX_FIELD_LEN)
-inline static void
+static void
validate_item(list_item item)
{
int i;
}
int
-find_item(char *str, int start)
+find_item(char *str, int start, int search_fields[])
{
int i;
char *findstr = NULL;
char *tmp = NULL;
int ret = -1; /* not found */
+ struct db_enumerator e = init_db_enumerator(ENUM_ALL);
- if(items < 1 || start < 0 || start >= LAST_ITEM)
+ if(list_is_empty() || !is_valid_item(start))
return -2; /* error */
findstr = strdup(str);
findstr = strupper(findstr);
- for( i = start; i < items; i++ ) {
- tmp = strdup(database[i][NAME]);
- if( strstr(strupper(tmp), findstr) != NULL ) {
- ret = i;
- goto out;
+ e.item = start - 1; /* must be "real start" - 1 */
+ db_enumerate_items(e) {
+ for( i = 0; search_fields[i] >= 0; i++ ) {
+ tmp = safe_strdup(database[e.item][search_fields[i]]);
+ if( tmp && strstr(strupper(tmp), findstr) ) {
+ ret = e.item;
+ goto out;
+ }
+ my_free(tmp);
}
- my_free(tmp);
}
out:
return selected[item];
}
+int
+is_valid_item(int item)
+{
+ return item <= LAST_ITEM && item >= 0;
+}
+
int
real_db_enumerate_items(struct db_enumerator e)
{