home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / uucp / uuclean.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  2.4 KB  |  140 lines

  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.  
  31. main(argc, argv)
  32. char *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
  103. char Pre[MAXPRE][DIRSIZ];
  104. int 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.  
  114. chkpre(file)
  115. char *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.  
  133. stpre(p)
  134. char *p;
  135. {
  136.     if (Npre < MAXPRE - 2)
  137.         strcpy(Pre[Npre++], p);
  138.     return;
  139. }
  140.