|
|
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.