[Commits] [SCM] claws branch, master, updated. 3.14.0-101-g8d93e8c

ticho at claws-mail.org ticho at claws-mail.org
Sat Oct 1 16:25:36 CEST 2016


The branch, master has been updated
       via  8d93e8c8cd8169ef0071301d1dd8888199bc6e87 (commit)
      from  437668c7f0207b6ea6f9c1467e15411a0903c8ca (commit)

Summary of changes:
 src/common/utils.c                       |   33 ----------------------
 src/common/utils.h                       |    1 -
 src/compose.c                            |   42 ++++------------------------
 src/messageview.c                        |   23 ++++-----------
 src/plugins/vcalendar/vcal_manager.c     |   16 ++---------
 src/plugins/vcalendar/vcal_meeting_gtk.c |   14 +---------
 src/plugins/vcalendar/vcalendar.c        |   15 ++--------
 src/prefs_account.c                      |   45 ++++++++++++++++++++++++++++++
 src/prefs_account.h                      |    1 +
 9 files changed, 64 insertions(+), 126 deletions(-)


- Log -----------------------------------------------------------------
commit 8d93e8c8cd8169ef0071301d1dd8888199bc6e87
Author: Andrej Kacian <ticho at claws-mail.org>
Date:   Sat Oct 1 16:22:44 2016 +0200

    Make Message-ID string generation less confusing.
    
    Instead of having to prepare one part, then second
    part in advance and pass them to generate_msgid()
    which does its own voodoo with them, we now just pass
    a pointer to PrefsAccount to
    prefs_account_generate_msgid(), and it does all of it
    on its own, returning pointer to a newly allocated
    string.

diff --git a/src/common/utils.c b/src/common/utils.c
index ad67d3c..d7d1b4c 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -3731,39 +3731,6 @@ gint g_int_compare(gconstpointer a, gconstpointer b)
 	return GPOINTER_TO_INT(a) - GPOINTER_TO_INT(b);
 }
 
-gchar *generate_msgid(gchar *buf, gint len, gchar *user_addr)
-{
-	struct tm *lt;
-	time_t t;
-	gchar *addr;
-	struct tm buft;
-
-	t = time(NULL);
-	lt = localtime_r(&t, &buft);
-
-	if (user_addr != NULL)
-	      addr = g_strdup_printf(".%s", user_addr);
-	else if (strlen(buf) != 0)
-	      addr = g_strdup_printf("@%s", buf);
-	else
-	      addr = g_strdup_printf("@%s", get_domain_name());
-
-	/* Replace all @ but the last one in addr, with underscores.
-	 * RFC 2822 States that msg-id syntax only allows one @.
-	 */
-	while (strchr(addr, '@') != NULL && strchr(addr, '@') != strrchr(addr, '@'))
-		*(strchr(addr, '@')) = '_';
-
-	g_snprintf(buf, len, "%04d%02d%02d%02d%02d%02d.%08x%s",
-		   lt->tm_year + 1900, lt->tm_mon + 1,
-		   lt->tm_mday, lt->tm_hour,
-		   lt->tm_min, lt->tm_sec,
-		   (guint) rand(), addr);
-
-	g_free(addr);
-	return buf;
-}
-
 /*
    quote_cmd_argument()
 
diff --git a/src/common/utils.h b/src/common/utils.h
index 90f255a..c904874 100644
--- a/src/common/utils.h
+++ b/src/common/utils.h
@@ -543,7 +543,6 @@ const gchar * line_has_quote_char	(const gchar *str,
 
 gint g_int_compare	(gconstpointer a, gconstpointer b);
 
-gchar *generate_msgid		(gchar *buf, gint len, gchar *user_addr);
 gchar *generate_mime_boundary	(const gchar *prefix);
 
 gint quote_cmd_argument(gchar * result, guint size,
diff --git a/src/compose.c b/src/compose.c
index b05006b..c9cd93c 100644
--- a/src/compose.c
+++ b/src/compose.c
@@ -5411,27 +5411,12 @@ static gint compose_redirect_write_headers(Compose *compose, FILE *fp)
 	}
 
 	/* Resent-Message-ID */
-	if (compose->account->set_domain && compose->account->domain) {
-		g_snprintf(buf, sizeof(buf), "%s", compose->account->domain); 
-	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-		g_snprintf(buf, sizeof(buf), "%s", 
-			strchr(compose->account->address, '@') ?
-				strchr(compose->account->address, '@')+1 :
-				compose->account->address);
-	} else {
-		g_snprintf(buf, sizeof(buf), "%s", "");
-	}
-
 	if (compose->account->gen_msgid) {
-		gchar *addr = NULL;
-		if (compose->account->msgid_with_addr) {
-			addr = compose->account->address;
-		}
-		generate_msgid(buf, sizeof(buf), addr);
-		err |= (fprintf(fp, "Resent-Message-ID: <%s>\n", buf) < 0);
+		gchar *addr = prefs_account_generate_msgid(compose->account);
+		err |= (fprintf(fp, "Resent-Message-ID: <%s>\n", addr) < 0);
 		if (compose->msgid)
 			g_free(compose->msgid);
-		compose->msgid = g_strdup(buf);
+		compose->msgid = addr;
 	} else {
 		compose->msgid = NULL;
 	}
