blob: 03cec14d6779f6df2696694259f6fd7c3f0a53f2 [file] [log] [blame]
#ifdef HAVE_CONFIG_H
#include <wsman_config.h>
#endif
#include <u/os.h>
#ifndef HAVE_SYSLOG
#ifdef WIN32
#include <windows.h>
#include <io.h>
#include <sys/locking.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define fileno _fileno
void vsyslog(int priority, const char *fmt, va_list ap)
{
#define WSMAND_WIN_LOGFILE "wsmand.log"
enum { BUFSZ = 1024 };
static FILE *df = NULL, *lock = NULL;
char buf[BUFSZ];
int i;
/* first time open the log file and the lock file */
if(df == NULL)
{
df = fopen(WSMAND_WIN_LOGFILE, "a+");
lock = fopen(WSMAND_WIN_LOGFILE ".lock", "a+");
if(df == NULL || lock == NULL)
exit(1);
}
vsnprintf(buf, BUFSZ, fmt, ap);
/* get the lock (i.e. lock the first byte of the lock file) */
for(i = 0;
_locking(fileno(lock), _LK_NBLCK, 1) == EACCES && i < 10; ++i)
Sleep(100);
if(i < 10)
{ /* we have the lock, write the log msg */
fprintf(df, "%s\n", buf);
fflush(df);
/* unlock the file */
_locking(fileno(lock), _LK_UNLCK, 1);
} else {
/* file is still locked after 10 tries, give up */
;
}
return;
}
void syslog(int priority, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt); /* init variable list arguments */
vsyslog(priority, fmt, ap);
va_end(ap);
}
#endif /* ifdef WIN32 */
#else /* ifndef HAVE_SYSLOG */
#include <syslog.h>
#include <stdarg.h>
//void syslog(int priority, const char *fmt, ...);
//void vsyslog(int priority, const char *fmt, va_list args);
#endif