In [1], [2], it was observed that certain versions of gcc miscompiled
the code using reply_map.

In [3] Dick Marius (with help from Tomi Ollila) suggested setting the
map to "static const". As others have reported on IRC, this _seems_ to
work around the gcc bug in question, although I personally have not
understood the details of why that is the case.

Looking at the code I decided to rewrite it a different way, which at
least to my eyes is more understandable. If nothing else, it is
significantly shorter.

[1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1135526
[2]: GCC PR125252
[3]: id:[email protected]
---
 notmuch-reply.c | 43 +++++++++----------------------------------
 1 file changed, 9 insertions(+), 34 deletions(-)

diff --git a/notmuch-reply.c b/notmuch-reply.c
index 44297251..8830b0e9 100644
--- a/notmuch-reply.c
+++ b/notmuch-reply.c
@@ -293,24 +293,6 @@ get_sender (GMimeMessage *message)
     return g_mime_message_get_from (message);
 }
 
-static InternetAddressList *
-get_to (GMimeMessage *message)
-{
-    return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
-}
-
-static InternetAddressList *
-get_cc (GMimeMessage *message)
-{
-    return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_CC);
-}
-
-static InternetAddressList *
-get_bcc (GMimeMessage *message)
-{
-    return g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_BCC);
-}
-
 /* Augment the recipients of 'reply' from the "Reply-to:", "From:",
  * "To:", "Cc:", and "Bcc:" headers of 'message'.
  *
@@ -329,27 +311,18 @@ add_recipients_from_message (GMimeMessage *reply,
                             GMimeMessage *message,
                             bool reply_all)
 {
-    struct {
-       InternetAddressList * (*get_header)(GMimeMessage *message);
-       GMimeAddressType recipient_type;
-    } reply_to_map[] = {
-       { get_sender,   GMIME_ADDRESS_TYPE_TO },
-       { get_to,       GMIME_ADDRESS_TYPE_TO },
-       { get_cc,       GMIME_ADDRESS_TYPE_CC },
-       { get_bcc,      GMIME_ADDRESS_TYPE_BCC },
-    };
+    const GMimeAddressType addr_type[] = { GMIME_ADDRESS_TYPE_TO, 
GMIME_ADDRESS_TYPE_TO,
+                                          GMIME_ADDRESS_TYPE_CC, 
GMIME_ADDRESS_TYPE_BCC };
+
     const char *from_addr = NULL;
     unsigned int i;
+    InternetAddressList *recipients;
     unsigned int n = 0;
 
-    for (i = 0; i < ARRAY_SIZE (reply_to_map); i++) {
-       InternetAddressList *recipients;
-
-       recipients = reply_to_map[i].get_header (message);
-
-       n += scan_address_list (recipients, notmuch, reply,
-                               reply_to_map[i].recipient_type, &from_addr);
+    recipients = get_sender (message);
+    n += scan_address_list (recipients, notmuch, reply, GMIME_ADDRESS_TYPE_TO, 
&from_addr);
 
+    for (i = 1; i < ARRAY_SIZE (addr_type); i++) {
        if (! reply_all && n) {
            /* Stop adding new recipients in reply-to-sender mode if
             * we have added some recipient(s) above.
@@ -365,6 +338,8 @@ add_recipients_from_message (GMimeMessage *reply,
            if (from_addr)
                break;
        }
+       recipients = g_mime_message_get_addresses (message, addr_type[i]);
+       n += scan_address_list (recipients, notmuch, reply, addr_type[i], 
&from_addr);
     }
 
     /* If no recipients were added but we found one of the user's
-- 
2.53.0

_______________________________________________
notmuch mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to