BSD 4_1c_2 release
[unix-history] / usr / src / usr.bin / uucp / uulog.c
static char sccsid[] = "@(#)uulog.c 4.1 (Berkeley) 9/11/82";
#include "uucp.h"
#include "uucpdefs.h"
#include <signal.h>
#include <sys/param.h>
#include <sys/stat.h>
#include <dir.h>
int Stop = 0;
/*******
*
* uulog - this program will append all update files in
* directory (LOGDIR) to the log file (logf) and remove the
* update files.
*
* options:
* -n - nominal time for delete of lock file
* -s - system name for search
* -u - user name for search
* -x - turn on debug outputs
*
* exit codes:
* 0 - normal
* 1 - lock file problems
*
*/
#define NOMTIME 3600L
main(argc, argv)
char *argv[];
{
FILE *plogf;
DIR *lsp;
register struct direct *dirp;
time_t nomtime;
char *system, *user;
extern int onintr(), intr1();
char buf[BUFSIZ], u[20], s[20];
nomtime = NOMTIME;
system = user = NULL;
while (argc>1 && argv[1][0] == '-') {
switch (argv[1][1]) {
case 'd':
printf("-d option removed\n");
break;
case 'n':
nomtime = atoi(&argv[1][2]); break;
case 's':
system = &argv[1][2];
break;
case 'u':
user = &argv[1][2];
break;
case 'x':
Debug = atoi(&argv[1][2]);
if (Debug <= 0)
Debug = 1;
break;
default:
printf("unknown flag %s\n", argv[1]); break;
}
--argc; argv++;
}
DEBUG(4, "%s\n", "START");
chdir(LOGDIR);
if (ulockf(LOGLOCK, nomtime) != 0)
exit(0);
signal(SIGHUP, intr1);
signal(SIGINT,intr1);
signal(SIGQUIT, intr1);
if ((plogf = fopen(LOGFILE, "a")) == NULL) {
rmlock(LOGLOCK);
printf("can't open %s\n", LOGFILE);
exit(0);
}
lsp = opendir(LOGDIR);
ASSERT(lsp != NULL, "CAN NOT OPEN %s", LOGDIR);
while ((dirp = readdir(lsp)) != NULL) {
DEBUG(4, "file-%s\n", dirp->d_name);
if (prefix(LOGPREFIX, dirp->d_name)) {
DEBUG(4, "copy file %s\n", dirp->d_name);
if (appendf(plogf, dirp->d_name) == SUCCESS) {
unlink(dirp->d_name);
}
}
}
closedir(lsp);
fclose(plogf);
chmod(LOGFILE, 0666);
rmlock(NULL);
if (user == NULL && system == NULL)
exit(0);
if (Stop)
exit(0);
signal(SIGHUP, onintr);
signal(SIGINT, onintr);
signal(SIGQUIT, onintr);
plogf = fopen(LOGFILE, "r");
ASSERT(plogf != NULL, "CAN NOT OPEN %s", LOGFILE);
while (fgets(buf, BUFSIZ, plogf) != NULL) {
sscanf(buf, "%s%s", u, s);
DEBUG(4, "u s %s ", u);
DEBUG(4, "%s ", s);
DEBUG(4, "%s", buf);
if (user != NULL && !prefix(user, u))
continue;
if (system != NULL && !prefix(system, s))
continue;
fputs(buf, stdout);
}
exit(0);
}
/***
* onintr()
*
* onintr - interrupt routine
* remove lock file
*
*/
onintr()
{
rmlock(NULL);
exit(0);
}
intr1()
{
signal(SIGINT, intr1);
signal(SIGHUP, intr1);
signal(SIGQUIT, intr1);
Stop = 1;
return;
}
cleanup(code)
int code;
{
exit(code);
}
/*******
* appendf(fp, entryf) append file (entryf) to fp file
* FILE *fp;
* char *entryf;
*
* return codes:
SUCCESS - ok
* FAIL - file not readable
*/
appendf(fp, entryf)
FILE *fp;
char *entryf;
{
FILE *pentryf;
char ltext[513];
if ((pentryf = fopen(entryf, "r")) == NULL) {
/* file entryf not readable */
return(FAIL);
}
while (fgets(ltext, 512, pentryf)) fputs(ltext, fp);
fclose(pentryf);
return(SUCCESS);
}