@@ -6561,27 +6546,12 @@ static gchar *compose_get_header(Compose *compose)
 	g_free(str);
 
 	/* Message-ID */
-	if (compose->account->set_domain && compose->account->domain) {
-		g_snprintf(buf, sizeof(buf), "%s", compose->account->domain); 
-	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-		g_snprintf(buf, sizeof(buf), "%s", 
-			strchr(compose->account->address, '@') ?
-				strchr(compose->account->address, '@')+1 :
-				compose->account->address);
-	} else {
-		g_snprintf(buf, sizeof(buf), "%s", "");
-	}
-	
 	if (compose->account->gen_msgid) {
-		gchar *addr = NULL;
-		if (compose->account->msgid_with_addr) {
-			addr = compose->account->address;
-		}
-		generate_msgid(buf, sizeof(buf), addr);
-		g_string_append_printf(header, "Message-ID: <%s>\n", buf);
+		gchar *addr = prefs_account_generate_msgid(compose->account);
+		g_string_append_printf(header, "Message-ID: <%s>\n", addr);
 		if (compose->msgid)
 			g_free(compose->msgid);
-		compose->msgid = g_strdup(buf);
+		compose->msgid = addr;
 	} else {
 		compose->msgid = NULL;
 	}
diff --git a/src/messageview.c b/src/messageview.c
index e0c0d30..d237316 100644
--- a/src/messageview.c
+++ b/src/messageview.c
@@ -976,26 +976,13 @@ static gint disposition_notification_send(MsgInfo *msginfo)
 		goto FILE_ERROR;
 
 	/* Message ID */
-	if (account->set_domain && account->domain) {
-		g_snprintf(buf, sizeof(buf), "%s", account->domain); 
-	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-		g_snprintf(buf, sizeof(buf), "%s", 
-			strchr(account->address, '@') ?
-				strchr(account->address, '@')+1 :
-				account->address);
-	} else {
-		g_snprintf(buf, sizeof(buf), "%s", "");
-	}
-	
 	if (account->gen_msgid) {
-		gchar *addr = NULL;
-		if (account->msgid_with_addr) {
-			addr = account->address;
-		}
-		generate_msgid(buf, sizeof(buf), addr);
-
-		if (fprintf(fp, "Message-ID: <%s>\n", buf) < 0)
+		gchar *addr = prefs_account_generate_msgid(account);
+		if (fprintf(fp, "Message-ID: <%s>\n", addr) < 0) {
+			g_free(addr);
 			goto FILE_ERROR;
+		}
+		g_free(addr);
 	}
 
 	boundary = generate_mime_boundary("DN");
