[pkg-fso-commits] [SCM] Automatic Display Manager branch, master, updated. debian/0.8-1-12-g387dda5

Enrico Zini enrico at enricozini.org
Sat Jul 9 00:02:08 UTC 2011


The following commit has been merged in the master branch:
commit 387dda5d06d1c7debc4b4fd9102b31ae20a76d49
Author: Enrico Zini <enrico at enricozini.org>
Date:   Sat Jul 9 01:01:45 2011 +0100

    More log improvements

diff --git a/log.c b/log.c
index d5a69c6..a258da8 100644
--- a/log.c
+++ b/log.c
@@ -74,42 +74,50 @@ static void log_common(int prio, const char* fmt, va_list ap)
     }
 }
 
-void log_verb(const char* fmt, ...)
+bool log_verb(const char* fmt, ...)
 {
-    if (config->log_level < NODM_LL_VERB) return;
+    if (config->log_level < NODM_LL_VERB) return false;
+    if (fmt == NULL) return true;
 
     va_list ap;
     va_start(ap, fmt);
     log_common(LOG_INFO, fmt, ap);
     va_end(ap);
+    return true;
 }
 
-void log_info(const char* fmt, ...)
+bool log_info(const char* fmt, ...)
 {
-    if (config->log_level < NODM_LL_INFO) return;
+    if (config->log_level < NODM_LL_INFO) return false;
+    if (fmt == NULL) return true;
 
     va_list ap;
     va_start(ap, fmt);
     log_common(LOG_NOTICE, fmt, ap);
     va_end(ap);
+    return true;
 }
 
-void log_warn(const char* fmt, ...)
+bool log_warn(const char* fmt, ...)
 {
-    if (config->log_level < NODM_LL_WARN) return;
+    if (config->log_level < NODM_LL_WARN) return false;
+    if (fmt == NULL) return true;
 
     va_list ap;
     va_start(ap, fmt);
     log_common(LOG_WARNING, fmt, ap);
     va_end(ap);
+    return true;
 }
 
-void log_err(const char* fmt, ...)
+bool log_err(const char* fmt, ...)
 {
-    if (config->log_level < NODM_LL_ERR) return;
+    if (config->log_level < NODM_LL_ERR) return false;
+    if (fmt == NULL) return true;
 
     va_list ap;
     va_start(ap, fmt);
     log_common(LOG_ERR, fmt, ap);
     va_end(ap);
+    return true;
 }
diff --git a/log.h b/log.h
index 2927482..e230c5d 100644
--- a/log.h
+++ b/log.h
@@ -72,16 +72,20 @@ void log_start(const struct log_config* conf);
  */
 void log_end();
 
+// Note: all log functions return true if the message was logged, false
+// otherwise. This can be used to test for log levels: if (log_verb(NULL)) { /*
+// complex debugging code */ }
+
 /// Log a message about the trivial normal progress of things
-void log_verb(const char* fmt, ...);
+bool log_verb(const char* fmt, ...);
 
 /// Log a message about the relevant normal progress of things
-void log_info(const char* fmt, ...);
+bool log_info(const char* fmt, ...);
 
 /// Log a warning message
-void log_warn(const char* fmt, ...);
+bool log_warn(const char* fmt, ...);
 
 /// Log an error message
-void log_err(const char* fmt, ...);
+bool log_err(const char* fmt, ...);
 
 #endif
diff --git a/xserver.c b/xserver.c
index 5e2781a..75d34c1 100644
--- a/xserver.c
+++ b/xserver.c
@@ -116,6 +116,20 @@ int nodm_xserver_start(struct nodm_xserver* srv)
     }
     // From now on we need to perform cleanup before returning
 
+    if (log_verb(NULL))
+    {
+        // Log the concatenated command line
+        char buf[4096];
+        int pos = 0;
+        const char** s = srv->argv;
+        for ( ; *s && pos < 4096; ++s)
+        {
+            int r = snprintf(buf + pos, 4096 - pos, " %s", *s);
+            if (r < 0) break;
+            pos += r;
+        }
+        log_verb("starting X server %s", buf);
+    }
     // fork/exec the X server
     srv->pid = fork ();
     if (srv->pid == 0)
