summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2013-02-27 18:42:12 +0100
committerChristophe Fergeau <cfergeau@redhat.com>2013-03-25 12:32:19 +0100
commitd55537c24f73deca0346ab37d93bf5d4437f77b5 (patch)
treed60612697001ba345d66f53a89a6f695a37937c6
parent8d706325f0c6445aa229438ae7d34c064c69be98 (diff)
Add glib Windows logging
As it's not very convenient to get logging output from the plugin while firefox is running, this commit adds a dumb glib logging implementation that writes the logging information to a file. As this is not efficient at all, it's disabled by default unless the SPICE_XPI_LOG_TO_FILE environment variable is set.
-rw-r--r--SpiceXPI/src/plugin/plugin.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/SpiceXPI/src/plugin/plugin.cpp b/SpiceXPI/src/plugin/plugin.cpp
index 2e59bfd..fdb4954 100644
--- a/SpiceXPI/src/plugin/plugin.cpp
+++ b/SpiceXPI/src/plugin/plugin.cpp
@@ -173,6 +173,51 @@ void NS_DestroyPluginInstance(nsPluginInstanceBase *aPlugin)
//
// nsPluginInstance class implementation
//
+static void glib_log_to_file(const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data)
+{
+ FILE *log_file;
+
+ if ((log_level & G_LOG_LEVEL_MASK) > G_LOG_LEVEL_MESSAGE) {
+ return;
+ }
+
+ log_file = (FILE *)user_data;
+
+ if (log_domain != NULL) {
+ fwrite(log_domain, strlen(log_domain), 1, log_file);
+ fwrite(": ", 2, 1, log_file);
+ }
+ if (message != NULL) {
+ fwrite(message, strlen(message), 1, log_file);
+ }
+ fwrite("\r\n", 2, 1, log_file);
+ fflush(log_file);
+}
+
+static void glib_setup_logging(void)
+{
+#if defined(XP_WIN)
+ FILE *log_file;
+ gchar *log_filename;
+
+ if (!g_getenv("SPICE_XPI_LOG_TO_FILE"))
+ return;
+
+ log_filename = g_build_filename(g_get_tmp_dir(), "SPICEXPI.LOG", NULL);
+ log_file = fopen(log_filename, "w+");
+ if (log_file != NULL) {
+ g_log_set_default_handler(glib_log_to_file, log_file);
+ } else {
+ gchar *log_msg;
+ log_msg = g_strdup_printf("failed to open %s", log_filename);
+ g_free(log_msg);
+ }
+ g_free(log_filename);
+#endif
+}
nsPluginInstance::nsPluginInstance(NPP aInstance):
nsPluginInstanceBase(),
@@ -191,6 +236,7 @@ nsPluginInstance::nsPluginInstance(NPP aInstance):
#if !GLIB_CHECK_VERSION(2, 35, 0)
g_type_init();
#endif
+ glib_setup_logging();
#if defined(XP_WIN)
m_external_controller = new SpiceControllerWin(this);