1: static char vprmSCCSid[] = "@(#)vprm.c	1.3\t8/6/82";
   2: 
   3: #include <sys/param.h>
   4: #include <dir.h>
   5: #include <stat.h>
   6: #include <stdio.h>
   7: 
   8: char *basename();
   9: 
  10: extern  char _sobuf[];
  11: 
  12: main(argc, argv)
  13:     int argc;
  14:     char *argv[];
  15: {
  16:     setbuf(stdout, _sobuf);
  17:     argc--, argv++;
  18:     if (argc == 0) {
  19:         fprintf(stderr, "usage: vprm [ id ... ] [ filename ... ] [ user ... ]\n");
  20:         exit(1);
  21:     }
  22: 
  23:     /* Look for something to delete both in Varian and Versatec spool dirs. */
  24:     delete("Varian", "/usr/spool/vad", argc, argv);
  25:     delete("Versatec", "/usr/spool/vpd", argc, argv);
  26: }
  27: 
  28: /*
  29:  * Look through the argv list for things to delete.
  30:  */
  31: 
  32: delete(devname, spooldir, argc, argv)
  33:     char *devname, *spooldir, *argv[];
  34:     int argc;
  35: {
  36:     DIR *dir;       /* The spool dir. */
  37:     struct direct *dirp;    /* An entry read from the spool dir.*/
  38:     int deletion = 0;   /* Flag noting something has been deleted. */
  39: 
  40:     /* Change to the spool directory. */
  41:     if (chdir(spooldir) < 0) {
  42:         perror(spooldir);
  43:         return(1);
  44:     }
  45: 
  46:     /* Open it. */
  47:     if ((dir = opendir(".")) == NULL) {
  48:         perror(spooldir);
  49:         return(1);
  50:     }
  51: 
  52:     printf("%s -", devname);
  53: 
  54:     /*
  55: 	 * Loop through the args and the spool dir, looking for a spool
  56: 	 * command file (has a prefix of 'df'),
  57: 	 * and trying to match it with the argument.
  58: 	 */
  59:     while (argc-- > 0) {
  60:         rewinddir(dir);
  61:         while ((dirp = readdir(dir)) != NULL) {
  62:             if (dirp->d_name[0] == 'd' &&
  63:                 dirp->d_name[1] == 'f' &&
  64:                 delcheck(dirp->d_name, *argv)) {
  65:                 printf(" removing %s", &(dirp->d_name[3]));
  66:                 deletion = 1;
  67:             }
  68:         }
  69:         argv++;
  70:     }
  71:     closedir(dir);
  72:     if (!deletion)
  73:         printf(" nothing to remove\n");
  74:     else
  75:         putchar('\n');
  76: }
  77: 
  78: 
  79: /*
  80:  * delcheck tries to match the given arg against the given command file in
  81:  * various ways.  For instance, if dfname = 'dfa12345', then there is a match if
  82:  * arg == 'dfa12345', or
  83:  * arg == '12345', or
  84:  * arg == the name given on the L line of the file (the owner), or
  85:  * arg == the basename of a file given on a command line in the file.
  86:  * If there is a match, all the U (unlink) commands in the command file
  87:  * are executed, and then the command file itself is unlinked.
  88:  */
  89: 
  90: int
  91: delcheck(dfname, arg)
  92:     char *dfname, *arg;
  93: {
  94:     FILE *df = NULL;    /* The command file. */
  95:     int delfile = 0;    /* A match was found, so do a deletion. */
  96:     char line[256];     /* Command line in command file. */
  97: 
  98:     if (strcmp(arg, dfname) == 0)
  99:         delfile = 1;    /* arg == 'dfa12345'. */
 100:     else if (strcmp(arg, dfname+3) == 0)
 101:         delfile = 1;    /* arg == '12345' (skip 'dfa'). */
 102:     else {          /* No match; look inside on command lines. */
 103:         if ((df = fopen(dfname, "r")) == NULL)
 104:             return(0);
 105:         while (!delfile && getline(df, line)) {
 106:             switch (line[0]) {
 107:                 case 'L':
 108:                     /* Check owner name. */
 109:                     if (strcmp(arg, line+1) == 0)
 110:                         delfile = 1;
 111:                     break;
 112: 
 113:                 case 'C':
 114:                 case 'V':
 115:                 case 'F':
 116:                 case 'G':
 117:                 case 'P':
 118:                 case 'T':
 119:                     /* Check command line arg. */
 120:                     if (strcmp (basename(arg), basename(line)) == 0)
 121:                         delfile = 1;
 122:                     break;
 123:             }
 124:         }
 125:     }
 126: 
 127:     if (delfile) {
 128:         if (df == NULL)     /* File not open yet. */
 129:             df = fopen(dfname, "r");
 130:         if (df == NULL)
 131:             return(0);
 132: 
 133:         /* Run through the command file, executing Unlink commands. */
 134:         rewind(df);
 135:         while (getline(df, line)) {
 136:             if (line[0] == 'U')
 137:                 unlink(line+1);
 138:         }
 139: 
 140:         unlink(dfname);     /* Now unlink the command file itself. */
 141:     }
 142: 
 143:     if (df != NULL)
 144:         fclose(df);
 145:     return(delfile);
 146: }
 147: 
 148: 
 149: 
 150: 
 151: getline(file, line)
 152:     FILE *file;
 153:     char *line;
 154: {
 155:     register int i, c;
 156: 
 157:     i = 0;
 158:     while ((c = getc(file)) != '\n') {
 159:         if (c <= 0)
 160:             return(0);
 161:         if (i < 256)
 162:             line[i++] = c;
 163:     }
 164:     line[i++] = 0;
 165:     return (1);
 166: }
 167: 
 168: 
 169: /*
 170:  * basename gets the final component of the given pathname. E.g. "c" in
 171:  * /a/b/c.
 172:  */
 173: 
 174: char *
 175: basename(pathname)
 176:     char *pathname;
 177: {
 178:     register char *lastname;
 179: 
 180:     lastname = pathname + strlen(pathname)-1; /* Move to last char in name. */
 181:     while (lastname >= pathname) {
 182:         if (*lastname == '/')
 183:             return(lastname + 1);
 184:         lastname--;
 185:     }
 186:     return(pathname);       /* No /'s at all. */
 187: }

Defined functions

basename defined in line 174; used 3 times
delcheck defined in line 90; used 1 times
  • in line 64
delete defined in line 32; used 2 times
getline defined in line 151; used 2 times
main defined in line 12; never used

Defined variables

vprmSCCSid defined in line 1; never used
Last modified: 1982-08-09
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 971
Valid CSS Valid XHTML 1.0 Strict