Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-updates-src > by-pkgid > 4e541a35f8f025636e165eb2a0b349a9 > files > 2

weechat-0.4.1-7.2.mga5.src.rpm

From f105c6f0b56fb5687b2d2aedf37cb1d1b434d556 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= <flashcode@flashtux.org>
Date: Sat, 23 Sep 2017 09:36:09 +0200
Subject: [PATCH] logger: call strftime before replacing buffer local variables

---
 ChangeLog.adoc              |  7 ++++
 src/plugins/logger/logger.c | 88 ++++++++++++++++++++++-----------------------
 2 files changed, 51 insertions(+), 44 deletions(-)

--- a/src/plugins/logger/logger.c
+++ b/src/plugins/logger/logger.c
@@ -304,60 +304,71 @@
 char *
 logger_get_mask_expanded (struct t_gui_buffer *buffer, const char *mask)
 {
-    char *mask2, *mask_decoded, *mask_decoded2, *mask_decoded3, *mask_decoded4;
+    char *mask2, *mask3, *mask4, *mask5, *mask6, *mask7;
     const char *dir_separator;
     int length;
     time_t seconds;
     struct tm *date_tmp;
 
     mask2 = NULL;
-    mask_decoded = NULL;
-    mask_decoded2 = NULL;
-    mask_decoded3 = NULL;
-    mask_decoded4 = NULL;
+    mask3 = NULL;
+    mask4 = NULL;
+    mask5 = NULL;
+    mask6 = NULL;
+    mask7 = NULL;
 
     dir_separator = weechat_info_get ("dir_separator", "");
     if (!dir_separator)
         return NULL;
 
+    /* replace date/time specifiers in mask */
+    length = strlen (mask) + 256 + 1;
+    mask2 = malloc (length);
+    if (!mask2)
+        goto end;
+    seconds = time (NULL);
+    date_tmp = localtime (&seconds);
+    mask2[0] = '\0';
+    if (strftime (mask2, length - 1, mask, date_tmp) == 0)
+        mask2[0] = '\0';
+
     /*
      * we first replace directory separator (commonly '/') by \01 because
      * buffer mask can contain this char, and will be replaced by replacement
      * char ('_' by default)
      */
-    mask2 = weechat_string_replace (mask, dir_separator, "\01");
-    if (!mask2)
+    mask3 = weechat_string_replace (mask2, dir_separator, "\01");
+    if (!mask3)
         goto end;
 
-    mask_decoded = weechat_buffer_string_replace_local_var (buffer, mask2);
-    if (!mask_decoded)
+    mask4 = weechat_buffer_string_replace_local_var (buffer, mask3);
+    if (!mask4)
         goto end;
 
-    mask_decoded2 = weechat_string_replace (mask_decoded,
-                                            dir_separator,
-                                            weechat_config_string (logger_config_file_replacement_char));
-    if (!mask_decoded2)
+    mask5 = weechat_string_replace (mask4,
+                                    dir_separator,
+                                    weechat_config_string (logger_config_file_replacement_char));
+    if (!mask5)
         goto end;
 
-    /* restore directory separator */
-    mask_decoded3 = weechat_string_replace (mask_decoded2,
-                                            "\01", dir_separator);
-    if (!mask_decoded3)
+#ifdef __CYGWIN__
+    mask6 = weechat_string_replace (mask5, "\\",
+                                    weechat_config_string (logger_config_file_replacement_char));
+#else
+    mask6 = strdup (mask5);
+#endif /* __CYGWIN__ */
+    if (!mask6)
         goto end;
 
-    /* replace date/time specifiers in mask */
-    length = strlen (mask_decoded3) + 256 + 1;
-    mask_decoded4 = malloc (length);
-    if (!mask_decoded4)
+    /* restore directory separator */
+    mask7 = weechat_string_replace (mask6,
+                                    "\01", dir_separator);
+    if (!mask7)
         goto end;
-    seconds = time (NULL);
-    date_tmp = localtime (&seconds);
-    mask_decoded4[0] = '\0';
-    strftime (mask_decoded4, length - 1, mask_decoded3, date_tmp);
 
     /* convert to lower case? */
     if (weechat_config_boolean (logger_config_file_name_lower_case))
-        weechat_string_tolower (mask_decoded4);
+        weechat_string_tolower (mask7);
 
     if (weechat_logger_plugin->debug)
     {
@@ -367,20 +378,22 @@
                              "decoded mask = \"%s\"",
                              LOGGER_PLUGIN_NAME,
                              weechat_buffer_get_string (buffer, "name"),
-                             mask, mask_decoded4);
+                             mask, mask7);
     }
 
 end:
     if (mask2)
         free (mask2);
-    if (mask_decoded)
-        free (mask_decoded);
-    if (mask_decoded2)
-        free (mask_decoded2);
-    if (mask_decoded3)
-        free (mask_decoded3);
+    if (mask3)
+        free (mask3);
+    if (mask4)
+        free (mask4);
+    if (mask5)
+        free (mask5);
+    if (mask6)
+        free (mask6);
 
-    return mask_decoded4;
+    return mask7;
 }
 
 /*