more sync with 0.7.5cvs7
[claws.git] / src / compose.c
index 4d239cd382ada011333aa373133ed58609bd3da9..91a3e6973f3e467280bf368158fd9cc4b209262b 100644 (file)
@@ -3509,6 +3509,36 @@ static void compose_write_attach(Compose *compose, FILE *fp)
        fprintf(fp, "\n--%s--\n", compose->boundary);
 }
 
+#define QUOTE_IF_REQUIRED(out, str)                    \
+{                                                      \
+       if (*str != '"' && strchr(str, ',')) {          \
+               gchar *__tmp;                           \
+               gint len;                               \
+                                                       \
+               len = strlen(str) + 3;                  \
+               Xalloca(__tmp, len, return -1);         \
+               g_snprintf(__tmp, len, "\"%s\"", str);  \
+               out = __tmp;                            \
+       } else {                                        \
+               Xstrdup_a(out, str, return -1);         \
+       }                                               \
+}
+
+#define PUT_RECIPIENT_HEADER(header, str)                                   \
+{                                                                           \
+       if (*str != '\0') {                                                  \
+               Xstrdup_a(str, str, return -1);                              \
+               g_strstrip(str);                                             \
+               if (*str != '\0') {                                          \
+                       compose->to_list = address_list_append               \
+                               (compose->to_list, str);                     \
+                       compose_convert_header                               \
+                               (buf, sizeof(buf), str, strlen(header) + 2); \
+                       fprintf(fp, "%s: %s\n", header, buf);                \
+               }                                                            \
+       }                                                                    \
+}
+
 #define IS_IN_CUSTOM_HEADER(header) \
        (compose->account->add_customhdr && \
         custom_header_find(compose->account->customhdr_list, header) != NULL)
@@ -3571,6 +3601,7 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
 {
        gchar buf[BUFFSIZE];
        gchar *str;
+       gchar *name;
        /* struct utsname utsbuf; */
 
        g_return_val_if_fail(fp != NULL, -1);
@@ -3590,8 +3621,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
                        compose_convert_header
                                (buf, sizeof(buf), compose->account->name,
                                 strlen("From: "));
+                       QUOTE_IF_REQUIRED(name, buf);
                        fprintf(fp, "From: %s <%s>\n",
-                               buf, compose->account->address);
+                               name, compose->account->address);
                } else
                        fprintf(fp, "From: %s\n", compose->account->address);
        }
@@ -3601,20 +3633,7 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
 #if 0 /* NEW COMPOSE GUI */
        if (compose->use_to) {
                str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry));
-               if (*str != '\0') {
-                       Xstrdup_a(str, str, return -1);
-                       g_strstrip(str);
-                       if (*str != '\0') {
-                               compose->to_list = address_list_append
-                                       (compose->to_list, str);
-                               if (!IS_IN_CUSTOM_HEADER("To")) {
-                                       compose_convert_header
-                                               (buf, sizeof(buf), str,
-                                                strlen("To: "));
-                                       fprintf(fp, "To: %s\n", buf);
-                               }
-                       }
-               }
+               PUT_RECIPIENT_HEADER("To", str);
        }
 #endif
 
@@ -3630,11 +3649,9 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
                        compose->newsgroup_list =
                                newsgroup_list_append(compose->newsgroup_list,
                                                      str);
-                       if (!IS_IN_CUSTOM_HEADER("Newsgroups")) {
-                               compose_convert_header(buf, sizeof(buf), str,
-                                                      strlen("Newsgroups: "));
-                               fprintf(fp, "Newsgroups: %s\n", buf);
-                       }
+                       compose_convert_header(buf, sizeof(buf), str,
+                                              strlen("Newsgroups: "));
+                       fprintf(fp, "Newsgroups: %s\n", buf);
                }
        }
 #endif
@@ -3643,20 +3660,7 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
 #if 0 /* NEW COMPOSE GUI */
        if (compose->use_cc) {
                str = gtk_entry_get_text(GTK_ENTRY(compose->cc_entry));
-               if (*str != '\0') {
-                       Xstrdup_a(str, str, return -1);
-                       g_strstrip(str);
-                       if (*str != '\0') {
-                               compose->to_list = address_list_append
-                                       (compose->to_list, str);
-                               if (!IS_IN_CUSTOM_HEADER("Cc")) {
-                                       compose_convert_header
-                                               (buf, sizeof(buf), str,
-                                                strlen("Cc: "));
-                                       fprintf(fp, "Cc: %s\n", buf);
-                               }
-                       }
-               }
+               PUT_RECIPIENT_HEADER("Cc", str);
        }
 #endif
        /* Bcc */
@@ -3664,17 +3668,7 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
 #if 0 /* NEW COMPOSE GUI */
        if (compose->use_bcc) {
                str = gtk_entry_get_text(GTK_ENTRY(compose->bcc_entry));
-               if (*str != '\0') {
-                       Xstrdup_a(str, str, return -1);
-                       g_strstrip(str);
-                       if (*str != '\0') {
-                               compose->to_list = address_list_append
-                                       (compose->to_list, str);
-                               compose_convert_header(buf, sizeof(buf), str,
-                                                      strlen("Bcc: "));
-                               fprintf(fp, "Bcc: %s\n", buf);
-                       }
-               }
+               PUT_RECIPIENT_HEADER("Bcc", str);
        }
 #endif