]> mj.ucw.cz Git - libucw.git/blobdiff - lib/log-file.c
Added a direct I/O fastbuf backend.
[libucw.git] / lib / log-file.c
index 5916acb5bf648d50575359b209a7a40c31fd5b20..20dea918c80ae13813913ecd05f58a7b4d99971d 100644 (file)
@@ -1,16 +1,16 @@
 /*
 /*
- *     Sherlock Library -- Keeping of Log Files
+ *     UCW Library -- Keeping of Log Files
  *
  *
- *     (c) 1997--2004 Martin Mares <mj@ucw.cz>
+ *     (c) 1997--2005 Martin Mares <mj@ucw.cz>
  *
  *     This software may be freely distributed and used according to the terms
  *     of the GNU Lesser General Public License.
  */
 
 #include "lib/lib.h"
  *
  *     This software may be freely distributed and used according to the terms
  *     of the GNU Lesser General Public License.
  */
 
 #include "lib/lib.h"
+#include "lib/lfs.h"
 
 #include <stdio.h>
 
 #include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <string.h>
 #include <fcntl.h>
 #include <unistd.h>
 static char *log_name_patt;
 static int log_params;
 static int log_filename_size;
 static char *log_name_patt;
 static int log_params;
 static int log_filename_size;
-int log_switch_nest;
+volatile int log_switch_nest;
 
 
-static void
+static int
 do_log_switch(struct tm *tm)
 {
   int fd, l;
   char name[log_filename_size];
 do_log_switch(struct tm *tm)
 {
   int fd, l;
   char name[log_filename_size];
+  int switched = 0;
 
   if (!log_name_patt ||
       log_filename[0] && !log_params)
 
   if (!log_name_patt ||
       log_filename[0] && !log_params)
-    return;
+    return 0;
   log_switch_nest++;
   l = strftime(name, log_filename_size, log_name_patt, tm);
   if (l < 0 || l >= log_filename_size)
   log_switch_nest++;
   l = strftime(name, log_filename_size, log_name_patt, tm);
   if (l < 0 || l >= log_filename_size)
@@ -37,7 +38,7 @@ do_log_switch(struct tm *tm)
   if (strcmp(name, log_filename))
     {
       strcpy(log_filename, name);
   if (strcmp(name, log_filename))
     {
       strcpy(log_filename, name);
-      fd = open(name, O_WRONLY | O_CREAT | O_APPEND, 0666);
+      fd = sh_open(name, O_WRONLY | O_CREAT | O_APPEND, 0666);
       if (fd < 0)
        die("Unable to open log file %s: %m", name);
       close(2);
       if (fd < 0)
        die("Unable to open log file %s: %m", name);
       close(2);
@@ -45,15 +46,17 @@ do_log_switch(struct tm *tm)
       close(fd);
       close(1);
       dup(2);
       close(fd);
       close(1);
       dup(2);
+      switched = 1;
     }
   log_switch_nest--;
     }
   log_switch_nest--;
+  return switched;
 }
 
 }
 
-void
+int
 log_switch(void)
 {
   time_t tim = time(NULL);
 log_switch(void)
 {
   time_t tim = time(NULL);
-  do_log_switch(localtime(&tim));
+  return do_log_switch(localtime(&tim));
 }
 
 static void
 }
 
 static void
@@ -82,8 +85,6 @@ log_file(byte *name)
       log_filename[0] = 0;
       log_switch();
       log_switch_hook = internal_log_switch;
       log_filename[0] = 0;
       log_switch();
       log_switch_hook = internal_log_switch;
-      close(0);
-      open("/dev/null", O_RDWR, 0);
     }
 }
 
     }
 }