[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