Remove the 1024 char limit in the common (non-recursive) case.
authorMatthias Clasen <maclas@gmx.de>
Fri, 25 Jul 2003 23:17:23 +0000 (23:17 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 25 Jul 2003 23:17:23 +0000 (23:17 +0000)
2003-07-26  Matthias Clasen  <maclas@gmx.de>

* glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
case.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/ChangeLog
docs/reference/glib/tmpl/messages.sgml
glib/gmessages.c

index 93711d1..c6e1ce3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 93711d1..c6e1ce3 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 93711d1..c6e1ce3 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 93711d1..c6e1ce3 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 93711d1..c6e1ce3 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 93711d1..c6e1ce3 100644 (file)
@@ -1,3 +1,8 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gmessages.c (g_logv): Remove the 1024 char limit in the common (non-recursive)
+       case.
+
 2003-07-25  Matthias Clasen  <maclas@gmx.de>
 
        * glib/gwin32.c: 
index 270e9a1..bde27d2 100644 (file)
@@ -1,3 +1,7 @@
+2003-07-26  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/tmpl/messages.sgml: Remove the note about the message length restriction.
+
 2003-07-24  Matthias Clasen  <maclas@gmx.de>
 
        * glib/tmpl/messages.sgml: Mention the restriction on message length.  (#118043, Martyn Russell)
index 959edbe..a8b80ef 100644 (file)
@@ -10,10 +10,6 @@ These functions provide support for logging error messages or messages used for
 </para>
 
 <para>
-Note that the formatted messages must not exceed 1024 bytes. Longer messages will be truncated. 
-</para>
-
-<para>
 There are several built-in levels of messages, defined in #GLogLevelFlags.
 These can be extended with user-defined levels.
 </para>
index c593c8c..fde63f7 100644 (file)
@@ -422,7 +422,6 @@ g_logv (const gchar   *log_domain,
        const gchar   *format,
        va_list        args1)
 {
-  gchar buffer[1025];
   gboolean was_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
   gboolean was_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0;
   gint i;
@@ -431,11 +430,6 @@ g_logv (const gchar   *log_domain,
   if (!log_level)
     return;
   
-  /* we use a stack buffer of fixed size, because we might get called
-   * recursively.
-   */
-  _g_vsnprintf (buffer, 1024, format, args1);
-  
   for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
     {
       register GLogLevelFlags test_level;
@@ -491,7 +485,25 @@ g_logv (const gchar   *log_domain,
                }
            }
 
-         log_func (log_domain, test_level, buffer, data);
+         if (test_level & G_LOG_FLAG_RECURSION)
+           {
+             /* we use a stack buffer of fixed size, since we're likely
+              * in an out-of-memory situation
+              */
+             gchar buffer[1025];
+             gint size;
+             size = _g_vsnprintf (buffer, 1024, format, args1);
+
+             log_func (log_domain, test_level, buffer, data);
+           }
+         else
+           {
+             gchar *msg = g_strdup_vprintf (format, args1);
+
+             log_func (log_domain, test_level, msg, data);
+
+             g_free (msg);
+           }
 
          if (test_level & G_LOG_FLAG_FATAL)
            {