|
|
1.1 ! root 1: #include "asd.h" ! 2: ! 3: getargs (argc, argv, optkey, func) ! 4: int argc; ! 5: char **argv; ! 6: char *optkey; ! 7: int (*func)(); ! 8: { ! 9: register int c; ! 10: int rc = 0; ! 11: ! 12: while ((c = getopt (argc, argv, optkey)) != EOF) { ! 13: register struct replist *rl; ! 14: register char *p, *q; ! 15: ! 16: switch (c) { ! 17: ! 18: case 'b': ! 19: bflag++; ! 20: break; ! 21: ! 22: case 'k': ! 23: kflag++; ! 24: break; ! 25: ! 26: case 'n': ! 27: nflag++; ! 28: break; ! 29: ! 30: case 'v': ! 31: vflag++; ! 32: break; ! 33: ! 34: case 'x': ! 35: if (xstr) { ! 36: fprintf (stderr, "duplicate -x ignored\n"); ! 37: rc++; ! 38: } else if (Xstr) { ! 39: fprintf (stderr, "cannot have both -x and -X\n"); ! 40: rc++; ! 41: } else ! 42: xstr = optarg; ! 43: break; ! 44: ! 45: case 'X': ! 46: if (Xstr) { ! 47: fprintf (stderr, "duplicate -X ignored\n"); ! 48: rc++; ! 49: } else if (xstr) { ! 50: fprintf (stderr, "cannot have both -x and -X\n"); ! 51: rc++; ! 52: } else ! 53: Xstr = copy (transname (optarg)); ! 54: break; ! 55: ! 56: case 'D': ! 57: p = strchr (optarg, '='); ! 58: if (p == NULL) { ! 59: fprintf (stderr, "invalid option %s\n", optarg); ! 60: exit (1); ! 61: } ! 62: rl = new (struct replist); ! 63: ! 64: /* copy the pathname to rl->source */ ! 65: rl->source = alloc ((unsigned) (p - optarg + 1)); ! 66: p = rl->source; ! 67: q = optarg; ! 68: while (*q != '=') ! 69: *p++ = *q++; ! 70: *p = '\0'; ! 71: ! 72: /* now expand rl->source */ ! 73: p = rl->source; ! 74: rl->source = copy (fullname (p)); ! 75: free (p); ! 76: ! 77: /* expand rl->dest */ ! 78: rl->dest = copy (fullname (q + 1)); ! 79: ! 80: /* link rl into the chain */ ! 81: rl->link = replist; ! 82: replist = rl; ! 83: break; ! 84: ! 85: case 'K': ! 86: Kflag++; ! 87: keyfile = optarg; ! 88: break; ! 89: ! 90: case '?': ! 91: default: ! 92: rc++; ! 93: break; ! 94: } ! 95: } ! 96: ! 97: if (rc) { ! 98: fprintf (stderr, "%s: bad argument\n", argv[0]); ! 99: exit (rc); ! 100: } ! 101: ! 102: if (kflag && Kflag) { ! 103: fprintf (stderr, "%s: cannot specify both k and K\n", argv[0]); ! 104: exit (1); ! 105: } ! 106: ! 107: /* read key from terminal if requested */ ! 108: if (kflag) { ! 109: register char *p; ! 110: p = getpass ("Key:"); ! 111: ! 112: /* a null key is treated as no key at all */ ! 113: if (p && *p) ! 114: setup (p); ! 115: else ! 116: kflag = 0; ! 117: } ! 118: ! 119: /* read key from file if requested */ ! 120: if (Kflag) { ! 121: char key[100]; ! 122: register FILE *kf; ! 123: register char *p; ! 124: ! 125: /* try to open the file */ ! 126: kf = fopen (keyfile, "r"); ! 127: if (kf == NULL) { ! 128: perror (keyfile); ! 129: exit (1); ! 130: } ! 131: ! 132: /* read the first line */ ! 133: p = fgets (key, sizeof (key), kf); ! 134: ! 135: fclose (kf); ! 136: ! 137: /* if EOF, assume no key */ ! 138: if (p == NULL) { ! 139: Kflag = 0; ! 140: } else { ! 141: ! 142: /* delete the trailing newline */ ! 143: p = key; ! 144: while (*p != '\n' && *p != '\0') ! 145: p++; ! 146: *p = '\0'; ! 147: ! 148: /* if the key is empty, assume no key */ ! 149: if (key[0] == '\0') ! 150: Kflag = 0; ! 151: else ! 152: setup (key); ! 153: } ! 154: } ! 155: ! 156: if (func) { ! 157: /* process the arguments */ ! 158: if (optind >= argc) ! 159: rc = (*func) (stdin, "standard input"); ! 160: else { ! 161: register int i; ! 162: for (i = optind; i < argc; i++) { ! 163: register char *fn = argv[i]; ! 164: register FILE *f = fopen (fn, "r"); ! 165: if (f) { ! 166: rc += (*func) (f, argv[i]); ! 167: fclose (f); ! 168: } else { ! 169: fprintf (stderr, "%s: can't open %s\n", argv[0], fn); ! 170: rc++; ! 171: } ! 172: } ! 173: } ! 174: } ! 175: ! 176: return rc; ! 177: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.