2007-05-09 [colin] 2.9.2cvs3
authorColin Leroy <colin@colino.net>
Wed, 9 May 2007 16:43:43 +0000 (16:43 +0000)
committerColin Leroy <colin@colino.net>
Wed, 9 May 2007 16:43:43 +0000 (16:43 +0000)
* src/crash.c
* src/exporthtml.c
* src/mbox.c
* src/prefs_summaries.c
* src/procheader.c
* src/common/log.c
* src/common/utils.c
* src/gtk/gtksourceprintjob.c
* src/gtk/sslcertwindow.c
Use the re-entrant variant of time functions
Probably fixes bug 1217, 'reentrancy problems
with time functions'

12 files changed:
ChangeLog
PATCHSETS
configure.ac
src/common/log.c
src/common/utils.c
src/crash.c
src/exporthtml.c
src/gtk/gtksourceprintjob.c
src/gtk/sslcertwindow.c
src/mbox.c
src/prefs_summaries.c
src/procheader.c

index b15beac9dd3ec43276fbfd09eb7a5595e7a33c84..e904461fe6a8c831e50055ff7e649283c7b1bd89 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2007-05-09 [colin]     2.9.2cvs3
+
+       * src/crash.c
+       * src/exporthtml.c
+       * src/mbox.c
+       * src/prefs_summaries.c
+       * src/procheader.c
+       * src/common/log.c
+       * src/common/utils.c
+       * src/gtk/gtksourceprintjob.c
+       * src/gtk/sslcertwindow.c
+               Use the re-entrant variant of time functions
+               Probably fixes bug 1217, 'reentrancy problems 
+               with time functions'
+
 2007-05-09 [colin]     2.9.2cvs2
 
        * src/imap.c
index a438f15219cfadc5523602ae68184a790924aba2..9199b9943ff3d89471f90a2fbb6923d594bc46f4 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.13.2.13 -r 1.13.2.14 src/plugins/demo/demo.c;  cvs diff -u -r 1.5.2.14 -r 1.5.2.15 src/plugins/dillo_viewer/dillo_prefs.c;  cvs diff -u -r 1.2.4.5 -r 1.2.4.6 src/plugins/dillo_viewer/dillo_prefs.h;  cvs diff -u -r 1.12.2.19 -r 1.12.2.20 src/plugins/dillo_viewer/dillo_viewer.c;  cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/plugins/pgpcore/pgp_viewer.c;  cvs diff -u -r 1.1.2.4 -r 1.1.2.5 src/plugins/pgpcore/pgp_viewer.h;  cvs diff -u -r 1.1.2.16 -r 1.1.2.17 src/plugins/pgpcore/plugin.c;  cvs diff -u -r 1.1.2.23 -r 1.1.2.24 src/plugins/pgpcore/prefs_gpg.c;  cvs diff -u -r 1.1.2.10 -r 1.1.2.11 src/plugins/pgpcore/prefs_gpg.h;  cvs diff -u -r 1.1.2.44 -r 1.1.2.45 src/plugins/pgpcore/sgpgme.c;  cvs diff -u -r 1.1.2.9 -r 1.1.2.10 src/plugins/pgpcore/sgpgme.h;  cvs diff -u -r 1.1.2.15 -r 1.1.2.16 src/plugins/pgpinline/plugin.c;  cvs diff -u -r 1.1.2.48 -r 1.1.2.49 src/plugins/pgpmime/pgpmime.c;  cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/plugins/pgpmime/pgpmime.h;  cvs diff -u -r 1.1.2.24 -r 1.1.2.25 src/plugins/pgpmime/plugin.c;  cvs diff -u -r 1.18.2.52 -r 1.18.2.53 src/plugins/spamassassin/spamassassin.c;  cvs diff -u -r 1.4.2.15 -r 1.4.2.16 src/plugins/spamassassin/spamassassin.h;  cvs diff -u -r 1.23.2.38 -r 1.23.2.39 src/plugins/spamassassin/spamassassin_gtk.c;  cvs diff -u -r 1.1 -r 1.2 src/plugins/trayicon/README;  cvs diff -u -r 1.30.2.19 -r 1.30.2.20 tools/README;  cvs diff -u -r 1.1.14.2 -r 1.1.14.3 tools/README.sylprint;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 tools/outlook2claws-mail.pl;  cvs diff -u -r 1.2.14.2 -r 1.2.14.3 tools/sylprint.pl;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 tools/tb2claws-mail;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 tools/tbird2claws.py;  cvs diff -u -r 1.2.14.2 -r 1.2.14.3 tools/update-po;  cvs diff -u -r 1.1.4.4 -r 1.1.4.5 tools/vcard2xml.py;  cvs diff -u -r 1.2.2.10 -r 1.2.2.11 tools/kdeservicemenu/README;  ) > 2.9.1cvs48.patchset
 ( cvs diff -u -r 1.42.2.31 -r 1.42.2.32 NEWS;  cvs diff -u -r 1.8.2.35 -r 1.8.2.36 README;  cvs diff -u -r 1.1.2.20 -r 1.1.2.21 RELEASE_NOTES;  cvs diff -u -r 1.654.2.2632 -r 1.654.2.2633 configure.ac;  ) > 2.9.2cvs1.patchset
 ( cvs diff -u -r 1.179.2.171 -r 1.179.2.172 src/imap.c;  ) > 2.9.2cvs2.patchset