@@ -265,6 +279,7 @@ static int x_error_handler(Display* dpy, XErrorEvent* e)
 
 int nodm_xserver_connect(struct nodm_xserver* srv)
 {
+    log_verb("connecting to X server");
     //XSetErrorHandler(x_error_handler);
 
     for (int i = 0; i < 5; ++i)
@@ -291,6 +306,7 @@ int nodm_xserver_connect(struct nodm_xserver* srv)
 
 int nodm_xserver_disconnect(struct nodm_xserver* srv)
 {
+    log_verb("disconnecting from X server");
     // TODO: get/check pending errors (how?)
     if (srv->dpy != NULL)
     {
@@ -313,6 +329,8 @@ int nodm_xserver_read_window_path(struct nodm_xserver* srv)
     char *newwindowpath;
     unsigned long num;
 
+    log_verb("reading WINDOWPATH value from server");
+
     prop = XInternAtom(srv->dpy, "XFree86_VT", False);
     if (prop == None)
     {
@@ -370,6 +388,7 @@ int nodm_xserver_read_window_path(struct nodm_xserver* srv)
         asprintf(&newwindowpath, "%s:%lu", windowpath, num);
     if (srv->windowpath) free(srv->windowpath);
     srv->windowpath = newwindowpath;
+    log_verb("WINDOWPATH: %s", srv->windowpath);
 
     return E_SUCCESS;
 }
diff --git a/xsession-child.c b/xsession-child.c
index d8964e8..f3b7f98 100644
--- a/xsession-child.c
+++ b/xsession-child.c
@@ -302,14 +302,6 @@ int nodm_xsession_child_common_env(struct nodm_xsession_child* s)
 {
     int return_code = E_SUCCESS;
 
-    // Read the WINDOWPATH value from the X server
-    return_code = nodm_xserver_connect(s->srv);
-    if (return_code != E_SUCCESS) goto cleanup;
-    return_code = nodm_xserver_read_window_path(s->srv);
-    if (return_code != E_SUCCESS) goto cleanup;
-    return_code = nodm_xserver_disconnect(s->srv);
-    if (return_code != E_SUCCESS) goto cleanup;
-
     // Setup environment
     setenv("HOME", s->pwent.pw_dir, 1);
     setenv("USER", s->pwent.pw_name, 1);
@@ -318,6 +310,15 @@ int nodm_xsession_child_common_env(struct nodm_xsession_child* s)
     setenv("PWD", s->pwent.pw_dir, 1);
     setenv("SHELL", s->pwent.pw_shell, 1);
     setenv("DISPLAY", s->srv->name, 1);
+
+    // Read the WINDOWPATH value from the X server
+    return_code = nodm_xserver_connect(s->srv);
+    if (return_code != E_SUCCESS) goto cleanup;
+    return_code = nodm_xserver_read_window_path(s->srv);
+    if (return_code != E_SUCCESS) goto cleanup;
+    return_code = nodm_xserver_disconnect(s->srv);
+    if (return_code != E_SUCCESS) goto cleanup;
+
     setenv("WINDOWPATH", s->srv->windowpath, 1);
 
 
diff --git a/xsession.c b/xsession.c
index 7d9ae1c..65da440 100644
--- a/xsession.c
+++ b/xsession.c
@@ -83,6 +83,8 @@ int nodm_xsession_start(struct nodm_xsession* s, struct nodm_xserver* srv)
     args[4] = NULL;
     child.argv = args;
 
+    log_verb("starting X session \"%s\"", s->conf_session_command);
+
     // Variables that gdm sets but we do not:
     //
     // This is something that we should see how to handle.

-- 
Automatic Display Manager



More information about the pkg-fso-commits mailing list