
/*
 *  LOG.C
 *
 *  $Header: Beta:src/uucp/src/lib/RCS/log.c,v 1.1 90/02/02 12:08:38 dillon Exp Locker: dillon $
 *
 *  (C) Copyright 1989-1990 by Matthew Dillon,  All Rights Reserved.
 *
 *  ulog(level, ctl, args...)
 */

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>

#include "log.h"
#include "config.h"

Prototype void ulog(int, const char *, ...);

int	LogLevel = -1;
int	LogToStdout = 0;
char	*LogProgram = "-";
char	*LogHost = "-";
char	*LogWho = "-";
char	*LogFile;
char	LogBuf[512];

void
ulog(level, ctl)
int level;
const char *ctl;
{
    long clock;
    struct tm *ut;
    int logfd;
    int len;
    char *logFile;
    long *args = (long *)&ctl + 1;  /*  should use varargs  */

    if (LogFile)
	logFile = LogFile;
    else
	logFile = MakeConfigPath(UUSPOOL, "LOGFILE");

    if (level > LogLevel)
	return;

    (void)time(&clock);
    ut = localtime(&clock);

    sprintf(LogBuf, "(%02d/%02d-%02d:%02d:%02d) %s,%s,%s ",
	ut->tm_mon+1, ut->tm_mday, ut->tm_hour, ut->tm_min, ut->tm_sec,
	LogProgram,
	LogHost,
	LogWho
    );
    sprintf(LogBuf + strlen(LogBuf), ctl,
	args[0], args[1], args[2],
	args[3], args[4], args[5]
    );

    len = strlen(LogBuf);
    LogBuf[len++] = '\n';
    LogBuf[len] = 0;

    DEBUG(0, "%s", LogBuf);

    if (LogToStdout) {
	write(1, LogBuf, len);
	return;
    }
    LockFile("LOG-UPDATE");
    logfd = open(logFile, O_CREAT|O_WRONLY|O_APPEND, 0644);
    if (logfd >= 0) {
	write(logfd, LogBuf, len);
	close(logfd);
    } else {
	fprintf(stderr, "Can't open %s\n", logFile);
    }
    UnLockFile("LOG-UPDATE");
}