diff --git a/src/plugins/vcalendar/vcal_manager.c b/src/plugins/vcalendar/vcal_manager.c
index 8519c1b..f800eeb 100644
--- a/src/plugins/vcalendar/vcal_manager.c
+++ b/src/plugins/vcalendar/vcal_manager.c
@@ -1191,7 +1191,7 @@ static gchar *write_headers(PrefsAccount 	*account,
 	enum icalparameter_partstat status;
 	gchar *prefix = NULL;
 	gchar enc_subject[512], enc_from[512], *from = NULL;
-	gchar msgid[128];	
+	gchar *msgid;
 	gchar *calmsgid = NULL;
 
 	cm_return_val_if_fail(account != NULL, NULL);
@@ -1282,18 +1282,7 @@ static gchar *write_headers(PrefsAccount 	*account,
 		calmsgid = g_strdup("");
 	}
 
-	if (account && account->set_domain && account->domain) {
-		g_snprintf(msgid, sizeof(msgid), "%s", account->domain); 
-	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-		g_snprintf(msgid, sizeof(msgid), "%s", 
-			strchr(account->address, '@') ?
-				strchr(account->address, '@')+1 :
-				account->address);
-	} else {
-		g_snprintf(msgid, sizeof(msgid), "%s", "");
-	}
-
-	generate_msgid(msgid, sizeof(msgid), account->address);
+	msgid = prefs_account_generate_msgid(account);
 
 	result = g_strdup_printf("%s"
 				"From: %s <%s>\n"
@@ -1323,6 +1312,7 @@ static gchar *write_headers(PrefsAccount 	*account,
 	g_free(save_folder);
 	g_free(queue_headers);
 	g_free(attendees);
+	g_free(msgid);
 	return result;			
                                                                                
 
diff --git a/src/plugins/vcalendar/vcal_meeting_gtk.c b/src/plugins/vcalendar/vcal_meeting_gtk.c
index da07bea..941482b 100644
--- a/src/plugins/vcalendar/vcal_meeting_gtk.c
+++ b/src/plugins/vcalendar/vcal_meeting_gtk.c
@@ -1257,22 +1257,10 @@ static gboolean send_meeting_cb(GtkButton *widget, gpointer data)
 
 	organizer_name	= get_organizer_name(meet);
 
-	if (account->set_domain && account->domain) {
-		g_snprintf(buf, sizeof(buf), "%s", account->domain); 
-	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-		g_snprintf(buf, sizeof(buf), "%s", 
-			strchr(account->address, '@') ?
-				strchr(account->address, '@')+1 :
-				account->address);
-	} else {
-		g_snprintf(buf, sizeof(buf), "%s", "");
-	}
-	generate_msgid(buf, 255, account->address);
-
 	if (meet->uid) {
 		uid 	= g_strdup(meet->uid);
 	} else {
-		uid 	= g_strdup(buf);
+		uid 	= prefs_account_generate_msgid(account);
 	}
 
 	dtstart		= get_date(meet, TRUE);
diff --git a/src/plugins/vcalendar/vcalendar.c b/src/plugins/vcalendar/vcalendar.c
index a47f862..576da83 100644
--- a/src/plugins/vcalendar/vcalendar.c
+++ b/src/plugins/vcalendar/vcalendar.c
@@ -150,7 +150,7 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
 		}
 		
 		if (fp) {
-			gchar uid[256];
+			gchar *uid;
 			time_t t = time(NULL);
 			time_t t2 = t+3600;
 			gchar *org = NULL;
@@ -179,22 +179,13 @@ static void create_meeting_from_message_cb_ui(GtkAction *action, gpointer data)
 
 			org = g_strdup(account->address);
 
-			if (account->set_domain && account->domain) {
-				g_snprintf(uid, sizeof(uid), "%s", account->domain); 
-			} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
-				g_snprintf(uid, sizeof(uid), "%s", 
-					strchr(account->address, '@') ?
-					strchr(account->address, '@')+1 :
-					account->address);
-			} else {
-				g_snprintf(uid, sizeof(uid), "%s", "");
-			}
-			generate_msgid(uid, 255, account->address);
+			uid = prefs_account_generate_msgid(account);
 			
 			event = vcal_manager_new_event(uid,
 					org, NULL, NULL/*location*/, summary, description, 
 					dtstart, dtend, recur, tzid, url, method, sequence, 
 					ICAL_VTODO_COMPONENT);
+			g_free(uid);
 			
 			/* hack to get default hours */
 			g_free(event->dtstart);
diff --git a/src/prefs_account.c b/src/prefs_account.c
index 250a173..5bd2afd 100644
--- a/src/prefs_account.c
+++ b/src/prefs_account.c
@@ -4907,6 +4907,51 @@ static void prefs_account_compose_default_dictionary_set_optmenu_from_string
 }
 #endif
 
+gchar *prefs_account_generate_msgid(PrefsAccount *account)
+{
+	gchar *addr, *tmbuf, *buf = NULL;
+	GDateTime *now;
+	gchar *user_addr = account->msgid_with_addr ? account->address : NULL;
+
+	if (account->set_domain && account->domain) {
+		buf = g_strdup(account->domain);
+	} else if (!strncmp(get_domain_name(), "localhost", strlen("localhost"))) {
+		buf = g_strdup(
+				strchr(account->address, '@') ?
+				strchr(account->address, '@')+1 :
+				account->address);
+	}
+
+	if (user_addr != NULL) {
+		addr = g_strdup_printf(".%s", user_addr);
+	} else {
+		addr = g_strdup_printf("@%s",
+				buf != NULL && strlen(buf) > 0 ?
+				buf : get_domain_name());
+	}
+
+	if (buf != NULL)
+		g_free(buf);
+	if (user_addr != NULL)
+		g_free(user_addr);
+
+	/* Replace all @ but the last one in addr, with underscores.
+	 * RFC 2822 States that msg-id syntax only allows one @.
+	 */
+	while (strchr(addr, '@') != NULL && strchr(addr, '@') != strrchr(addr, '@'))
+		*(strchr(addr, '@')) = '_';
+
+	now = g_date_time_new_now_local();
+	tmbuf = g_date_time_format(now, "%Y%m%d%H%M%S");
+	buf = g_strdup_printf("%s.%08x%s",
+			tmbuf, (guint)rand(), addr);
+	g_free(tmbuf);
+	g_free(addr);
+
+	debug_print("Generated Message-ID string '%s'\n", buf);
+	return buf;
+}
+
 void prefs_account_register_page(PrefsPage *page)
 {
 	prefs_pages = g_slist_append(prefs_pages, page);
diff --git a/src/prefs_account.h b/src/prefs_account.h
index 4e4217d..f7feb13 100644
--- a/src/prefs_account.h
+++ b/src/prefs_account.h
@@ -223,6 +223,7 @@ PrefsAccount *prefs_account_open	(PrefsAccount	*ac_prefs, gboolean *dirty);
 
 const gchar *prefs_account_get_privacy_prefs(PrefsAccount *account, gchar *id);
 void prefs_account_set_privacy_prefs(PrefsAccount *account, gchar *id, gchar *new_value);
+gchar *prefs_account_generate_msgid(PrefsAccount *account);
 
 void prefs_account_register_page	(PrefsPage 	*page);
 void prefs_account_unregister_page	(PrefsPage 	*page);

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list