|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <ctype.h> ! 3: #include <sys/diskio.h> ! 4: ! 5: main(argc, argv) ! 6: int argc; ! 7: char **argv; ! 8: { ! 9: ! 10: if (argc > 2 && strcmp(argv[1], "-f") == 0) ! 11: exit(filepart(argv[2])); ! 12: if (argc < 2) { ! 13: fprintf(stderr, "usage: setpart device firstblock [size]\n"); ! 14: fprintf(stderr, "\tor setpart -f file\n"); ! 15: exit(1); ! 16: } ! 17: exit(setpart(argc-1, argv+1)); ! 18: } ! 19: ! 20: filepart(file) ! 21: char *file; ! 22: { ! 23: FILE *fp; ! 24: char line[100]; /* arbitrarily large */ ! 25: char *args[4]; ! 26: int nargs; ! 27: int status; ! 28: ! 29: if ((fp = fopen(file, "r")) == NULL) { ! 30: fprintf(stderr, "%s: cannot open\n"); ! 31: return (1); ! 32: } ! 33: status = 0; ! 34: while (fgets(line, sizeof(line), fp) != NULL) { ! 35: if (line[0] == '#') ! 36: continue; ! 37: if ((nargs = getmfields(line, args, 4)) < 2) ! 38: continue; ! 39: if (setpart(nargs, args)) ! 40: status = 1; ! 41: } ! 42: fclose(fp); ! 43: return (status); ! 44: } ! 45: ! 46: setpart(n, arg) ! 47: int n; ! 48: char **arg; ! 49: { ! 50: int fd; ! 51: long parts[2]; ! 52: long atol(); ! 53: ! 54: if (n < 1) { ! 55: fprintf(stderr, "internal: too few args\n"); ! 56: return (1); ! 57: } ! 58: if ((fd = open(arg[0], 1)) < 0) { ! 59: perror(arg[0]); ! 60: return (1); ! 61: } ! 62: if (n < 2) { ! 63: if (ioctl(fd, DIOGSIZ, parts) < 0) { ! 64: perror(arg[0]); ! 65: close(fd); ! 66: return (1); ! 67: } ! 68: printf("%s\t%ld\t\%ld\n", arg[0], parts[0], parts[1]); ! 69: } else { ! 70: if (!isdigit(arg[1][0])) { ! 71: fprintf(stderr, "%s: bad firstblock %s\n", arg[0], arg[1]); ! 72: close(fd); ! 73: return (1); ! 74: } ! 75: if (n > 2 && !isdigit(arg[2][0])) { ! 76: fprintf(stderr, "%s: bad nblock %s\n", arg[0], arg[2]); ! 77: close(fd); ! 78: return (1); ! 79: } ! 80: parts[0] = atol(arg[1]); ! 81: if (n > 2) ! 82: parts[1] = atoi(arg[2]); ! 83: else ! 84: parts[1] = 0x7fffffff; /* huge */ ! 85: if (ioctl(fd, DIOSSIZ, parts) < 0) { ! 86: perror(arg[0]); ! 87: close(fd); ! 88: return (1); ! 89: } ! 90: } ! 91: close(fd); ! 92: return (0); ! 93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.