]> git.deb.at Git - pkg/abook.git/blobdiff - abook.c
Fixed snprintf related bugs
[pkg/abook.git] / abook.c
diff --git a/abook.c b/abook.c
index 8366cfdd1a3c6058314e68800dbf377ad2335389..6147aeeadcd28fabb98d341222e614e397e0cf4a 100644 (file)
--- a/abook.c
+++ b/abook.c
@@ -204,7 +204,6 @@ show_usage()
 }
 
 extern list_item *database;
-extern int items;
 
 static void
 muttq_print_item(int item)
@@ -224,73 +223,28 @@ muttq_print_item(int item)
                                );
 }
 
-static int
-mutt_query_name(char *str)
-{
-       int i, j;
-       char *tmp;
-
-       for(i = 0, j = 0 ; i < items; i++) {
-               tmp = strdup(database[i][NAME]);
-               if( strstr( strupper(tmp), strupper(str) ) != NULL ) {
-                       if( !j )
-                               putchar('\n');
-                       muttq_print_item(i);
-                       j++;
-               }
-               free(tmp);
-       }
-
-       return j;
-}
-
-static int
-mutt_query_email(char *str)
-{
-       int i, j, k;
-       char *tmp, emails[MAX_EMAILS][MAX_EMAIL_LEN];
-
-       for(i = 0, j = 0; i < items; i++) {
-               split_emailstr(i, emails);
-               for(k = 0; k < MAX_EMAILS; k++) {
-                       if( *emails[k] ) {
-                               tmp = strdup( emails[k] );
-                               if( strstr( strupper(tmp), strupper(str) ) != NULL ) {
-                                       if( !j )
-                                               putchar('\n');
-                                       j++;
-                                       if( options_get_int("mutt_return_all_emails") ) {
-                                               muttq_print_item(i);
-                                               free(tmp);
-                                               break;
-                                       } else
-                                               printf("%s\t%s\n", emails[k],
-                                                       database[i][NAME]);
-                               }
-                               free(tmp);
-                       }
-               }
-       }
-
-       return j;
-}
-
 static void
 mutt_query(char *str)
 {
-       int i;
-       
        init_mutt_query();
 
        if( str == NULL || !strcasecmp(str, "all") ) {
+               struct db_enumerator e = init_db_enumerator(ENUM_ALL);
                printf("All items\n");
-               for(i = 0; i < items; i++)
-                       muttq_print_item(i);
+               db_enumerate_items(e)
+                       muttq_print_item(e.item);
        } else {
-               if( !mutt_query_name(str) && !mutt_query_email(str) ) {
+               int search_fields[] = {NAME, EMAIL, NICK, -1};
+               int i;
+               if( (i = find_item(str, 0, search_fields)) < 0 ) {
                        printf("Not found\n");
                        quit_mutt_query(1);
                }
+               putchar('\n');
+               while(i >= 0) {
+                       muttq_print_item(i);
+                       i = find_item(str, i+1, search_fields);
+               }
        }
 
        quit_mutt_query(0);
@@ -320,25 +274,25 @@ quit_mutt_query(int status)
 
 
 void
-launch_mutt()
+launch_mutt(int item)
 {
-       int i;
+       /*
+        * This is _broken_
+        */
+#if 0
+       struct db_enumerator e = init_db_enumerator(ENUM_ALL);
        char email[MAX_EMAIL_LEN];
        char *cmd;
        char *tmp = options_get_str("mutt_command");
 
-       if( list_is_empty() )
-               return;
-
        cmd = strconcat(tmp, " '", NULL );
 
-       for(i=0; i < items; i++) {
-               if( ! is_selected(i) && i != list_current_item() )
-                       continue;
-               get_first_email(email, i);
-               tmp = mkstr("%s \"%s\"", cmd, database[i][NAME]);
+       db_enumerate_items(e) {
+               if( e.item != item );
+               get_first_email(email, e.item);
+               tmp = mkstr("%s, \"%s\"", cmd, database[e.item][NAME]);
                my_free(cmd);
-               if( *database[i][EMAIL] ) {
+               if( *database[e.item][EMAIL] ) {
                        cmd = mkstr("%s <%s>", tmp, email);
                        free(tmp);
                        tmp = cmd;
@@ -347,7 +301,7 @@ launch_mutt()
                free(tmp);
        }
 
-       tmp = mkstr("%s%c", cmd, '\'');
+       tmp = strconcat(cmd, "\'", NULL);
        free(cmd);
        cmd = tmp;
 #ifdef DEBUG
@@ -356,21 +310,21 @@ launch_mutt()
        system(cmd);    
 
        free(cmd);
-       refresh_screen();
+#endif
 }
 
 void
-launch_lynx()
+launch_wwwbrowser(int item)
 {
        char *cmd = NULL;
 
-       if( list_is_empty() )
+       if( !is_valid_item(item) )
                return;
 
-       if( database[list_current_item()][URL] )
+       if( database[item][URL] )
                cmd = mkstr("%s '%s'",
                                options_get_str("www_command"),
-                               safe_str(database[list_current_item()][URL]));
+                               safe_str(database[item][URL]));
        else
                return;
 
@@ -378,7 +332,6 @@ launch_lynx()
                system(cmd);
 
        free(cmd);
-       refresh_screen();
 }
 
 void *