00001
00002
00003 #include <u/libu_conf.h>
00004 #include <u/missing.h>
00005 #ifndef HAVE_SYSLOG
00006
00007 #ifdef OS_WIN
00008 #include <windows.h>
00009 #include <io.h>
00010 #include <sys/locking.h>
00011 #include <errno.h>
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014
00015 void vsyslog(int priority, const char *fmt, va_list ap)
00016 {
00017 #define LIBU_WIN_LOGFILE "libu.log"
00018 enum { BUFSZ = 1024 };
00019 static FILE *df = NULL, *lock = NULL;
00020 char buf[BUFSZ];
00021 int i;
00022
00023
00024 if(df == NULL)
00025 {
00026 df = fopen(LIBU_WIN_LOGFILE, "a+");
00027 lock = fopen(LIBU_WIN_LOGFILE ".lock", "a+");
00028 if(df == NULL || lock == NULL)
00029 exit(1);
00030 }
00031
00032 vsnprintf(buf, BUFSZ, fmt, ap);
00033
00034
00035 for(i = 0;
00036 _locking(fileno(lock), _LK_NBLCK, 1) == EACCES && i < 10; ++i)
00037 Sleep(100);
00038
00039 if(i < 10)
00040 {
00041 fprintf(df, "%s\n", buf);
00042 fflush(df);
00043
00044 _locking(fileno(lock), _LK_UNLCK, 1);
00045 } else {
00046
00047 ;
00048 }
00049
00050 return;
00051 }
00052
00053 void syslog(int priority, const char *fmt, ...)
00054 {
00055 va_list ap;
00056
00057 va_start(ap, fmt);
00058
00059 vsyslog(priority, fmt, ap);
00060
00061 va_end(ap);
00062 }
00063
00064 #endif
00065
00066 #else
00067 #include <syslog.h>
00068 #include <stdarg.h>
00069 void syslog(int priority, const char *fmt, ...);
00070 void vsyslog(int priority, const char *fmt, va_list args);
00071 #endif