]> git.deb.at Git - pkg/abook.git/blobdiff - database.c
- replace abook_malloc, abook_realloc and my_free with new xmalloc routines
[pkg/abook.git] / database.c
index c17adae62b7da64a6d4e19d83040b05729b83ae2..5da2e93eced4b440c54ac3accaa2713d9a92d264 100644 (file)
@@ -19,6 +19,7 @@
 #include "misc.h"
 #include "options.h"
 #include "filter.h"
+#include "xmalloc.h"
 #ifdef HAVE_CONFIG_H
 #      include "config.h"
 #endif
@@ -71,9 +72,26 @@ struct abook_field abook_fields[ITEM_FIELDS] = {
        {"Nickname/Alias", "nick",      TAB_OTHER},/* NICK */
        {"URL",         "url",          TAB_OTHER},/* URL */
        {"Notes",       "notes",        TAB_OTHER},/* NOTES */
+       {"Custom1",     "custom1",      TAB_CUSTOM},/* CUSTOM1 */
+       {"Custom2",     "custom2",      TAB_CUSTOM},/* CUSTOM2 */
+       {"Custom3",     "custom3",      TAB_CUSTOM},/* CUSTOM3 */
+       {"Custom4",     "custom4",      TAB_CUSTOM},/* CUSTOM4 */
+       {"Custom5",     "custom5",      TAB_CUSTOM},/* CUSTOM5 */
 };
 
 
+int
+find_field(const char *field)
+{
+       int i;
+
+       for(i = 0; i < ITEM_FIELDS; i++)
+               if( !strcmp(abook_fields[i].key, field) )
+                       return i;
+
+       return -1;
+}
+
 int
 parse_database(FILE *in)
 {
@@ -206,7 +224,7 @@ free_list_item(list_item item)
        int i;
 
        for(i=0; i<ITEM_FIELDS; i++)
-               my_free(item[i]);
+               xfree(item[i]);
 }
 
 void
@@ -261,9 +279,8 @@ adjust_list_capacity()
        else
                return;
 
-       database = (list_item *)abook_realloc(database,
-                       sizeof(list_item) * list_capacity);
-       selected = (char *)abook_realloc(selected, list_capacity);
+       database = xrealloc(database, sizeof(list_item) * list_capacity);
+       selected = xrealloc(selected, list_capacity);
 }
 
 int
@@ -437,7 +454,7 @@ find_item(char *str, int start, int search_fields[])
                                ret = e.item;
                                goto out;
                        }
-                       my_free(tmp);
+                       xfree(tmp);
                }
        }
 
@@ -501,3 +518,47 @@ init_db_enumerator(int mode)
 
        return e;
 }
+
+static int
+assign_fieldname(const char *name, int i)
+{
+       char *s;
+
+       assert(name);
+       assert(i >= 0 && i < ITEM_FIELDS);
+
+       if(strcasecmp(abook_fields[i].name, name)) { /* name differs */
+               /*
+                * check if we are overwriting statically allocated default
+                */
+               if(strcasecmp(abook_fields[i].name, abook_fields[i].key))
+                       xfree(abook_fields[i].name);
+               
+               s = xmalloc_inc(MAX_FIELDNAME_LEN, 1);
+               snprintf(s, MAX_FIELDNAME_LEN, "%s", name);
+               abook_fields[i].name = s;
+       }
+
+       return 0;
+}
+
+int
+change_custom_field_name(const char *name, int n)
+{
+       int i;
+       char keyname[21];
+
+       assert(name);
+
+       snprintf(keyname, sizeof(keyname), "custom%d", n);
+
+       for(i = CUSTOM_MIN; i <= CUSTOM_MAX; i++) {
+               if(!strcasecmp(abook_fields[i].key, keyname)) {
+                       assign_fieldname(name, i);
+                       return i;
+               }
+       }
+
+       return -1;
+}
+