int fields_count = 0;
list_item *database = NULL;
-int items = 0;
+static int items = 0;
#define ITEM_SIZE (fields_count * sizeof(char *))
+#define LAST_ITEM (items - 1)
#define INITIAL_LIST_CAPACITY 30
static int list_capacity = 0;
if(!database)
return;
- for(i = 0; i < fields_count; i++)
- if(database[i])
+ for(i = 0; i < items; i++)
+ if(database[i]) {
database[i] = xrealloc(database[i], ITEM_SIZE);
+ database[i][fields_count - 1] = NULL;
+ }
}
/*
int ret, idx = field_id(NAME);
char *n1, *n2, *s1, *s2;
- if(idx == 0)
- return 0; /* no 'name' field */
-
n1 = (*(list_item *)i1)[idx];
n2 = (*(list_item *)i2)[idx];
return item <= LAST_ITEM && item >= 0;
}
+int
+last_item()
+{
+ return LAST_ITEM;
+}
+
+int
+db_n_items()
+{
+ return items;
+}
int
real_db_enumerate_items(struct db_enumerator e)
return database[i];
}
+/* Fetch addresses from all fields of FIELD_EMAILS type */
+/* Memory has to be freed by the caller */
+char *
+db_email_get(int item)
+{
+ int i;
+ char *res;
+ abook_field_list *cur;
+ abook_list *emails = NULL;
+
+ for(cur = fields_list, i = 0; cur; cur = cur->next, i++)
+ if(cur->field->type == FIELD_EMAILS && *database[item][i])
+ abook_list_append(&emails, database[item][i]);
+
+ res = abook_list_to_csv(emails);
+ abook_list_free(&emails);
+ return res ? res : xstrdup("");
+}
+