BSD 3 development
[unix-history] / usr / src / cmd / uucp / uuclean.c
CommitLineData
e8e1f34c
BJ
1#include "uucp.h"
2#include "uucpdefs.h"
3#include <signal.h>
4#include <pwd.h>
5#include <sys/types.h>
6#include <sys/stat.h>
7#include <sys/dir.h>
8
9/*******
10 *
11 * uuclean - this program will search through the spool
12 * directory (Spool) and delete all files with a requested
13 * prefix which are older than (nomtime) seconds.
14 * If the -m option is set, the program will try to
15 * send mail to the usid of the file.
16 *
17 * options:
18 * -m - send mail for deleted file
19 * -d - directory to clean
20 * -n - time to age files before delete (in hours)
21 * -p - prefix for search
22 * -x - turn on debug outputs
23 * exit status:
24 * 0 - normal return
25 * 1 - can not read directory
26 */
27
28#define DPREFIX "U"
29#define NOMTIME 72 /* hours to age files before deletion */
30
31main(argc, argv)
32char *argv[];
33{
34 FILE *pdirf;
35 char file[NAMESIZE];
36 time_t nomtime, ptime;
37 struct stat stbuf;
38 int mflg=0;
39 extern int onintr();
40
41 nomtime = NOMTIME * 3600L;
42
43 while (argc>1 && argv[1][0] == '-') {
44 switch (argv[1][1]) {
45 case 'd':
46 Spool = &argv[1][2];
47 break;
48 case 'm':
49 mflg = 1;
50 break;
51 case 'n':
52 nomtime = atoi(&argv[1][2]) * 3600L;
53 break;
54 case 'p':
55 if (&argv[1][2] != '\0')
56 stpre(&argv[1][2]);
57 break;
58 case 'x':
59 Debug = atoi(&argv[1][2]);
60 if (Debug <= 0)
61 Debug = 1;
62 break;
63 default:
64 printf("unknown flag %s\n", argv[1]); break;
65 }
66 --argc; argv++;
67 }
68
69 DEBUG(4, "DEBUG# %s\n", "START");
70 chdir(Spool);
71
72 if ((pdirf = fopen(Spool, "r")) == NULL) {
73 printf("%s directory unreadable\n", Spool);
74 exit(1);
75 }
76
77 time(&ptime);
78 while (gnamef(pdirf, file)) {
79 if (!chkpre(file))
80 continue;
81
82 if (stat(file, &stbuf) == -1) {
83 DEBUG(4, "stat on %s failed\n", file);
84 continue;
85 }
86
87
88 if ((stbuf.st_mode & S_IFMT) == S_IFDIR)
89 continue;
90 if ((ptime - stbuf.st_ctime) < nomtime)
91 continue;
92 DEBUG(4, "unlink file %s\n", file);
93 unlink(file);
94 if (mflg) sdmail(file, stbuf.st_uid);
95 }
96
97 fclose(pdirf);
98 exit(0);
99}
100
101
102#define MAXPRE 10
103char Pre[MAXPRE][DIRSIZ];
104int Npre = 0;
105/***
106 * chkpre(file) check for prefix
107 * char *file;
108 *
109 * return codes:
110 * 0 - not prefix
111 * 1 - is prefix
112 */
113
114chkpre(file)
115char *file;
116{
117 int i;
118
119 for (i = 0; i < Npre; i++) {
120 if (prefix(Pre[i], file))
121 return(1);
122 }
123 return(0);
124}
125
126/***
127 * stpre(p) store prefix
128 * char *p;
129 *
130 * return codes: none
131 */
132
133stpre(p)
134char *p;
135{
136 if (Npre < MAXPRE - 2)
137 strcpy(Pre[Npre++], p);
138 return;
139}