summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Lebl <jirka@5z.com>2001-11-22 03:07:24 +0000
committerGeorge Lebl <jirka@src.gnome.org>2001-11-22 03:07:24 +0000
commitfbf49a272c81714fa687d7c548ca05ceeeda5d5b (patch)
tree1766f2957f4199e3e51895b127953cd63813d80a
parentddbdeb994517c37e2d7745a3cf437ac059bf768b (diff)
downloadgdm-fbf49a272c81714fa687d7c548ca05ceeeda5d5b.tar.gz
keep 4 old x server logs in a logrotate like manner to make debugging X
Wed Nov 21 19:46:50 2001 George Lebl <jirka@5z.com> * daemon/server.c: keep 4 old x server logs in a logrotate like manner to make debugging X server problems easier
-rw-r--r--ChangeLog5
-rw-r--r--daemon/server.c29
2 files changed, 33 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index c521d332..87dda184 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Nov 21 19:46:50 2001 George Lebl <jirka@5z.com>
+
+ * daemon/server.c: keep 4 old x server logs in a logrotate like
+ manner to make debugging X server problems easier
+
2001-11-17 Carlos Perelló Marín <carlos@gnome-db.org>
* configure.in (ALL_LINGUAS): Added pt.
diff --git a/daemon/server.c b/daemon/server.c
index 7bbddd64..e5b90230 100644
--- a/daemon/server.c
+++ b/daemon/server.c
@@ -552,6 +552,30 @@ gdm_server_checklog (GdmDisplay *disp)
#endif
}
+static void
+rotate_logs (const char *dname)
+{
+ /* I'm too lazy to write a loop damnit */
+ char *fname4 = g_strconcat (GdmLogDir, "/", dname, ".log.4", NULL);
+ char *fname3 = g_strconcat (GdmLogDir, "/", dname, ".log.3", NULL);
+ char *fname2 = g_strconcat (GdmLogDir, "/", dname, ".log.2", NULL);
+ char *fname1 = g_strconcat (GdmLogDir, "/", dname, ".log.1", NULL);
+ char *fname = g_strconcat (GdmLogDir, "/", dname, ".log", NULL);
+
+ /* Rotate the logs (keep 4 last) */
+ unlink (fname4);
+ rename (fname3, fname4);
+ rename (fname2, fname3);
+ rename (fname1, fname2);
+ rename (fname, fname1);
+
+ g_free (fname4);
+ g_free (fname3);
+ g_free (fname2);
+ g_free (fname1);
+ g_free (fname);
+}
+
/**
* gdm_server_spawn:
* @disp: Pointer to a GdmDisplay structure
@@ -588,7 +612,7 @@ gdm_server_spawn (GdmDisplay *d)
if (kill (pid, SIGTERM) == 0)
waitpid (pid, NULL, 0);
}
-
+
/* Fork into two processes. Parent remains the gdm process. Child
* becomes the X server. */
@@ -616,6 +640,9 @@ gdm_server_spawn (GdmDisplay *d)
open ("/dev/null", O_RDWR); /* open stdout - fd 1 */
open ("/dev/null", O_RDWR); /* open stderr - fd 2 */
+ /* Rotate the X server logs */
+ rotate_logs (d->name);
+
/* Log all output from spawned programs to a file */
logfd = open (g_strconcat (GdmLogDir, "/", d->name, ".log", NULL),
O_CREAT|O_TRUNC|O_WRONLY, 0644);