make it more robust
[unix-history] / usr / src / libexec / bugfiler / process.c
CommitLineData
10236a65
KB
1/*
2 * Copyright (c) 1986 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 */
6
7#ifndef lint
f36776a7 8static char sccsid[] = "@(#)process.c 5.2 (Berkeley) 87/01/28";
10236a65
KB
9#endif not lint
10
11#include <bug.h>
12#include <sys/file.h>
13#include <sys/dir.h>
f36776a7 14#include <sys/time.h>
10236a65
KB
15#include <stdio.h>
16
17extern HEADER mailhead[]; /* mail headers */
18extern int lfd; /* lock file descriptor */
19extern char dir[], /* directory */
20 folder[]; /* sub-directory */
21
22char pfile[MAXPATHLEN]; /* permanent file name */
23
24/*
25 * process --
26 * process a bug report
27 */
28process()
29{
30 register int rval; /* read return value */
f36776a7
KB
31 struct timeval tp; /* time of day */
32 struct timezone tzp;
33 char *ctime();
10236a65
KB
34
35 /* copy report to permanent file */
36 sprintf(pfile,"%s/%s/%d",dir,folder,getnext());
37 fprintf(stderr,"\t%s\n",pfile);
38 if (!(freopen(pfile,"w",stdout)))
39 error("unable to create permanent bug file %s.",pfile);
40 rewind(stdin);
41 while ((rval = read(fileno(stdin),bfr,sizeof(bfr))) != ERR && rval)
42 write(fileno(stdout),bfr,rval);
43 REL_LOCK;
44
45 /* append information to the summary file */
46 sprintf(bfr,"%s/%s",dir,SUMMARY_FILE);
47 GET_LOCK;
48 if (!(freopen(bfr,"a",stdout)))
49 error("unable to append to summary file %s.",bfr);
f36776a7
KB
50 else {
51 if (gettimeofday(&tp,&tzp))
52 error("unable to get time of day.",CHN);
53 printf("\n%s\t\t%s\t%s\t%s\tOwner: Bugs Bunny\n\tComment: Received\n",pfile,ctime(&tp.tv_sec),mailhead[INDX_TAG].line,mailhead[SUBJ_TAG].found ? mailhead[SUBJ_TAG].line : "Subject:\n");
54 }
10236a65
KB
55 REL_LOCK;
56 fclose(stdout);
57}
58
59/*
60 * getnext --
61 * get next file name (number)
62 */
63static
64getnext()
65{
66 register struct direct *d; /* directory structure */
67 register DIR *dirp; /* directory pointer */
68 register int n; /* number values */
69
70 GET_LOCK;
71 sprintf(bfr,"%s/%s",dir,folder);
72 if (!(dirp = opendir(bfr))) {
73 REL_LOCK;
74 error("unable to read folder directory %s.",bfr);
75 }
76 for (n = 0;d = readdir(dirp);)
77 n = MAX(n,atoi(d->d_name));
78 closedir(dirp);
79 return(++n);
80}