Avoid using stderr to be as robust as possible in out-of-memory.

Thu May 10 23:21:30 2001  Owen Taylor  <otaylor@redhat.com>

	* gmessages.c (g_log_write_prefix): Avoid using stderr
	to be as robust as possible in out-of-memory.

	* gmessages.c (g_log_default_handler): Remove some dead
	code.

	* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
This commit is contained in:
Owen Taylor
2001-05-14 14:53:59 +00:00
committed by Owen Taylor
parent 72df5e6cab
commit ac0bbb7605
12 changed files with 216 additions and 54 deletions

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -1,3 +1,13 @@
Thu May 10 23:21:30 2001 Owen Taylor <otaylor@redhat.com>
* gmessages.c (g_log_write_prefix): Avoid using stderr
to be as robust as possible in out-of-memory.
* gmessages.c (g_log_default_handler): Remove some dead
code.
* gutils.c (g_parse_debug_string): Fix to avoid mallocs.
Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org> Fri May 11 18:25:23 2001 Tim Janik <timj@gtk.org>
* gdataset.c: * gdataset.c:

View File

@@ -150,6 +150,59 @@ ensure_stdout_valid (void)
#define ensure_stdout_valid() /* Define as empty */ #define ensure_stdout_valid() /* Define as empty */
#endif #endif
static void
write_unsigned (gint fd,
gulong num,
guint radix)
{
char buffer[64];
gulong tmp;
char c;
int i, n;
g_return_if_fail (radix >= 2 && radix <= 36);
if (!num)
{
write (fd, "0", 1);
return;
}
if (radix == 16)
write (fd, "0x", 2);
else if (radix == 8)
write (fd, "0", 1);
n = 0;
tmp = num;
while (tmp)
{
tmp /= radix;
n++;
}
i = n;
while (num)
{
i--;
c = (num % radix);
if (c < 10)
buffer[i] = c + '0';
else
buffer[i] = c + 'a' - 10;
num /= radix;
}
write (fd, buffer, n);
}
static void
write_string (gint fd,
gchar *string)
{
write (fd, string, strlen (string));
}
static void static void
g_log_write_prefix (gint fd, g_log_write_prefix (gint fd,
GLogLevelFlags mask) GLogLevelFlags mask)
@@ -185,20 +238,20 @@ g_log_write_prefix (gint fd,
if ((g_log_msg_prefix & mask) == mask) if ((g_log_msg_prefix & mask) == mask)
{ {
gchar prg_pid[64], *prg_name; gchar *prg_name;
prg_name = g_get_prgname (); prg_name = g_get_prgname ();
if (!prg_name) if (!prg_name)
{ write_string (fd, "(process:");
prg_name = "(process";
sprintf (prg_pid, ":%u): ", getpid ());
}
else else
sprintf (prg_pid, " (pid:%u): ", getpid ()); {
write_string (fd, prg_name);
write (fd, prg_name, strlen (prg_name)); write_string (fd, " (pid:");
write (fd, prg_pid, strlen (prg_pid)); }
write_unsigned (fd, getpid (), 10);
write_string (fd, "): ");
} }
} }
@@ -530,7 +583,6 @@ g_log_default_handler (const gchar *log_domain,
GErrorFunc local_glib_error_func; GErrorFunc local_glib_error_func;
GWarningFunc local_glib_warning_func; GWarningFunc local_glib_warning_func;
GPrintFunc local_glib_message_func; GPrintFunc local_glib_message_func;
gchar prg_pid[64], *prg_name = g_get_prgname ();
in_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0; in_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0;
is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0; is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
@@ -538,13 +590,6 @@ g_log_default_handler (const gchar *log_domain,
if (!message) if (!message)
message = "g_log_default_handler(): (NULL) message"; message = "g_log_default_handler(): (NULL) message";
if (!prg_name)
{
prg_name = "(process";
sprintf (prg_pid, ":%u): ", getpid ());
}
else
sprintf (prg_pid, " (pid:%u): ", getpid ());
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
/* Use just stdout as stderr is hard to get redirected from the /* Use just stdout as stderr is hard to get redirected from the

View File

@@ -437,9 +437,8 @@ g_parse_debug_string (const gchar *string,
} }
else else
{ {
gchar *str = g_strdup (string); const gchar *p = string;
gchar *p = str; const gchar *q;
gchar *q;
gboolean done = FALSE; gboolean done = FALSE;
while (*p && !done) while (*p && !done)
@@ -451,16 +450,13 @@ g_parse_debug_string (const gchar *string,
done = TRUE; done = TRUE;
} }
*q = 0;
for (i=0; i<nkeys; i++) for (i=0; i<nkeys; i++)
if (!g_strcasecmp(keys[i].key, p)) if (g_strncasecmp(keys[i].key, p, q - p) == 0 &&
keys[i].key[q - p] == '\0')
result |= keys[i].value; result |= keys[i].value;
p = q+1; p = q + 1;
} }
g_free (str);
} }
return result; return result;

View File

@@ -150,6 +150,59 @@ ensure_stdout_valid (void)
#define ensure_stdout_valid() /* Define as empty */ #define ensure_stdout_valid() /* Define as empty */
#endif #endif
static void
write_unsigned (gint fd,
gulong num,
guint radix)
{
char buffer[64];
gulong tmp;
char c;
int i, n;
g_return_if_fail (radix >= 2 && radix <= 36);
if (!num)
{
write (fd, "0", 1);
return;
}
if (radix == 16)
write (fd, "0x", 2);
else if (radix == 8)
write (fd, "0", 1);
n = 0;
tmp = num;
while (tmp)
{
tmp /= radix;
n++;
}
i = n;
while (num)
{
i--;
c = (num % radix);
if (c < 10)
buffer[i] = c + '0';
else
buffer[i] = c + 'a' - 10;
num /= radix;
}
write (fd, buffer, n);
}
static void
write_string (gint fd,
gchar *string)
{
write (fd, string, strlen (string));
}
static void static void
g_log_write_prefix (gint fd, g_log_write_prefix (gint fd,
GLogLevelFlags mask) GLogLevelFlags mask)
@@ -185,20 +238,20 @@ g_log_write_prefix (gint fd,
if ((g_log_msg_prefix & mask) == mask) if ((g_log_msg_prefix & mask) == mask)
{ {
gchar prg_pid[64], *prg_name; gchar *prg_name;
prg_name = g_get_prgname (); prg_name = g_get_prgname ();
if (!prg_name) if (!prg_name)
{ write_string (fd, "(process:");
prg_name = "(process";
sprintf (prg_pid, ":%u): ", getpid ());
}
else else
sprintf (prg_pid, " (pid:%u): ", getpid ()); {
write_string (fd, prg_name);
write (fd, prg_name, strlen (prg_name)); write_string (fd, " (pid:");
write (fd, prg_pid, strlen (prg_pid)); }
write_unsigned (fd, getpid (), 10);
write_string (fd, "): ");
} }
} }
@@ -530,7 +583,6 @@ g_log_default_handler (const gchar *log_domain,
GErrorFunc local_glib_error_func; GErrorFunc local_glib_error_func;
GWarningFunc local_glib_warning_func; GWarningFunc local_glib_warning_func;
GPrintFunc local_glib_message_func; GPrintFunc local_glib_message_func;
gchar prg_pid[64], *prg_name = g_get_prgname ();
in_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0; in_recursion = (log_level & G_LOG_FLAG_RECURSION) != 0;
is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0; is_fatal = (log_level & G_LOG_FLAG_FATAL) != 0;
@@ -538,13 +590,6 @@ g_log_default_handler (const gchar *log_domain,
if (!message) if (!message)
message = "g_log_default_handler(): (NULL) message"; message = "g_log_default_handler(): (NULL) message";
if (!prg_name)
{
prg_name = "(process";
sprintf (prg_pid, ":%u): ", getpid ());
}
else
sprintf (prg_pid, " (pid:%u): ", getpid ());
#ifdef G_OS_WIN32 #ifdef G_OS_WIN32
/* Use just stdout as stderr is hard to get redirected from the /* Use just stdout as stderr is hard to get redirected from the

View File

@@ -437,9 +437,8 @@ g_parse_debug_string (const gchar *string,
} }
else else
{ {
gchar *str = g_strdup (string); const gchar *p = string;
gchar *p = str; const gchar *q;
gchar *q;
gboolean done = FALSE; gboolean done = FALSE;
while (*p && !done) while (*p && !done)
@@ -451,16 +450,13 @@ g_parse_debug_string (const gchar *string,
done = TRUE; done = TRUE;
} }
*q = 0;
for (i=0; i<nkeys; i++) for (i=0; i<nkeys; i++)
if (!g_strcasecmp(keys[i].key, p)) if (g_strncasecmp(keys[i].key, p, q - p) == 0 &&
keys[i].key[q - p] == '\0')
result |= keys[i].value; result |= keys[i].value;
p = q+1; p = q + 1;
} }
g_free (str);
} }
return result; return result;