|
|
1.1 ! root 1: #include <sys/types.h> ! 2: #include <dir.h> ! 3: #include <stat.h> ! 4: #include <stdio.h> ! 5: ! 6: char line[128]; ! 7: int linel; ! 8: int wide; ! 9: char *spooldir; ! 10: FILE *df; ! 11: FILE *dfb; ! 12: extern char _sobuf[]; ! 13: ! 14: main(argc, argv) ! 15: int argc; ! 16: char *argv[]; ! 17: { ! 18: register int i; ! 19: register char *ap, *cp; ! 20: int cnt; ! 21: int oldargc; ! 22: char **oldargv; ! 23: ! 24: setbuf(stdout, _sobuf); ! 25: argc--, argv++; ! 26: if (argc == 0) { ! 27: fprintf(stderr, "usage: vprm [ id ... ] [ filename ... ] [ user ... ]\n"); ! 28: exit(1); ! 29: } ! 30: ! 31: ! 32: oldargc = argc; oldargv = argv; ! 33: ! 34: printf("Varian - "); ! 35: if (chdir("/usr/spool/vad") < 0) ! 36: perror("/usr/spool/vad"); ! 37: else { ! 38: df = fopen(".", "r"); ! 39: if (df == NULL) ! 40: perror("/usr/spool/vad"); ! 41: else do { ! 42: clobber(*oldargv++); ! 43: } while (--oldargc); ! 44: } ! 45: ! 46: printf("Versatec - "); ! 47: if (chdir("/usr/spool/vpd") < 0) ! 48: perror("/usr/spool/vpd"); ! 49: else { ! 50: df = fopen(".", "r"); ! 51: if (df == NULL) ! 52: perror("/usr/spool/vpd"); ! 53: else do { ! 54: clobber(*argv++); ! 55: } while (--argc); ! 56: } ! 57: } ! 58: ! 59: clobber(cp) ! 60: char *cp; ! 61: { ! 62: struct dir dirent; ! 63: int did = 0; ! 64: ! 65: rewind(df); ! 66: while (fread(&dirent, sizeof dirent, 1, df) == 1) { ! 67: if (dirent.d_ino == 0) ! 68: continue; ! 69: if (dirent.d_name[0] != 'd' || dirent.d_name[1] != 'f') ! 70: continue; ! 71: if (dirent.d_name[7] == 0 || dirent.d_name[8] != 0) ! 72: continue; ! 73: if (chkclob(cp, dirent.d_name)) { ! 74: did++; ! 75: printf("removing %s\n", dirent.d_name+3); ! 76: unlink(dirent.d_name); ! 77: dirent.d_name[0] = 'c'; unlink(dirent.d_name); ! 78: dirent.d_name[2] = 'b'; unlink(dirent.d_name); ! 79: dirent.d_name[2] = 'a'; ! 80: dirent.d_name[0] = 'l'; unlink(dirent.d_name); ! 81: dirent.d_name[0] = 't'; unlink(dirent.d_name); ! 82: dirent.d_name[0] = 'd'; ! 83: } ! 84: } ! 85: if (did == 0) ! 86: printf("%s: nothing to remove\n", cp); ! 87: } ! 88: ! 89: chkclob(pattern, file) ! 90: char *pattern, *file; ! 91: { ! 92: register char *id = pattern; ! 93: ! 94: /* ! 95: * Quick check for matching id ! 96: */ ! 97: if (any(id[0], "cd") && id[1] == 'f' && id[2] == 'a') ! 98: id += 3; ! 99: if (strcmp(file+3, id) == 0) ! 100: return (1); ! 101: /* ! 102: * Now check for matching filename 'B', 'F' or id 'L' ! 103: */ ! 104: dfb = fopen(file, "r"); ! 105: if (dfb == NULL) ! 106: return (0); ! 107: while (getline()) switch (line[0]) { ! 108: ! 109: case 'L': ! 110: case 'B': ! 111: case 'F': ! 112: case 'T': ! 113: if (strcmp(line+1, pattern) == 0) { ! 114: fclose(dfb); ! 115: return (1); ! 116: } ! 117: continue; ! 118: } ! 119: fclose(dfb); ! 120: return (0); ! 121: } ! 122: ! 123: any(c, cp) ! 124: char c; ! 125: register char *cp; ! 126: { ! 127: ! 128: while (*cp) ! 129: if (c == *cp++) ! 130: return (1); ! 131: return (0); ! 132: } ! 133: ! 134: getline() ! 135: { ! 136: register int i, c; ! 137: ! 138: i = 0; ! 139: while ((c = getc(dfb)) != '\n') { ! 140: if (c <= 0) ! 141: return(0); ! 142: if (i < 100) ! 143: line[i++] = c; ! 144: } ! 145: line[i++] = 0; ! 146: return (1); ! 147: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.