chiark / gitweb /
Fix logfile rotation to avoid program collapse.
authormdw <mdw>
Thu, 22 Feb 2001 09:06:08 +0000 (09:06 +0000)
committermdw <mdw>
Thu, 22 Feb 2001 09:06:08 +0000 (09:06 +0000)
client.c

index 019d68f120f95a6ee9b412d48cca68b17132ea64..c1abe68e0ed59daa71447dc2640964e9ccef5af2 100644 (file)
--- a/client.c
+++ b/client.c
@@ -1,6 +1,6 @@
 /* -*-c-*-
  *
- * $Id: client.c,v 1.5 2001/02/16 21:23:39 mdw Exp $
+ * $Id: client.c,v 1.6 2001/02/22 09:06:08 mdw Exp $
  *
  * Client for TrIPE
  *
@@ -29,6 +29,9 @@
 /*----- Revision history --------------------------------------------------* 
  *
  * $Log: client.c,v $
+ * Revision 1.6  2001/02/22 09:06:08  mdw
+ * Fix logfile rotation to avoid program collapse.
+ *
  * Revision 1.5  2001/02/16 21:23:39  mdw
  * Use reliable signal handling for reopening logs.
  *
@@ -198,13 +201,24 @@ static void uline(char *p, void *b)
 
 static void logfile(const char *name)
 {
-  if (logfp)
-    fclose(logfp);
-  if ((logfp = fopen(name, "a")) == 0) {
-    die(EXIT_FAILURE, "error opening logfile `%s': %s",
-       name, strerror(errno));
+  FILE *fp;
+
+  if ((fp = fopen(name, "a")) != 0) {
+    if (logfp)
+      fclose(logfp);
+    logfp =  fp;
+    setvbuf(logfp, 0, _IOLBF, BUFSIZ);
+  } else {
+    dstr d = DSTR_INIT;
+    dstr_putf(&d, "error opening logfile `%s': %s", name, strerror(errno));
+    if (logfp)
+      writelog("error", d.buf);
+    else if (logname)
+      die(EXIT_FAILURE, d.buf);
+    if (f & f_syslog)
+      syslog(LOG_ERR, d.buf);
+    dstr_destroy(&d);
   }
-  setvbuf(logfp, 0, _IOLBF, BUFSIZ);
 }
 
 static void sighup(int sig, void *v)