]> git.deb.at Git - pkg/abook.git/blobdiff - filter.c
fixed a bug in mutt import filter
[pkg/abook.git] / filter.c
index 7dcfa329c42392141090b77c9d3928d578affe4f..9f57ee95af5078317ef4e5254b4abdd608124037 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -140,7 +140,7 @@ get_real_name()
 
        pwent = getpwnam(username);
 
-       if( (tmp = (char *)malloc(strlen(pwent->pw_gecos) +1)) == NULL)
+       if((tmp = strdup(pwent->pw_gecos)) == NULL)
                return strdup(username);
 
        rtn = sscanf(pwent->pw_gecos, "%[^,]", tmp);
@@ -490,7 +490,7 @@ ldif_read_line(FILE *in)
                }
 
                if(*line != ' ') {
-                       fseek(in, pos, SEEK_SET);
+                       fseek(in, pos, SEEK_SET); /* fixme ! */
                        free(line);
                        break;
                }
@@ -640,15 +640,15 @@ mutt_read_line(FILE *in, char **alias, char **rest)
        while( ! ISSPACE(*ptr) )
                ptr++;
 
-       if( (*alias = (char *)malloc(ptr-tmp+1)) == NULL) {
+       if( (*alias = (char *)malloc(ptr - tmp)) == NULL) {
                free(line);
                return 1;
        }
 
-       strncpy(*alias, tmp, ptr-tmp);
-       *(*alias + (ptr - tmp)) = 0;
+       strncpy(*alias, tmp, ptr - tmp - 1);
+       *(*alias + (ptr - tmp - 1)) = 0;
 
-       while( ISSPACE(*ptr) )
+       while(ISSPACE(*ptr))
                ptr++;
 
        *rest = strdup(ptr);    
@@ -657,14 +657,38 @@ mutt_read_line(FILE *in, char **alias, char **rest)
        return 0;
 }
 
+static void
+mutt_fix_quoting(char *p)
+{
+       char *escape = 0;
+
+       for(; *p; p++) {
+               switch(*p) {
+                       case '\"':
+                               if(escape)
+                                       *escape = ' ';
+                               break;
+                       case '\\':
+                               escape = p;
+                               break;
+                       default:
+                               escape = 0;
+               }
+       }
+}
+
 static void
 mutt_parse_email(list_item item)
 {
        char *line = item[NAME];
-       char *start = line, *tmp;
+       char *tmp;
        char *name, *email;
+#if 0
+       char *start = line;
        int i = 0;
+#endif
 
+       mutt_fix_quoting(line);
        tmp = strconcat("From: ", line, NULL);
        getname(tmp, &name, &email);
        free(tmp);
@@ -678,6 +702,10 @@ mutt_parse_email(list_item item)
        else
                return;
 
+       /*
+        * this is completely broken
+        */
+#if 0
        while( (start = strchr(start, ',')) && i++ < MAX_EMAILS - 1) {
                tmp = strconcat("From: ", ++start, NULL);
                getname(tmp, &name, &email);
@@ -693,6 +721,7 @@ mutt_parse_email(list_item item)
                        }
                }
        }
+#endif
 }
 
 static int
@@ -913,7 +942,8 @@ pine_parse_buf(char *buf)
                                && pine_conv_table[i] >= 0) {
                        strncpy(tmp, start, len);
                        tmp[len] = 0;
-                       item[pine_conv_table[i]] = strdup(tmp);
+                       if(*tmp)
+                               item[pine_conv_table[i]] = strdup(tmp);
                }
                start = end + 1;
        }
@@ -1512,7 +1542,7 @@ text_export_database(FILE * out, struct db_enumerator e)
                fprintf(out,
                        "-----------------------------------------\n\n");
                fprintf(out, "%s", database[e.item][NAME]);
-               if (database[e.item][NICK])
+               if (database[e.item][NICK] && *database[e.item][NICK])
                        fprintf(out, "\n(%s)", database[e.item][NICK]);
                fprintf(out, "\n");