+ int i;
+ char *findstr = NULL;
+ char *tmp = NULL;
+ int ret = -1; /* not found */
+ struct db_enumerator e = init_db_enumerator(ENUM_ALL);
+
+ if(list_is_empty() || !is_valid_item(start))
+ return -2; /* error */
+
+ findstr = xstrdup(str);
+ findstr = strlower(findstr);
+
+ e.item = start - 1; /* must be "real start" - 1 */
+ db_enumerate_items(e) {
+ for(i = 0; search_fields[i] >= 0; i++) {
+ if(database[e.item][search_fields[i]] == NULL)
+ continue;
+ tmp = xstrdup(database[e.item][search_fields[i]]);
+ if( tmp && strstr(strlower(tmp), findstr) ) {
+ ret = e.item;
+ goto out;
+ }
+ xfree(tmp);
+ }