+
+static void
+g_log_write_prefix (gint fd,
+ GLogLevelFlags mask)
+{
+ static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
+ static gboolean initted = FALSE;
+
+ g_mutex_lock (g_messages_lock);
+
+ if (!initted)
+ {
+ const gchar *val;
+ initted = TRUE;
+
+ val = g_getenv ("G_PREFIX_MESSAGES");
+
+ if (val)
+ {
+ static const GDebugKey keys[] = {
+ { "error", G_LOG_LEVEL_ERROR },
+ { "critical", G_LOG_LEVEL_CRITICAL },
+ { "warning", G_LOG_LEVEL_WARNING },
+ { "message", G_LOG_LEVEL_MESSAGE },
+ { "info", G_LOG_LEVEL_INFO },
+ { "debug", G_LOG_LEVEL_DEBUG }
+ };
+
+ g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+ }
+ }
+
+ g_mutex_unlock (g_messages_lock);
+
+ if ((g_log_msg_prefix & mask) == mask)
+ {
+ gchar prg_pid[64], *prg_name;
+
+ prg_name = g_get_prgname ();
+
+ if (!prg_name)
+ {
+ prg_name = "(process";
+ sprintf (prg_pid, ":%u): ", getpid ());
+ }
+ else
+ sprintf (prg_pid, " (pid:%u): ", getpid ());
+
+ write (fd, prg_name, strlen (prg_name));
+ write (fd, prg_pid, strlen (prg_pid));
+ }
+}
+