+( cvs diff -u -r 1.23.2.22 -r 1.23.2.23 src/crash.c;  cvs diff -u -r 1.5.2.18 -r 1.5.2.19 src/exporthtml.c;  cvs diff -u -r 1.28.2.34 -r 1.28.2.35 src/mbox.c;  cvs diff -u -r 1.1.2.39 -r 1.1.2.40 src/prefs_summaries.c;  cvs diff -u -r 1.47.2.39 -r 1.47.2.40 src/procheader.c;  cvs diff -u -r 1.6.2.10 -r 1.6.2.11 src/common/log.c;  cvs diff -u -r 1.36.2.101 -r 1.36.2.102 src/common/utils.c;  cvs diff -u -r 1.1.2.6 -r 1.1.2.7 src/gtk/gtksourceprintjob.c;  cvs diff -u -r 1.9.2.16 -r 1.9.2.17 src/gtk/sslcertwindow.c;  ) > 2.9.2cvs3.patchset
index 1d5ce7af3c25dedb1a77525eb89c54d1ebfe1082..4eed794acb630f58f8e521c25efd92c8d2641b16 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=2
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=2
+EXTRA_VERSION=3
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 6124e78f07eac8bc50a6a8f65905aab7fbc0d496..3d674b7dfce92d13acca47dc79e7753a7b2cb8c5 100644 (file)
@@ -122,9 +122,10 @@ void log_print(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
-       
+       struct tm buft;
+
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -150,9 +151,10 @@ void log_message(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -180,9 +182,10 @@ void log_warning(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -210,9 +213,10 @@ void log_error(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -240,9 +244,10 @@ void log_status_ok(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -270,9 +275,10 @@ void log_status_nok(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
@@ -300,9 +306,10 @@ void log_status_skip(LogInstance instance, const gchar *format, ...)
        gchar buf[BUFFSIZE + LOG_TIME_LEN];
        time_t t;
        LogText *logtext = g_new0(LogText, 1);
+       struct tm buft;
 
        time(&t);
-       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+       strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime_r(&t, &buft));
 
        va_start(args, format);
        g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
index 63bcd974327f3be164db2893dae398e9a61e7c95..fbe776fcd736dbde3437f6d86a693304772ca714 100644 (file)
@@ -3541,9 +3541,10 @@ time_t tzoffset_sec(time_t *now)
 {
        struct tm gmt, *lt;
        gint off;
-
-       gmt = *gmtime(now);
-       lt = localtime(now);
+       struct tm buf1, buf2;
+       
+       gmt = *gmtime_r(now, &buf1);
+       lt = localtime_r(now, &buf2);
 
        off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min;
 
@@ -3571,9 +3572,10 @@ gchar *tzoffset(time_t *now)
        struct tm gmt, *lt;
        gint off;
        gchar sign = '+';
+       struct tm buf1, buf2;
 
-       gmt = *gmtime(now);
-       lt = localtime(now);
+       gmt = *gmtime_r(now, &buf1);
+       lt = localtime_r(now, &buf2);
 
        off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min;
 
@@ -3605,11 +3607,13 @@ void get_rfc822_date(gchar *buf, gint len)
        time_t t;
        gchar day[4], mon[4];
        gint dd, hh, mm, ss, yyyy;
+       struct tm buf1;
+       gchar buf2[BUFFSIZE];
 
        t = time(NULL);
-       lt = localtime(&t);
+       lt = localtime_r(&t, &buf1);
 
-       sscanf(asctime(lt), "%3s %3s %d %d:%d:%d %d\n",
+       sscanf(asctime_r(lt, buf2), "%3s %3s %d %d:%d:%d %d\n",
               day, mon, &dd, &hh, &mm, &ss, &yyyy);
        g_snprintf(buf, len, "%s, %d %s %d %02d:%02d:%02d %s",
                   day, dd, mon, yyyy, hh, mm, ss, tzoffset(&t));
@@ -3786,9 +3790,10 @@ gchar *generate_msgid(gchar *buf, gint len)
        struct tm *lt;
        time_t t;
        gchar *addr;
+       struct tm buft;
 
        t = time(NULL);
-       lt = localtime(&t);
+       lt = localtime_r(&t, &buft);
 
        addr = g_strconcat("@", get_domain_name(), NULL);
 
@@ -4871,30 +4876,6 @@ static void init_time_names(void)
        time_am_pm = Q_("For use by strftime (default 12-hour time format)|%I:%M:%S %p");
 
        time_names_init_done = TRUE;
-#if 0
-       {
-       struct tm *lt;
-       time_t now = time(NULL), next;
-       gchar buf_a[1024], buf_b[1024];
-       
-       printf("test strftime:\n");
-       tzset();
-       for (next = now; next < now + 86400*365*2; next++) {
-               lt = localtime(&now);
-               strftime(buf_a, 1024, 
-                       "%a,%A,%b,%B,%c,%C,%d,%D,%e,%F,%G,%g,%h,%H,%I "
-                       "%j,%k,%l,%m,%M,%n,%p,%P,%r,%R,%s,%S,%t,%T,%u,%U,%V"
-                       "%w,%W,%x,%X,%y,%Y,%z,%Z,%%,%EY,%OY", lt);
-               fast_strftime(buf_b, 1024, 
-                       "%a,%A,%b,%B,%c,%C,%d,%D,%e,%F,%G,%g,%h,%H,%I "
-                       "%j,%k,%l,%m,%M,%n,%p,%P,%r,%R,%s,%S,%t,%T,%u,%U,%V"
-                       "%w,%W,%x,%X,%y,%Y,%z,%Z,%%,%EY,%OY", lt);
-               if (strcmp(buf_a, buf_b)) {
-                       printf("diff: \n%s\n%s\n", buf_a, buf_b);
-               }
-       }
-       }
-#endif
 }
 
 #define CHECK_SIZE() {                 \
index 329e31d6caf7431dba81e143b769997146ee177a..9d1cfaa8c042ee01ea34a05130ddd5747f17a1c8 100644 (file)
@@ -300,10 +300,11 @@ static void crash_save_crash_log(GtkButton *button, const gchar *text)
        time_t timer;
        struct tm *lt;
        char buf[100];
+       struct tm buft;
        gchar *filename;
 
        timer = time(NULL);
-       lt = localtime(&timer);
+       lt = localtime_r(&timer, &buft);
        strftime(buf, sizeof buf, "claws-crash-log-%Y-%m-%d-%H-%M-%S.txt", lt);
        if (NULL != (filename = filesel_select_file_save(_("Save crash information"), buf))
        &&  *filename)
index c00b5a97d58f85da220f387810d97b5fcd737c80..99aec7ebafd3a329cc16c8a1f286332675bb8b3e 100644 (file)
@@ -951,6 +951,7 @@ void exporthtml_process(
        time_t tt;
        gchar *dsName;
        static gchar *title;
+       gchar buf[512];
 
        htmlFile = g_fopen( ctl->path, "wb" );
        if( ! htmlFile ) {
@@ -977,7 +978,7 @@ void exporthtml_process(
        exporthtml_fmt_folder( ctl, htmlFile, rootFolder );
 
        tt = time( NULL );
-       fprintf( htmlFile, "<p>%s</p>\n", ctime( &tt ) );
+       fprintf( htmlFile, "<p>%s</p>\n", ctime_r( &tt, buf ) );
        fprintf( htmlFile, "<hr width=\"100%%\"></hr>\n" );
 
        fprintf( htmlFile, "</body>\n" );
index 79c3bde59ee4f5afa9ade77469ffb635ec5172bd..a13248f4996199b5210a516c6fef90c44bb2e993 100644 (file)
@@ -2817,10 +2817,11 @@ evaluate_format_string (GtkSourcePrintJob *job, const gchar *format)
        const struct tm *tm;
        time_t now;
        gunichar ch;
-       
+       struct tm lt;
+
        /* get time */
        time (&now);
-       tm = localtime (&now);
+       tm = localtime_r(&now, &lt);
 
        /* analyze format string and replace the codes we know */
        eval = g_string_new_len (NULL, strlen (format));
index b4137f2c71e19e0941d0e0de3dcf347740a6b097..7c817fbff104ff0a0c45979f67b54110b965b207 100644 (file)
@@ -59,6 +59,7 @@ static GtkWidget *cert_presenter(SSLCertificate *cert)
        unsigned char md[EVP_MAX_MD_SIZE];      
        ASN1_TIME *validity;
        time_t exp_time_t;
+       struct tm lt;
 
        /* issuer */    
        if (X509_NAME_get_text_by_NID(X509_get_issuer_name(cert->x509_cert), 
@@ -115,7 +116,7 @@ static GtkWidget *cert_presenter(SSLCertificate *cert)
        }
        
        memset(buf, 0, sizeof(buf));
-       strftime(buf, sizeof(buf)-1, prefs_common.date_format, localtime(&exp_time_t));
+       strftime(buf, sizeof(buf)-1, prefs_common.date_format, localtime_r(&exp_time_t, &lt));
        exp_date = buf? g_strdup(buf):g_strdup("?");
 
        /* fingerprint */
index 0f79f99b05d98f0424b9efba0286fa929136e498..5263d505b2d6e8ce1d3bc85bdf82595d3c0dcde7 100644 (file)
@@ -548,6 +548,7 @@ gint export_list_to_mbox(GSList *mlist, const gchar *mbox)
        statusbar_print_all(_("Exporting to mbox..."));
        for (cur = mlist; cur != NULL; cur = cur->next) {
                int len;
+               gchar buft[BUFFSIZE];
                msginfo = (MsgInfo *)cur->data;
 
                msg_fp = procmsg_open_message(msginfo);
@@ -566,7 +567,7 @@ gint export_list_to_mbox(GSList *mlist, const gchar *mbox)
                extract_address(buf);
 
                fprintf(mbox_fp, "From %s %s",
-                       buf, ctime(&msginfo->date_t));
+                       buf, ctime_r(&msginfo->date_t, buft));
 
                buf[0] = '\0';
                
index 6d68239cf2639a1f88bc8c63f7c5dbdae2e3266a..49c59ca2d92757fc366b8077f1a7c67cc62d37e3 100644 (file)
@@ -743,9 +743,10 @@ static void date_format_entry_on_change(GtkEditable *editable,
        struct tm *cal_time;
        gchar buffer[100];
        gchar *text;
+       struct tm lt;
 
        cur_time = time(NULL);
-       cal_time = localtime(&cur_time);
+       cal_time = localtime_r(&cur_time, &lt);
        buffer[0] = 0;
        text = gtk_editable_get_chars(editable, 0, -1);
        if (text)
index db5a5bf43dbd3db3a28655d084d653aedc9b1dfd..56d565cf58ffb7cbfd6175ec2cabb9e004dd6c96 100644 (file)
@@ -914,8 +914,9 @@ void procheader_date_get_localtime(gchar *dest, gint len, const time_t timer)
        gchar *default_format = "%y/%m/%d(%a) %H:%M";
        gchar *str;
        const gchar *src_codeset, *dest_codeset;
+       struct tm buf;
 
-       lt = localtime(&timer);
+       lt = localtime_r(&timer, &buf);
 
        if (prefs_common.date_format)
                fast_strftime(dest, len, prefs_common.date_format, lt);