]> git.deb.at Git - pkg/abook.git/blobdiff - database.c
Fixed snprintf related bugs
[pkg/abook.git] / database.c
index e324810eab04c0394a3476da1c3b5ab5d4dedb75..1577966471f4e7e2ab2636562c8cd81ad3f603ce 100644 (file)
@@ -386,26 +386,30 @@ sort_surname()
 }
 
 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:
@@ -421,6 +425,12 @@ is_selected(int item)
        return selected[item];
 }
 
+int
+is_valid_item(int item)
+{
+       return item <= LAST_ITEM && item >= 0;
+}
+
 int
 real_db_enumerate_items(struct db_enumerator e)
 {