diff options
author | erik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2000-02-08 19:58:47 +0000 |
---|---|---|
committer | erik <erik@69ca8d6d-28ef-0310-b511-8ec308f3f277> | 2000-02-08 19:58:47 +0000 |
commit | a18125005d67c38a8ad7fb454571bb996664ad96 (patch) | |
tree | c90bda10731ad9333ce3b404f993354c9fc104b8 /util-linux | |
parent | 8ef3b44285a8ce5b83bed9cf32ce5f40b30ba72f (diff) | |
download | busybox-w32-a18125005d67c38a8ad7fb454571bb996664ad96.tar.gz busybox-w32-a18125005d67c38a8ad7fb454571bb996664ad96.tar.bz2 busybox-w32-a18125005d67c38a8ad7fb454571bb996664ad96.zip |
Some formatting updates (ran the code through indent)
-Erik
git-svn-id: svn://busybox.net/trunk/busybox@357 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/dmesg.c | 160 | ||||
-rw-r--r-- | util-linux/fbset.c | 360 | ||||
-rw-r--r-- | util-linux/fdflush.c | 36 | ||||
-rw-r--r-- | util-linux/fsck_minix.c | 716 | ||||
-rw-r--r-- | util-linux/mkfs_minix.c | 499 | ||||
-rw-r--r-- | util-linux/mkswap.c | 197 | ||||
-rw-r--r-- | util-linux/more.c | 199 | ||||
-rw-r--r-- | util-linux/mount.c | 581 | ||||
-rw-r--r-- | util-linux/nfsmount.c | 933 | ||||
-rw-r--r-- | util-linux/nfsmount.h | 1 | ||||
-rw-r--r-- | util-linux/swaponoff.c | 131 | ||||
-rw-r--r-- | util-linux/umount.c | 291 |
12 files changed, 2091 insertions, 2013 deletions
diff --git a/util-linux/dmesg.c b/util-linux/dmesg.c index e38fd5555..bbed8221a 100644 --- a/util-linux/dmesg.c +++ b/util-linux/dmesg.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* dmesg.c -- Print out the contents of the kernel ring buffer | 2 | /* dmesg.c -- Print out the contents of the kernel ring buffer |
2 | * Created: Sat Oct 9 16:19:47 1993 | 3 | * Created: Sat Oct 9 16:19:47 1993 |
3 | * Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu | 4 | * Revised: Thu Oct 28 21:52:17 1993 by faith@cs.unc.edu |
@@ -24,8 +25,8 @@ | |||
24 | 25 | ||
25 | #ifndef __alpha__ | 26 | #ifndef __alpha__ |
26 | # define __NR_klogctl __NR_syslog | 27 | # define __NR_klogctl __NR_syslog |
27 | static inline _syscall3(int, klogctl, int, type, char *, b, int, len); | 28 | static inline _syscall3(int, klogctl, int, type, char *, b, int, len); |
28 | #else /* __alpha__ */ | 29 | #else /* __alpha__ */ |
29 | #define klogctl syslog | 30 | #define klogctl syslog |
30 | #endif | 31 | #endif |
31 | 32 | ||
@@ -35,90 +36,91 @@ | |||
35 | 36 | ||
36 | static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n"; | 37 | static const char dmesg_usage[] = "dmesg [-c] [-n level] [-s bufsize]\n"; |
37 | 38 | ||
38 | int dmesg_main( int argc, char** argv ) | 39 | int dmesg_main(int argc, char **argv) |
39 | { | 40 | { |
40 | char *buf; | 41 | char *buf; |
41 | int bufsize=8196; | 42 | int bufsize = 8196; |
42 | int i; | 43 | int i; |
43 | int n; | 44 | int n; |
44 | int level = 0; | 45 | int level = 0; |
45 | int lastc; | 46 | int lastc; |
46 | int cmd = 3; | 47 | int cmd = 3; |
47 | int stopDoingThat; | 48 | int stopDoingThat; |
48 | 49 | ||
49 | argc--; | 50 | argc--; |
50 | argv++; | 51 | argv++; |
51 | 52 | ||
52 | /* Parse any options */ | 53 | /* Parse any options */ |
53 | while (argc && **argv == '-') { | 54 | while (argc && **argv == '-') { |
54 | stopDoingThat = FALSE; | 55 | stopDoingThat = FALSE; |
55 | while (stopDoingThat == FALSE && *++(*argv)) { | 56 | while (stopDoingThat == FALSE && *++(*argv)) { |
56 | switch (**argv) { | 57 | switch (**argv) { |
57 | case 'c': | 58 | case 'c': |
58 | cmd = 4; | 59 | cmd = 4; |
59 | break; | 60 | break; |
60 | case 'n': | 61 | case 'n': |
61 | cmd = 8; | 62 | cmd = 8; |
62 | if (--argc == 0) | 63 | if (--argc == 0) |
63 | goto end; | 64 | goto end; |
64 | level = atoi (*(++argv)); | 65 | level = atoi(*(++argv)); |
65 | if (--argc > 0) | 66 | if (--argc > 0) |
66 | ++argv; | 67 | ++argv; |
67 | stopDoingThat = TRUE; | 68 | stopDoingThat = TRUE; |
68 | break; | 69 | break; |
69 | case 's': | 70 | case 's': |
70 | if (--argc == 0) | 71 | if (--argc == 0) |
71 | goto end; | 72 | goto end; |
72 | bufsize = atoi (*(++argv)); | 73 | bufsize = atoi(*(++argv)); |
73 | if (--argc > 0) | 74 | if (--argc > 0) |
74 | ++argv; | 75 | ++argv; |
75 | stopDoingThat = TRUE; | 76 | stopDoingThat = TRUE; |
76 | break; | 77 | break; |
77 | default: | 78 | default: |
79 | goto end; | ||
80 | } | ||
81 | } | ||
82 | } | ||
83 | |||
84 | if (argc > 1) { | ||
78 | goto end; | 85 | goto end; |
79 | } | ||
80 | } | 86 | } |
81 | } | ||
82 | |||
83 | if (argc > 1) { | ||
84 | goto end; | ||
85 | } | ||
86 | 87 | ||
87 | if (cmd == 8) { | 88 | if (cmd == 8) { |
88 | n = klogctl( cmd, NULL, level ); | 89 | n = klogctl(cmd, NULL, level); |
89 | if (n < 0) { | 90 | if (n < 0) { |
90 | goto klogctl_error; | 91 | goto klogctl_error; |
91 | } | 92 | } |
92 | exit( TRUE ); | 93 | exit(TRUE); |
93 | } | 94 | } |
94 | 95 | ||
95 | if (bufsize < 4096) bufsize = 4096; | 96 | if (bufsize < 4096) |
96 | buf = (char*)malloc(bufsize); | 97 | bufsize = 4096; |
97 | n = klogctl( cmd, buf, bufsize ); | 98 | buf = (char *) malloc(bufsize); |
98 | if (n < 0) { | 99 | n = klogctl(cmd, buf, bufsize); |
99 | goto klogctl_error; | 100 | if (n < 0) { |
100 | } | 101 | goto klogctl_error; |
102 | } | ||
101 | 103 | ||
102 | lastc = '\n'; | 104 | lastc = '\n'; |
103 | for (i = 0; i < n; i++) { | 105 | for (i = 0; i < n; i++) { |
104 | if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { | 106 | if ((i == 0 || buf[i - 1] == '\n') && buf[i] == '<') { |
105 | i++; | 107 | i++; |
106 | while (buf[i] >= '0' && buf[i] <= '9') | 108 | while (buf[i] >= '0' && buf[i] <= '9') |
107 | i++; | 109 | i++; |
108 | if (buf[i] == '>') | 110 | if (buf[i] == '>') |
109 | i++; | 111 | i++; |
110 | } | 112 | } |
111 | lastc = buf[i]; | 113 | lastc = buf[i]; |
112 | putchar( lastc ); | 114 | putchar(lastc); |
113 | } | 115 | } |
114 | if (lastc != '\n') | 116 | if (lastc != '\n') |
115 | putchar( '\n' ); | 117 | putchar('\n'); |
116 | exit( TRUE); | 118 | exit(TRUE); |
117 | end: | 119 | end: |
118 | usage( dmesg_usage); | 120 | usage(dmesg_usage); |
119 | exit (FALSE); | 121 | exit(FALSE); |
120 | klogctl_error: | 122 | klogctl_error: |
121 | perror( "klogctl" ); | 123 | perror("klogctl"); |
122 | exit( FALSE ); | 124 | exit(FALSE); |
123 | 125 | ||
124 | } | 126 | } |
diff --git a/util-linux/fbset.c b/util-linux/fbset.c index c29145e51..a75e431db 100644 --- a/util-linux/fbset.c +++ b/util-linux/fbset.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini fbset implementation for busybox | 3 | * Mini fbset implementation for busybox |
3 | * | 4 | * |
@@ -48,7 +49,7 @@ | |||
48 | #define OPT_READMODE (1 << 2) | 49 | #define OPT_READMODE (1 << 2) |
49 | 50 | ||
50 | #define CMD_HELP 0 | 51 | #define CMD_HELP 0 |
51 | #define CMD_FB 1 | 52 | #define CMD_FB 1 |
52 | #define CMD_DB 2 | 53 | #define CMD_DB 2 |
53 | #define CMD_GEOMETRY 3 | 54 | #define CMD_GEOMETRY 3 |
54 | #define CMD_TIMING 4 | 55 | #define CMD_TIMING 4 |
@@ -87,213 +88,242 @@ | |||
87 | static unsigned int g_options = 0; | 88 | static unsigned int g_options = 0; |
88 | 89 | ||
89 | struct cmdoptions_t { | 90 | struct cmdoptions_t { |
90 | char *name; | 91 | char *name; |
91 | unsigned char param_count; | 92 | unsigned char param_count; |
92 | unsigned char code; | 93 | unsigned char code; |
93 | } g_cmdoptions[] = { | 94 | } g_cmdoptions[] = { |
94 | { "-h", 0, CMD_HELP }, | 95 | { |
95 | { "-fb", 1, CMD_FB }, | 96 | "-h", 0, CMD_HELP}, { |
96 | { "-db", 1, CMD_DB }, | 97 | "-fb", 1, CMD_FB}, { |
97 | { "-a", 0, CMD_ALL }, | 98 | "-db", 1, CMD_DB}, { |
98 | { "-i", 0, CMD_INFO }, | 99 | "-a", 0, CMD_ALL}, { |
99 | { "-g", 5, CMD_GEOMETRY }, | 100 | "-i", 0, CMD_INFO}, { |
100 | { "-t", 7, CMD_TIMING }, | 101 | "-g", 5, CMD_GEOMETRY}, { |
101 | { "-accel", 1, CMD_ACCEL }, | 102 | "-t", 7, CMD_TIMING}, { |
102 | { "-hsync", 1, CMD_HSYNC }, | 103 | "-accel", 1, CMD_ACCEL}, { |
103 | { "-vsync", 1, CMD_VSYNC }, | 104 | "-hsync", 1, CMD_HSYNC}, { |
104 | { "-laced", 1, CMD_LACED }, | 105 | "-vsync", 1, CMD_VSYNC}, { |
105 | { "-double", 1, CMD_DOUBLE }, | 106 | "-laced", 1, CMD_LACED}, { |
106 | 107 | "-double", 1, CMD_DOUBLE}, | |
107 | #ifdef BB_FBSET_FANCY | 108 | #ifdef BB_FBSET_FANCY |
108 | { "--help", 0, CMD_HELP }, | 109 | { |
109 | { "-all", 0, CMD_ALL }, | 110 | "--help", 0, CMD_HELP}, { |
110 | { "-xres", 1, CMD_XRES }, | 111 | "-all", 0, CMD_ALL}, { |
111 | { "-yres", 1, CMD_YRES }, | 112 | "-xres", 1, CMD_XRES}, { |
112 | { "-vxres", 1, CMD_VXRES }, | 113 | "-yres", 1, CMD_YRES}, { |
113 | { "-vyres", 1, CMD_VYRES }, | 114 | "-vxres", 1, CMD_VXRES}, { |
114 | { "-depth", 1, CMD_DEPTH }, | 115 | "-vyres", 1, CMD_VYRES}, { |
115 | { "-match", 0, CMD_MATCH }, | 116 | "-depth", 1, CMD_DEPTH}, { |
116 | { "--geometry", 5, CMD_GEOMETRY }, | 117 | "-match", 0, CMD_MATCH}, { |
117 | 118 | "--geometry", 5, CMD_GEOMETRY}, { | |
118 | { "-pixclock", 1, CMD_PIXCLOCK }, | 119 | "-pixclock", 1, CMD_PIXCLOCK}, { |
119 | { "-left", 1, CMD_LEFT }, | 120 | "-left", 1, CMD_LEFT}, { |
120 | { "-right", 1, CMD_RIGHT }, | 121 | "-right", 1, CMD_RIGHT}, { |
121 | { "-upper", 1, CMD_UPPER }, | 122 | "-upper", 1, CMD_UPPER}, { |
122 | { "-lower", 1, CMD_LOWER }, | 123 | "-lower", 1, CMD_LOWER}, { |
123 | { "-hslen", 1, CMD_HSLEN }, | 124 | "-hslen", 1, CMD_HSLEN}, { |
124 | { "-vslen", 1, CMD_VSLEN }, | 125 | "-vslen", 1, CMD_VSLEN}, { |
125 | { "--timings", 7, CMD_TIMING }, | 126 | "--timings", 7, CMD_TIMING}, { |
126 | 127 | "-csync", 1, CMD_CSYNC}, { | |
127 | { "-csync", 1, CMD_CSYNC }, | 128 | "-gsync", 1, CMD_GSYNC}, { |
128 | { "-gsync", 1, CMD_GSYNC }, | 129 | "-extsync", 1, CMD_EXTSYNC}, { |
129 | { "-extsync", 1, CMD_EXTSYNC }, | 130 | "-bcast", 1, CMD_BCAST}, { |
130 | { "-bcast", 1, CMD_BCAST }, | 131 | "-rgba", 1, CMD_RGBA}, { |
131 | { "-rgba", 1, CMD_RGBA }, | 132 | "-step", 1, CMD_STEP}, { |
132 | { "-step", 1, CMD_STEP }, | 133 | "-move", 1, CMD_MOVE}, |
133 | { "-move", 1, CMD_MOVE }, | ||
134 | #endif | 134 | #endif |
135 | { 0, 0, 0 } | 135 | { |
136 | 0, 0, 0} | ||
136 | }; | 137 | }; |
137 | 138 | ||
138 | static int readmode(struct fb_var_screeninfo *base, const char *fn, | 139 | static int readmode(struct fb_var_screeninfo *base, const char *fn, |
139 | const char *mode) | 140 | const char *mode) |
140 | { | 141 | { |
141 | #ifdef BB_FBSET_READMODE | 142 | #ifdef BB_FBSET_READMODE |
142 | FILE *f; | 143 | FILE *f; |
143 | char buf[256]; | 144 | char buf[256]; |
144 | char *p = buf; | 145 | char *p = buf; |
145 | 146 | ||
146 | if ((f = fopen(fn, "r")) == NULL) PERROR("readmode(fopen)"); | 147 | if ((f = fopen(fn, "r")) == NULL) |
147 | while (!feof(f)) { | 148 | PERROR("readmode(fopen)"); |
148 | fgets(buf, sizeof(buf), f); | 149 | while (!feof(f)) { |
149 | if ((p = strstr(buf, "mode ")) || (p = strstr(buf, "mode\t"))) { | 150 | fgets(buf, sizeof(buf), f); |
150 | p += 5; | 151 | if ((p = strstr(buf, "mode ")) || (p = strstr(buf, "mode\t"))) { |
151 | if ((p = strstr(buf, mode))) { | 152 | p += 5; |
152 | p += strlen(mode); | 153 | if ((p = strstr(buf, mode))) { |
153 | if (!isspace(*p) && (*p != 0) && (*p != '"') && (*p != '\r') | 154 | p += strlen(mode); |
154 | && (*p != '\n')) continue; /* almost, but not quite */ | 155 | if (!isspace(*p) && (*p != 0) && (*p != '"') |
155 | while (!feof(f)) { | 156 | && (*p != '\r') && (*p != '\n')) |
156 | fgets(buf, sizeof(buf), f); | 157 | continue; /* almost, but not quite */ |
157 | if (!strstr(buf, "endmode")) return 1; | 158 | while (!feof(f)) { |
159 | fgets(buf, sizeof(buf), f); | ||
160 | if (!strstr(buf, "endmode")) | ||
161 | return 1; | ||
162 | } | ||
163 | } | ||
158 | } | 164 | } |
159 | } | ||
160 | } | 165 | } |
161 | } | ||
162 | #else | 166 | #else |
163 | fprintf(stderr, "W: mode reading was disabled on this copy of fbset; ignoring request\n"); | 167 | fprintf(stderr, |
168 | "W: mode reading was disabled on this copy of fbset; ignoring request\n"); | ||
164 | #endif | 169 | #endif |
165 | return 0; | 170 | return 0; |
166 | } | 171 | } |
167 | 172 | ||
168 | static void setmode(struct fb_var_screeninfo *base, | 173 | static void setmode(struct fb_var_screeninfo *base, |
169 | struct fb_var_screeninfo *set) | 174 | struct fb_var_screeninfo *set) |
170 | { | 175 | { |
171 | if ((int)set->xres > 0) base->xres = set->xres; | 176 | if ((int) set->xres > 0) |
172 | if ((int)set->yres > 0) base->yres = set->yres; | 177 | base->xres = set->xres; |
173 | if ((int)set->xres_virtual > 0) base->xres_virtual = set->xres_virtual; | 178 | if ((int) set->yres > 0) |
174 | if ((int)set->yres_virtual > 0) base->yres_virtual = set->yres_virtual; | 179 | base->yres = set->yres; |
175 | if ((int)set->bits_per_pixel > 0) base->bits_per_pixel = set->bits_per_pixel; | 180 | if ((int) set->xres_virtual > 0) |
181 | base->xres_virtual = set->xres_virtual; | ||
182 | if ((int) set->yres_virtual > 0) | ||
183 | base->yres_virtual = set->yres_virtual; | ||
184 | if ((int) set->bits_per_pixel > 0) | ||
185 | base->bits_per_pixel = set->bits_per_pixel; | ||
176 | } | 186 | } |
177 | 187 | ||
178 | static void showmode(struct fb_var_screeninfo *v) | 188 | static void showmode(struct fb_var_screeninfo *v) |
179 | { | 189 | { |
180 | double drate = 0, hrate = 0, vrate = 0; | 190 | double drate = 0, hrate = 0, vrate = 0; |
181 | if (v->pixclock) { | 191 | |
182 | drate = 1e12 / v->pixclock; | 192 | if (v->pixclock) { |
183 | hrate = drate / (v->left_margin+v->xres+v->right_margin+v->hsync_len); | 193 | drate = 1e12 / v->pixclock; |
184 | vrate = hrate / (v->upper_margin+v->yres+v->lower_margin+v->vsync_len); | 194 | hrate = |
185 | } | 195 | drate / (v->left_margin + v->xres + v->right_margin + |
186 | printf("\nmode \"%ux%u-%u\"\n", v->xres, v->yres, (int)(vrate+0.5)); | 196 | v->hsync_len); |
197 | vrate = | ||
198 | hrate / (v->upper_margin + v->yres + v->lower_margin + | ||
199 | v->vsync_len); | ||
200 | } | ||
201 | printf("\nmode \"%ux%u-%u\"\n", v->xres, v->yres, (int) (vrate + 0.5)); | ||
187 | #ifdef BB_FBSET_FANCY | 202 | #ifdef BB_FBSET_FANCY |
188 | printf("\t# D: %.3f MHz, H: %.3f kHz, V: %.3f Hz\n", drate/1e6, hrate/1e3, | 203 | printf("\t# D: %.3f MHz, H: %.3f kHz, V: %.3f Hz\n", drate / 1e6, |
189 | vrate); | 204 | hrate / 1e3, vrate); |
190 | #endif | 205 | #endif |
191 | printf("\tgeometry %u %u %u %u %u\n", v->xres, v->yres, | 206 | printf("\tgeometry %u %u %u %u %u\n", v->xres, v->yres, |
192 | v->xres_virtual, v->yres_virtual, v->bits_per_pixel); | 207 | v->xres_virtual, v->yres_virtual, v->bits_per_pixel); |
193 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) | 208 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) |
194 | printf("\ttimings %u %u %u %u %u %u %u\n", v->pixclock, v->left_margin, | 209 | printf("\ttimings %u %u %u %u %u %u %u\n", v->pixclock, v->left_margin, |
195 | v->right_margin, v->upper_margin, v->lower_margin, v->hsync_len, | 210 | v->right_margin, v->upper_margin, v->lower_margin, v->hsync_len, |
196 | v->vsync_len); | 211 | v->vsync_len); |
197 | printf("\taccel %s\n", (v->accel_flags > 0 ? "true" : "false")); | 212 | printf("\taccel %s\n", (v->accel_flags > 0 ? "true" : "false")); |
198 | #else | 213 | #else |
199 | printf("\ttimings %lu %lu %lu %lu %lu %lu %lu\n", v->pixclock, v->left_margin, | 214 | printf("\ttimings %lu %lu %lu %lu %lu %lu %lu\n", v->pixclock, |
200 | v->right_margin, v->upper_margin, v->lower_margin, v->hsync_len, | 215 | v->left_margin, v->right_margin, v->upper_margin, |
201 | v->vsync_len); | 216 | v->lower_margin, v->hsync_len, v->vsync_len); |
202 | #endif | 217 | #endif |
203 | printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length, v->red.offset, | 218 | printf("\trgba %u/%u,%u/%u,%u/%u,%u/%u\n", v->red.length, |
204 | v->green.length, v->green.offset, v->blue.length, v->blue.offset, | 219 | v->red.offset, v->green.length, v->green.offset, v->blue.length, |
205 | v->transp.length, v->transp.offset); | 220 | v->blue.offset, v->transp.length, v->transp.offset); |
206 | printf("endmode\n"); | 221 | printf("endmode\n"); |
207 | } | 222 | } |
208 | 223 | ||
209 | static void fbset_usage(void) | 224 | static void fbset_usage(void) |
210 | { | 225 | { |
211 | int i; | 226 | int i; |
227 | |||
212 | #ifndef STANDALONE | 228 | #ifndef STANDALONE |
213 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", BB_VER, BB_BT); | 229 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", |
230 | BB_VER, BB_BT); | ||
214 | #endif | 231 | #endif |
215 | fprintf(stderr, "Usage: fbset [options] [mode]\n"); | 232 | fprintf(stderr, "Usage: fbset [options] [mode]\n"); |
216 | fprintf(stderr, "\tThe following options are recognized:\n"); | 233 | fprintf(stderr, "\tThe following options are recognized:\n"); |
217 | for (i = 0; g_cmdoptions[i].name; i++) | 234 | for (i = 0; g_cmdoptions[i].name; i++) |
218 | fprintf(stderr, "\t\t%s\n", g_cmdoptions[i].name); | 235 | fprintf(stderr, "\t\t%s\n", g_cmdoptions[i].name); |
219 | exit(-1); | 236 | exit(-1); |
220 | } | 237 | } |
221 | 238 | ||
222 | #ifdef STANDALONE | 239 | #ifdef STANDALONE |
223 | int main(int argc, char **argv) | 240 | int main(int argc, char **argv) |
224 | #else | 241 | #else |
225 | extern int fbset_main(int argc, char **argv) | 242 | extern int fbset_main(int argc, char **argv) |
226 | #endif | 243 | #endif |
227 | { | 244 | { |
228 | struct fb_var_screeninfo var, varset; | 245 | struct fb_var_screeninfo var, varset; |
229 | int fh, i; | 246 | int fh, i; |
230 | char *fbdev = DEFAULTFBDEV; | 247 | char *fbdev = DEFAULTFBDEV; |
231 | char *modefile = DEFAULTFBMODE; | 248 | char *modefile = DEFAULTFBMODE; |
232 | char *thisarg, *mode = NULL; | 249 | char *thisarg, *mode = NULL; |
250 | |||
251 | memset(&varset, 0xFF, sizeof(varset)); | ||
233 | 252 | ||
234 | memset(&varset, 0xFF, sizeof(varset)); | 253 | /* parse cmd args.... why do they have to make things so difficult? */ |
235 | 254 | argv++; | |
236 | /* parse cmd args.... why do they have to make things so difficult? */ | 255 | argc--; |
237 | argv++; argc--; | 256 | for (; argc > 0 && (thisarg = *argv); argc--, argv++) { |
238 | for (; argc > 0 && (thisarg = *argv); argc--, argv++) { | 257 | for (i = 0; g_cmdoptions[i].name; i++) { |
239 | for (i = 0; g_cmdoptions[i].name; i++) { | 258 | if (!strcmp(thisarg, g_cmdoptions[i].name)) { |
240 | if (!strcmp(thisarg, g_cmdoptions[i].name)) { | 259 | if (argc - 1 < g_cmdoptions[i].param_count) |
241 | if (argc - 1 < g_cmdoptions[i].param_count) fbset_usage(); | 260 | fbset_usage(); |
242 | switch (g_cmdoptions[i].code) { | 261 | switch (g_cmdoptions[i].code) { |
243 | case CMD_HELP: fbset_usage(); | 262 | case CMD_HELP: |
244 | case CMD_FB: fbdev = argv[1]; break; | 263 | fbset_usage(); |
245 | case CMD_DB: modefile = argv[1]; break; | 264 | case CMD_FB: |
246 | case CMD_GEOMETRY: | 265 | fbdev = argv[1]; |
247 | varset.xres = strtoul(argv[1],0,0); | 266 | break; |
248 | varset.yres = strtoul(argv[2],0,0); | 267 | case CMD_DB: |
249 | varset.xres_virtual = strtoul(argv[3],0,0); | 268 | modefile = argv[1]; |
250 | varset.yres_virtual = strtoul(argv[4],0,0); | 269 | break; |
251 | varset.bits_per_pixel = strtoul(argv[5],0,0); | 270 | case CMD_GEOMETRY: |
252 | break; | 271 | varset.xres = strtoul(argv[1], 0, 0); |
253 | case CMD_TIMING: | 272 | varset.yres = strtoul(argv[2], 0, 0); |
254 | varset.pixclock = strtoul(argv[1],0,0); | 273 | varset.xres_virtual = strtoul(argv[3], 0, 0); |
255 | varset.left_margin = strtoul(argv[2],0,0); | 274 | varset.yres_virtual = strtoul(argv[4], 0, 0); |
256 | varset.right_margin = strtoul(argv[3],0,0); | 275 | varset.bits_per_pixel = strtoul(argv[5], 0, 0); |
257 | varset.upper_margin = strtoul(argv[4],0,0); | 276 | break; |
258 | varset.lower_margin = strtoul(argv[5],0,0); | 277 | case CMD_TIMING: |
259 | varset.hsync_len = strtoul(argv[6],0,0); | 278 | varset.pixclock = strtoul(argv[1], 0, 0); |
260 | varset.vsync_len = strtoul(argv[7],0,0); | 279 | varset.left_margin = strtoul(argv[2], 0, 0); |
261 | break; | 280 | varset.right_margin = strtoul(argv[3], 0, 0); |
281 | varset.upper_margin = strtoul(argv[4], 0, 0); | ||
282 | varset.lower_margin = strtoul(argv[5], 0, 0); | ||
283 | varset.hsync_len = strtoul(argv[6], 0, 0); | ||
284 | varset.vsync_len = strtoul(argv[7], 0, 0); | ||
285 | break; | ||
262 | #ifdef BB_FBSET_FANCY | 286 | #ifdef BB_FBSET_FANCY |
263 | case CMD_XRES: varset.xres = strtoul(argv[1],0,0); break; | 287 | case CMD_XRES: |
264 | case CMD_YRES: varset.yres = strtoul(argv[1],0,0); break; | 288 | varset.xres = strtoul(argv[1], 0, 0); |
289 | break; | ||
290 | case CMD_YRES: | ||
291 | varset.yres = strtoul(argv[1], 0, 0); | ||
292 | break; | ||
265 | #endif | 293 | #endif |
294 | } | ||
295 | argc -= g_cmdoptions[i].param_count; | ||
296 | argv += g_cmdoptions[i].param_count; | ||
297 | break; | ||
298 | } | ||
299 | } | ||
300 | if (!g_cmdoptions[i].name) { | ||
301 | if (argc == 1) { | ||
302 | mode = *argv; | ||
303 | g_options |= OPT_READMODE; | ||
304 | } else { | ||
305 | fbset_usage(); | ||
306 | } | ||
266 | } | 307 | } |
267 | argc -= g_cmdoptions[i].param_count; | ||
268 | argv += g_cmdoptions[i].param_count; | ||
269 | break; | ||
270 | } | ||
271 | } | ||
272 | if (!g_cmdoptions[i].name) { | ||
273 | if (argc == 1) { | ||
274 | mode = *argv; | ||
275 | g_options |= OPT_READMODE; | ||
276 | } else { | ||
277 | fbset_usage(); | ||
278 | } | ||
279 | } | 308 | } |
280 | } | ||
281 | 309 | ||
282 | if ((fh = open(fbdev, O_RDONLY)) < 0) PERROR("fbset(open)"); | 310 | if ((fh = open(fbdev, O_RDONLY)) < 0) |
283 | if (ioctl(fh, FBIOGET_VSCREENINFO, &var)) PERROR("fbset(ioctl)"); | 311 | PERROR("fbset(open)"); |
284 | if (g_options & OPT_READMODE) { | 312 | if (ioctl(fh, FBIOGET_VSCREENINFO, &var)) |
285 | if (!readmode(&var, modefile, mode)) { | 313 | PERROR("fbset(ioctl)"); |
286 | fprintf(stderr, "Unknown video mode `%s'\n", mode); | 314 | if (g_options & OPT_READMODE) { |
287 | exit(1); | 315 | if (!readmode(&var, modefile, mode)) { |
316 | fprintf(stderr, "Unknown video mode `%s'\n", mode); | ||
317 | exit(1); | ||
318 | } | ||
288 | } | 319 | } |
289 | } | ||
290 | 320 | ||
291 | setmode(&var, &varset); | 321 | setmode(&var, &varset); |
292 | if (g_options & OPT_CHANGE) | 322 | if (g_options & OPT_CHANGE) |
293 | if (ioctl(fh, FBIOPUT_VSCREENINFO, &var)) PERROR("fbset(ioctl)"); | 323 | if (ioctl(fh, FBIOPUT_VSCREENINFO, &var)) |
294 | showmode(&var); | 324 | PERROR("fbset(ioctl)"); |
295 | close(fh); | 325 | showmode(&var); |
296 | 326 | close(fh); | |
297 | return(TRUE); | ||
298 | } | ||
299 | 327 | ||
328 | return (TRUE); | ||
329 | } | ||
diff --git a/util-linux/fdflush.c b/util-linux/fdflush.c index a244e8def..0b154c8a6 100644 --- a/util-linux/fdflush.c +++ b/util-linux/fdflush.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini fdflush implementation for busybox | 3 | * Mini fdflush implementation for busybox |
3 | * | 4 | * |
@@ -29,24 +30,25 @@ | |||
29 | 30 | ||
30 | extern int fdflush_main(int argc, char **argv) | 31 | extern int fdflush_main(int argc, char **argv) |
31 | { | 32 | { |
32 | int value; | 33 | int value; |
33 | int fd; | 34 | int fd; |
34 | if ( argc <= 1 || **(argv++) == '-' ) { | ||
35 | usage( "fdflush device\n"); | ||
36 | } | ||
37 | 35 | ||
38 | fd = open(*argv, 0); | 36 | if (argc <= 1 || **(argv++) == '-') { |
39 | if ( fd < 0 ) { | 37 | usage("fdflush device\n"); |
40 | perror(*argv); | 38 | } |
41 | exit(FALSE); | ||
42 | } | ||
43 | 39 | ||
44 | value = ioctl(fd, FDFLUSH, 0); | 40 | fd = open(*argv, 0); |
45 | close(fd); | 41 | if (fd < 0) { |
42 | perror(*argv); | ||
43 | exit(FALSE); | ||
44 | } | ||
46 | 45 | ||
47 | if ( value ) { | 46 | value = ioctl(fd, FDFLUSH, 0); |
48 | perror(*argv); | 47 | close(fd); |
49 | exit(FALSE); | 48 | |
50 | } | 49 | if (value) { |
51 | exit (TRUE); | 50 | perror(*argv); |
51 | exit(FALSE); | ||
52 | } | ||
53 | exit(TRUE); | ||
52 | } | 54 | } |
diff --git a/util-linux/fsck_minix.c b/util-linux/fsck_minix.c index 09111c5dc..084c76d36 100644 --- a/util-linux/fsck_minix.c +++ b/util-linux/fsck_minix.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * fsck.c - a file system consistency checker for Linux. | 3 | * fsck.c - a file system consistency checker for Linux. |
3 | * | 4 | * |
@@ -96,7 +97,7 @@ | |||
96 | #include <termios.h> | 97 | #include <termios.h> |
97 | #include <mntent.h> | 98 | #include <mntent.h> |
98 | #include <sys/stat.h> | 99 | #include <sys/stat.h> |
99 | #include <sys/param.h> /* for PATH_MAX */ | 100 | #include <sys/param.h> /* for PATH_MAX */ |
100 | 101 | ||
101 | #include <linux/fs.h> | 102 | #include <linux/fs.h> |
102 | #include <linux/minix_fs.h> | 103 | #include <linux/minix_fs.h> |
@@ -124,17 +125,17 @@ | |||
124 | 125 | ||
125 | #define BITS_PER_BLOCK (BLOCK_SIZE<<3) | 126 | #define BITS_PER_BLOCK (BLOCK_SIZE<<3) |
126 | 127 | ||
127 | static char * program_name = "fsck.minix"; | 128 | static char *program_name = "fsck.minix"; |
128 | static char * program_version = "1.2 - 11/11/96"; | 129 | static char *program_version = "1.2 - 11/11/96"; |
129 | static char * device_name = NULL; | 130 | static char *device_name = NULL; |
130 | static int IN; | 131 | static int IN; |
131 | static int repair=0, automatic=0, verbose=0, list=0, show=0, warn_mode=0, | 132 | static int repair = 0, automatic = 0, verbose = 0, list = 0, show = |
132 | force=0; | 133 | 0, warn_mode = 0, force = 0; |
133 | static int directory=0, regular=0, blockdev=0, chardev=0, links=0, | 134 | static int directory = 0, regular = 0, blockdev = 0, chardev = 0, links = |
134 | symlinks=0, total=0; | 135 | 0, symlinks = 0, total = 0; |
135 | 136 | ||
136 | static int changed = 0; /* flags if the filesystem has been changed */ | 137 | static int changed = 0; /* flags if the filesystem has been changed */ |
137 | static int errors_uncorrected = 0; /* flag if some error was not corrected */ | 138 | static int errors_uncorrected = 0; /* flag if some error was not corrected */ |
138 | static int dirsize = 16; | 139 | static int dirsize = 16; |
139 | static int namelen = 14; | 140 | static int namelen = 14; |
140 | static int version2 = 0; | 141 | static int version2 = 0; |
@@ -146,10 +147,12 @@ static int termios_set = 0; | |||
146 | static int name_depth = 0; | 147 | static int name_depth = 0; |
147 | static char name_list[MAX_DEPTH][PATH_MAX + 1]; | 148 | static char name_list[MAX_DEPTH][PATH_MAX + 1]; |
148 | 149 | ||
149 | static char * inode_buffer = NULL; | 150 | static char *inode_buffer = NULL; |
151 | |||
150 | #define Inode (((struct minix_inode *) inode_buffer)-1) | 152 | #define Inode (((struct minix_inode *) inode_buffer)-1) |
151 | #define Inode2 (((struct minix2_inode *) inode_buffer)-1) | 153 | #define Inode2 (((struct minix2_inode *) inode_buffer)-1) |
152 | static char super_block_buffer[BLOCK_SIZE]; | 154 | static char super_block_buffer[BLOCK_SIZE]; |
155 | |||
153 | #define Super (*(struct minix_super_block *)super_block_buffer) | 156 | #define Super (*(struct minix_super_block *)super_block_buffer) |
154 | #define INODES ((unsigned long)Super.s_ninodes) | 157 | #define INODES ((unsigned long)Super.s_ninodes) |
155 | #ifdef HAVE_MINIX2 | 158 | #ifdef HAVE_MINIX2 |
@@ -168,8 +171,8 @@ static char super_block_buffer[BLOCK_SIZE]; | |||
168 | static char *inode_map; | 171 | static char *inode_map; |
169 | static char *zone_map; | 172 | static char *zone_map; |
170 | 173 | ||
171 | static unsigned char * inode_count = NULL; | 174 | static unsigned char *inode_count = NULL; |
172 | static unsigned char * zone_count = NULL; | 175 | static unsigned char *zone_count = NULL; |
173 | 176 | ||
174 | static void recursive_check(unsigned int ino); | 177 | static void recursive_check(unsigned int ino); |
175 | static void recursive_check2(unsigned int ino); | 178 | static void recursive_check2(unsigned int ino); |
@@ -191,22 +194,27 @@ static void leave(int status) | |||
191 | exit(status); | 194 | exit(status); |
192 | } | 195 | } |
193 | 196 | ||
194 | static void show_usage(void) { | 197 | static void show_usage(void) |
195 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", BB_VER, BB_BT); | 198 | { |
199 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", | ||
200 | BB_VER, BB_BT); | ||
196 | fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n\n", program_name); | 201 | fprintf(stderr, "Usage: %s [-larvsmf] /dev/name\n\n", program_name); |
197 | fprintf(stderr, "Performs a consistency check for MINIX filesystems.\n\n"); | 202 | fprintf(stderr, |
203 | "Performs a consistency check for MINIX filesystems.\n\n"); | ||
198 | fprintf(stderr, "OPTIONS:\n"); | 204 | fprintf(stderr, "OPTIONS:\n"); |
199 | fprintf(stderr, "\t-l\tLists all filenames\n"); | 205 | fprintf(stderr, "\t-l\tLists all filenames\n"); |
200 | fprintf(stderr, "\t-r\tPerform interactive repairs\n"); | 206 | fprintf(stderr, "\t-r\tPerform interactive repairs\n"); |
201 | fprintf(stderr, "\t-a\tPerform automatic repairs\n"); | 207 | fprintf(stderr, "\t-a\tPerform automatic repairs\n"); |
202 | fprintf(stderr, "\t-v\tverbose\n"); | 208 | fprintf(stderr, "\t-v\tverbose\n"); |
203 | fprintf(stderr, "\t-s\tOutputs super-block information\n"); | 209 | fprintf(stderr, "\t-s\tOutputs super-block information\n"); |
204 | fprintf(stderr, "\t-m\tActivates MINIX-like \"mode not cleared\" warnings\n"); | 210 | fprintf(stderr, |
211 | "\t-m\tActivates MINIX-like \"mode not cleared\" warnings\n"); | ||
205 | fprintf(stderr, "\t-f\tForce file system check.\n\n"); | 212 | fprintf(stderr, "\t-f\tForce file system check.\n\n"); |
206 | leave(16); | 213 | leave(16); |
207 | } | 214 | } |
208 | 215 | ||
209 | static void die(const char *str) { | 216 | static void die(const char *str) |
217 | { | ||
210 | fprintf(stderr, "%s: %s\n", program_name, str); | 218 | fprintf(stderr, "%s: %s\n", program_name, str); |
211 | leave(8); | 219 | leave(8); |
212 | } | 220 | } |
@@ -217,15 +225,15 @@ static void die(const char *str) { | |||
217 | */ | 225 | */ |
218 | static void print_current_name(void) | 226 | static void print_current_name(void) |
219 | { | 227 | { |
220 | int i=0; | 228 | int i = 0; |
221 | 229 | ||
222 | while (i<name_depth) | 230 | while (i < name_depth) |
223 | printf("/%.*s",namelen,name_list[i++]); | 231 | printf("/%.*s", namelen, name_list[i++]); |
224 | if (i == 0) | 232 | if (i == 0) |
225 | printf ("/"); | 233 | printf("/"); |
226 | } | 234 | } |
227 | 235 | ||
228 | static int ask(const char * string, int def) | 236 | static int ask(const char *string, int def) |
229 | { | 237 | { |
230 | int c; | 238 | int c; |
231 | 239 | ||
@@ -237,18 +245,18 @@ static int ask(const char * string, int def) | |||
237 | if (automatic) { | 245 | if (automatic) { |
238 | printf("\n"); | 246 | printf("\n"); |
239 | if (!def) | 247 | if (!def) |
240 | errors_uncorrected = 1; | 248 | errors_uncorrected = 1; |
241 | return def; | 249 | return def; |
242 | } | 250 | } |
243 | printf(def?"%s (y/n)? ":"%s (n/y)? ",string); | 251 | printf(def ? "%s (y/n)? " : "%s (n/y)? ", string); |
244 | for (;;) { | 252 | for (;;) { |
245 | fflush(stdout); | 253 | fflush(stdout); |
246 | if ((c=getchar())==EOF) { | 254 | if ((c = getchar()) == EOF) { |
247 | if (!def) | 255 | if (!def) |
248 | errors_uncorrected = 1; | 256 | errors_uncorrected = 1; |
249 | return def; | 257 | return def; |
250 | } | 258 | } |
251 | c=toupper(c); | 259 | c = toupper(c); |
252 | if (c == 'Y') { | 260 | if (c == 'Y') { |
253 | def = 1; | 261 | def = 1; |
254 | break; | 262 | break; |
@@ -263,7 +271,7 @@ static int ask(const char * string, int def) | |||
263 | else { | 271 | else { |
264 | printf("n\n"); | 272 | printf("n\n"); |
265 | errors_uncorrected = 1; | 273 | errors_uncorrected = 1; |
266 | } | 274 | } |
267 | return def; | 275 | return def; |
268 | } | 276 | } |
269 | 277 | ||
@@ -274,17 +282,17 @@ static int ask(const char * string, int def) | |||
274 | */ | 282 | */ |
275 | static void check_mount(void) | 283 | static void check_mount(void) |
276 | { | 284 | { |
277 | FILE * f; | 285 | FILE *f; |
278 | struct mntent * mnt; | 286 | struct mntent *mnt; |
279 | int cont; | 287 | int cont; |
280 | int fd; | 288 | int fd; |
281 | 289 | ||
282 | if ((f = setmntent (MOUNTED, "r")) == NULL) | 290 | if ((f = setmntent(MOUNTED, "r")) == NULL) |
283 | return; | 291 | return; |
284 | while ((mnt = getmntent (f)) != NULL) | 292 | while ((mnt = getmntent(f)) != NULL) |
285 | if (strcmp (device_name, mnt->mnt_fsname) == 0) | 293 | if (strcmp(device_name, mnt->mnt_fsname) == 0) |
286 | break; | 294 | break; |
287 | endmntent (f); | 295 | endmntent(f); |
288 | if (!mnt) | 296 | if (!mnt) |
289 | return; | 297 | return; |
290 | 298 | ||
@@ -298,15 +306,15 @@ static void check_mount(void) | |||
298 | return; | 306 | return; |
299 | else | 307 | else |
300 | close(fd); | 308 | close(fd); |
301 | 309 | ||
302 | printf ("%s is mounted. ", device_name); | 310 | printf("%s is mounted. ", device_name); |
303 | if (isatty(0) && isatty(1)) | 311 | if (isatty(0) && isatty(1)) |
304 | cont = ask("Do you really want to continue", 0); | 312 | cont = ask("Do you really want to continue", 0); |
305 | else | 313 | else |
306 | cont = 0; | 314 | cont = 0; |
307 | if (!cont) { | 315 | if (!cont) { |
308 | printf ("check aborted.\n"); | 316 | printf("check aborted.\n"); |
309 | exit (0); | 317 | exit(0); |
310 | } | 318 | } |
311 | return; | 319 | return; |
312 | } | 320 | } |
@@ -317,7 +325,7 @@ static void check_mount(void) | |||
317 | * if an error was corrected, and returns the zone (0 for no zone | 325 | * if an error was corrected, and returns the zone (0 for no zone |
318 | * or a bad zone-number). | 326 | * or a bad zone-number). |
319 | */ | 327 | */ |
320 | static int check_zone_nr(unsigned short * nr, int * corrected) | 328 | static int check_zone_nr(unsigned short *nr, int *corrected) |
321 | { | 329 | { |
322 | if (!*nr) | 330 | if (!*nr) |
323 | return 0; | 331 | return 0; |
@@ -329,7 +337,7 @@ static int check_zone_nr(unsigned short * nr, int * corrected) | |||
329 | return *nr; | 337 | return *nr; |
330 | print_current_name(); | 338 | print_current_name(); |
331 | printf("'."); | 339 | printf("'."); |
332 | if (ask("Remove block",1)) { | 340 | if (ask("Remove block", 1)) { |
333 | *nr = 0; | 341 | *nr = 0; |
334 | *corrected = 1; | 342 | *corrected = 1; |
335 | } | 343 | } |
@@ -337,19 +345,19 @@ static int check_zone_nr(unsigned short * nr, int * corrected) | |||
337 | } | 345 | } |
338 | 346 | ||
339 | #ifdef HAVE_MINIX2 | 347 | #ifdef HAVE_MINIX2 |
340 | static int check_zone_nr2 (unsigned int *nr, int *corrected) | 348 | static int check_zone_nr2(unsigned int *nr, int *corrected) |
341 | { | 349 | { |
342 | if (!*nr) | 350 | if (!*nr) |
343 | return 0; | 351 | return 0; |
344 | if (*nr < FIRSTZONE) | 352 | if (*nr < FIRSTZONE) |
345 | printf ("Zone nr < FIRSTZONE in file `"); | 353 | printf("Zone nr < FIRSTZONE in file `"); |
346 | else if (*nr >= ZONES) | 354 | else if (*nr >= ZONES) |
347 | printf ("Zone nr >= ZONES in file `"); | 355 | printf("Zone nr >= ZONES in file `"); |
348 | else | 356 | else |
349 | return *nr; | 357 | return *nr; |
350 | print_current_name (); | 358 | print_current_name(); |
351 | printf ("'."); | 359 | printf("'."); |
352 | if (ask ("Remove block", 1)) { | 360 | if (ask("Remove block", 1)) { |
353 | *nr = 0; | 361 | *nr = 0; |
354 | *corrected = 1; | 362 | *corrected = 1; |
355 | } | 363 | } |
@@ -360,23 +368,23 @@ static int check_zone_nr2 (unsigned int *nr, int *corrected) | |||
360 | /* | 368 | /* |
361 | * read-block reads block nr into the buffer at addr. | 369 | * read-block reads block nr into the buffer at addr. |
362 | */ | 370 | */ |
363 | static void read_block(unsigned int nr, char * addr) | 371 | static void read_block(unsigned int nr, char *addr) |
364 | { | 372 | { |
365 | if (!nr) { | 373 | if (!nr) { |
366 | memset(addr,0,BLOCK_SIZE); | 374 | memset(addr, 0, BLOCK_SIZE); |
367 | return; | 375 | return; |
368 | } | 376 | } |
369 | if (BLOCK_SIZE*nr != lseek(IN, BLOCK_SIZE*nr, SEEK_SET)) { | 377 | if (BLOCK_SIZE * nr != lseek(IN, BLOCK_SIZE * nr, SEEK_SET)) { |
370 | printf("Read error: unable to seek to block in file '"); | 378 | printf("Read error: unable to seek to block in file '"); |
371 | print_current_name(); | 379 | print_current_name(); |
372 | printf("'\n"); | 380 | printf("'\n"); |
373 | memset(addr,0,BLOCK_SIZE); | 381 | memset(addr, 0, BLOCK_SIZE); |
374 | errors_uncorrected = 1; | 382 | errors_uncorrected = 1; |
375 | } else if (BLOCK_SIZE != read(IN, addr, BLOCK_SIZE)) { | 383 | } else if (BLOCK_SIZE != read(IN, addr, BLOCK_SIZE)) { |
376 | printf("Read error: bad block in file '"); | 384 | printf("Read error: bad block in file '"); |
377 | print_current_name(); | 385 | print_current_name(); |
378 | printf("'\n"); | 386 | printf("'\n"); |
379 | memset(addr,0,BLOCK_SIZE); | 387 | memset(addr, 0, BLOCK_SIZE); |
380 | errors_uncorrected = 1; | 388 | errors_uncorrected = 1; |
381 | } | 389 | } |
382 | } | 390 | } |
@@ -384,17 +392,17 @@ static void read_block(unsigned int nr, char * addr) | |||
384 | /* | 392 | /* |
385 | * write_block writes block nr to disk. | 393 | * write_block writes block nr to disk. |
386 | */ | 394 | */ |
387 | static void write_block(unsigned int nr, char * addr) | 395 | static void write_block(unsigned int nr, char *addr) |
388 | { | 396 | { |
389 | if (!nr) | 397 | if (!nr) |
390 | return; | 398 | return; |
391 | if (nr < FIRSTZONE || nr >= ZONES) { | 399 | if (nr < FIRSTZONE || nr >= ZONES) { |
392 | printf("Internal error: trying to write bad block\n" | 400 | printf("Internal error: trying to write bad block\n" |
393 | "Write request ignored\n"); | 401 | "Write request ignored\n"); |
394 | errors_uncorrected = 1; | 402 | errors_uncorrected = 1; |
395 | return; | 403 | return; |
396 | } | 404 | } |
397 | if (BLOCK_SIZE*nr != lseek(IN, BLOCK_SIZE*nr, SEEK_SET)) | 405 | if (BLOCK_SIZE * nr != lseek(IN, BLOCK_SIZE * nr, SEEK_SET)) |
398 | die("seek failed in write_block"); | 406 | die("seek failed in write_block"); |
399 | if (BLOCK_SIZE != write(IN, addr, BLOCK_SIZE)) { | 407 | if (BLOCK_SIZE != write(IN, addr, BLOCK_SIZE)) { |
400 | printf("Write error: bad block in file '"); | 408 | printf("Write error: bad block in file '"); |
@@ -409,16 +417,16 @@ static void write_block(unsigned int nr, char * addr) | |||
409 | * It sets 'changed' if the inode has needed changing, and re-writes | 417 | * It sets 'changed' if the inode has needed changing, and re-writes |
410 | * any indirect blocks with errors. | 418 | * any indirect blocks with errors. |
411 | */ | 419 | */ |
412 | static int map_block(struct minix_inode * inode, unsigned int blknr) | 420 | static int map_block(struct minix_inode *inode, unsigned int blknr) |
413 | { | 421 | { |
414 | unsigned short ind[BLOCK_SIZE>>1]; | 422 | unsigned short ind[BLOCK_SIZE >> 1]; |
415 | unsigned short dind[BLOCK_SIZE>>1]; | 423 | unsigned short dind[BLOCK_SIZE >> 1]; |
416 | int blk_chg, block, result; | 424 | int blk_chg, block, result; |
417 | 425 | ||
418 | if (blknr<7) | 426 | if (blknr < 7) |
419 | return check_zone_nr(inode->i_zone + blknr, &changed); | 427 | return check_zone_nr(inode->i_zone + blknr, &changed); |
420 | blknr -= 7; | 428 | blknr -= 7; |
421 | if (blknr<512) { | 429 | if (blknr < 512) { |
422 | block = check_zone_nr(inode->i_zone + 7, &changed); | 430 | block = check_zone_nr(inode->i_zone + 7, &changed); |
423 | read_block(block, (char *) ind); | 431 | read_block(block, (char *) ind); |
424 | blk_chg = 0; | 432 | blk_chg = 0; |
@@ -431,73 +439,73 @@ static int map_block(struct minix_inode * inode, unsigned int blknr) | |||
431 | block = check_zone_nr(inode->i_zone + 8, &changed); | 439 | block = check_zone_nr(inode->i_zone + 8, &changed); |
432 | read_block(block, (char *) dind); | 440 | read_block(block, (char *) dind); |
433 | blk_chg = 0; | 441 | blk_chg = 0; |
434 | result = check_zone_nr(dind + (blknr/512), &blk_chg); | 442 | result = check_zone_nr(dind + (blknr / 512), &blk_chg); |
435 | if (blk_chg) | 443 | if (blk_chg) |
436 | write_block(block, (char *) dind); | 444 | write_block(block, (char *) dind); |
437 | block = result; | 445 | block = result; |
438 | read_block(block, (char *) ind); | 446 | read_block(block, (char *) ind); |
439 | blk_chg = 0; | 447 | blk_chg = 0; |
440 | result = check_zone_nr(ind + (blknr%512), &blk_chg); | 448 | result = check_zone_nr(ind + (blknr % 512), &blk_chg); |
441 | if (blk_chg) | 449 | if (blk_chg) |
442 | write_block(block, (char *) ind); | 450 | write_block(block, (char *) ind); |
443 | return result; | 451 | return result; |
444 | } | 452 | } |
445 | 453 | ||
446 | #ifdef HAVE_MINIX2 | 454 | #ifdef HAVE_MINIX2 |
447 | static int map_block2 (struct minix2_inode *inode, unsigned int blknr) | 455 | static int map_block2(struct minix2_inode *inode, unsigned int blknr) |
448 | { | 456 | { |
449 | unsigned int ind[BLOCK_SIZE >> 2]; | 457 | unsigned int ind[BLOCK_SIZE >> 2]; |
450 | unsigned int dind[BLOCK_SIZE >> 2]; | 458 | unsigned int dind[BLOCK_SIZE >> 2]; |
451 | unsigned int tind[BLOCK_SIZE >> 2]; | 459 | unsigned int tind[BLOCK_SIZE >> 2]; |
452 | int blk_chg, block, result; | 460 | int blk_chg, block, result; |
453 | 461 | ||
454 | if (blknr < 7) | 462 | if (blknr < 7) |
455 | return check_zone_nr2 (inode->i_zone + blknr, &changed); | 463 | return check_zone_nr2(inode->i_zone + blknr, &changed); |
456 | blknr -= 7; | 464 | blknr -= 7; |
457 | if (blknr < 256) { | 465 | if (blknr < 256) { |
458 | block = check_zone_nr2 (inode->i_zone + 7, &changed); | 466 | block = check_zone_nr2(inode->i_zone + 7, &changed); |
459 | read_block (block, (char *) ind); | 467 | read_block(block, (char *) ind); |
460 | blk_chg = 0; | 468 | blk_chg = 0; |
461 | result = check_zone_nr2 (blknr + ind, &blk_chg); | 469 | result = check_zone_nr2(blknr + ind, &blk_chg); |
462 | if (blk_chg) | 470 | if (blk_chg) |
463 | write_block (block, (char *) ind); | 471 | write_block(block, (char *) ind); |
464 | return result; | 472 | return result; |
465 | } | 473 | } |
466 | blknr -= 256; | 474 | blknr -= 256; |
467 | if (blknr >= 256 * 256) { | 475 | if (blknr >= 256 * 256) { |
468 | block = check_zone_nr2 (inode->i_zone + 8, &changed); | 476 | block = check_zone_nr2(inode->i_zone + 8, &changed); |
469 | read_block (block, (char *) dind); | 477 | read_block(block, (char *) dind); |
470 | blk_chg = 0; | 478 | blk_chg = 0; |
471 | result = check_zone_nr2 (dind + blknr / 256, &blk_chg); | 479 | result = check_zone_nr2(dind + blknr / 256, &blk_chg); |
472 | if (blk_chg) | 480 | if (blk_chg) |
473 | write_block (block, (char *) dind); | 481 | write_block(block, (char *) dind); |
474 | block = result; | 482 | block = result; |
475 | read_block (block, (char *) ind); | 483 | read_block(block, (char *) ind); |
476 | blk_chg = 0; | 484 | blk_chg = 0; |
477 | result = check_zone_nr2 (ind + blknr % 256, &blk_chg); | 485 | result = check_zone_nr2(ind + blknr % 256, &blk_chg); |
478 | if (blk_chg) | 486 | if (blk_chg) |
479 | write_block (block, (char *) ind); | 487 | write_block(block, (char *) ind); |
480 | return result; | 488 | return result; |
481 | } | 489 | } |
482 | blknr -= 256 * 256; | 490 | blknr -= 256 * 256; |
483 | block = check_zone_nr2 (inode->i_zone + 9, &changed); | 491 | block = check_zone_nr2(inode->i_zone + 9, &changed); |
484 | read_block (block, (char *) tind); | 492 | read_block(block, (char *) tind); |
485 | blk_chg = 0; | 493 | blk_chg = 0; |
486 | result = check_zone_nr2 (tind + blknr / (256 * 256), &blk_chg); | 494 | result = check_zone_nr2(tind + blknr / (256 * 256), &blk_chg); |
487 | if (blk_chg) | 495 | if (blk_chg) |
488 | write_block (block, (char *) tind); | 496 | write_block(block, (char *) tind); |
489 | block = result; | 497 | block = result; |
490 | read_block (block, (char *) dind); | 498 | read_block(block, (char *) dind); |
491 | blk_chg = 0; | 499 | blk_chg = 0; |
492 | result = check_zone_nr2 (dind + (blknr / 256) % 256, &blk_chg); | 500 | result = check_zone_nr2(dind + (blknr / 256) % 256, &blk_chg); |
493 | if (blk_chg) | 501 | if (blk_chg) |
494 | write_block (block, (char *) dind); | 502 | write_block(block, (char *) dind); |
495 | block = result; | 503 | block = result; |
496 | read_block (block, (char *) ind); | 504 | read_block(block, (char *) ind); |
497 | blk_chg = 0; | 505 | blk_chg = 0; |
498 | result = check_zone_nr2 (ind + blknr % 256, &blk_chg); | 506 | result = check_zone_nr2(ind + blknr % 256, &blk_chg); |
499 | if (blk_chg) | 507 | if (blk_chg) |
500 | write_block (block, (char *) ind); | 508 | write_block(block, (char *) ind); |
501 | return result; | 509 | return result; |
502 | } | 510 | } |
503 | #endif | 511 | #endif |
@@ -510,11 +518,11 @@ static void write_super_block(void) | |||
510 | * unconditionally set if we get this far. | 518 | * unconditionally set if we get this far. |
511 | */ | 519 | */ |
512 | Super.s_state |= MINIX_VALID_FS; | 520 | Super.s_state |= MINIX_VALID_FS; |
513 | if ( errors_uncorrected ) | 521 | if (errors_uncorrected) |
514 | Super.s_state |= MINIX_ERROR_FS; | 522 | Super.s_state |= MINIX_ERROR_FS; |
515 | else | 523 | else |
516 | Super.s_state &= ~MINIX_ERROR_FS; | 524 | Super.s_state &= ~MINIX_ERROR_FS; |
517 | 525 | ||
518 | if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET)) | 526 | if (BLOCK_SIZE != lseek(IN, BLOCK_SIZE, SEEK_SET)) |
519 | die("seek failed in write_super_block"); | 527 | die("seek failed in write_super_block"); |
520 | if (BLOCK_SIZE != write(IN, super_block_buffer, BLOCK_SIZE)) | 528 | if (BLOCK_SIZE != write(IN, super_block_buffer, BLOCK_SIZE)) |
@@ -527,15 +535,15 @@ static void write_tables(void) | |||
527 | { | 535 | { |
528 | write_super_block(); | 536 | write_super_block(); |
529 | 537 | ||
530 | if (IMAPS*BLOCK_SIZE != write(IN,inode_map,IMAPS*BLOCK_SIZE)) | 538 | if (IMAPS * BLOCK_SIZE != write(IN, inode_map, IMAPS * BLOCK_SIZE)) |
531 | die("Unable to write inode map"); | 539 | die("Unable to write inode map"); |
532 | if (ZMAPS*BLOCK_SIZE != write(IN,zone_map,ZMAPS*BLOCK_SIZE)) | 540 | if (ZMAPS * BLOCK_SIZE != write(IN, zone_map, ZMAPS * BLOCK_SIZE)) |
533 | die("Unable to write zone map"); | 541 | die("Unable to write zone map"); |
534 | if (INODE_BUFFER_SIZE != write(IN,inode_buffer,INODE_BUFFER_SIZE)) | 542 | if (INODE_BUFFER_SIZE != write(IN, inode_buffer, INODE_BUFFER_SIZE)) |
535 | die("Unable to write inodes"); | 543 | die("Unable to write inodes"); |
536 | } | 544 | } |
537 | 545 | ||
538 | static void get_dirsize (void) | 546 | static void get_dirsize(void) |
539 | { | 547 | { |
540 | int block; | 548 | int block; |
541 | char blk[BLOCK_SIZE]; | 549 | char blk[BLOCK_SIZE]; |
@@ -547,9 +555,9 @@ static void get_dirsize (void) | |||
547 | else | 555 | else |
548 | #endif | 556 | #endif |
549 | block = Inode[ROOT_INO].i_zone[0]; | 557 | block = Inode[ROOT_INO].i_zone[0]; |
550 | read_block (block, blk); | 558 | read_block(block, blk); |
551 | for (size = 16; size < BLOCK_SIZE; size <<= 1) { | 559 | for (size = 16; size < BLOCK_SIZE; size <<= 1) { |
552 | if (strcmp (blk + size + 2, "..") == 0) { | 560 | if (strcmp(blk + size + 2, "..") == 0) { |
553 | dirsize = size; | 561 | dirsize = size; |
554 | namelen = size - 2; | 562 | namelen = size - 2; |
555 | return; | 563 | return; |
@@ -600,8 +608,8 @@ static void read_tables(void) | |||
600 | zone_map = malloc(ZMAPS * BLOCK_SIZE); | 608 | zone_map = malloc(ZMAPS * BLOCK_SIZE); |
601 | if (!inode_map) | 609 | if (!inode_map) |
602 | die("Unable to allocate buffer for zone map"); | 610 | die("Unable to allocate buffer for zone map"); |
603 | memset(inode_map,0,sizeof(inode_map)); | 611 | memset(inode_map, 0, sizeof(inode_map)); |
604 | memset(zone_map,0,sizeof(zone_map)); | 612 | memset(zone_map, 0, sizeof(zone_map)); |
605 | inode_buffer = malloc(INODE_BUFFER_SIZE); | 613 | inode_buffer = malloc(INODE_BUFFER_SIZE); |
606 | if (!inode_buffer) | 614 | if (!inode_buffer) |
607 | die("Unable to allocate buffer for inodes"); | 615 | die("Unable to allocate buffer for inodes"); |
@@ -611,31 +619,31 @@ static void read_tables(void) | |||
611 | zone_count = malloc(ZONES); | 619 | zone_count = malloc(ZONES); |
612 | if (!zone_count) | 620 | if (!zone_count) |
613 | die("Unable to allocate buffer for zone count"); | 621 | die("Unable to allocate buffer for zone count"); |
614 | if (IMAPS*BLOCK_SIZE != read(IN,inode_map,IMAPS*BLOCK_SIZE)) | 622 | if (IMAPS * BLOCK_SIZE != read(IN, inode_map, IMAPS * BLOCK_SIZE)) |
615 | die("Unable to read inode map"); | 623 | die("Unable to read inode map"); |
616 | if (ZMAPS*BLOCK_SIZE != read(IN,zone_map,ZMAPS*BLOCK_SIZE)) | 624 | if (ZMAPS * BLOCK_SIZE != read(IN, zone_map, ZMAPS * BLOCK_SIZE)) |
617 | die("Unable to read zone map"); | 625 | die("Unable to read zone map"); |
618 | if (INODE_BUFFER_SIZE != read(IN,inode_buffer,INODE_BUFFER_SIZE)) | 626 | if (INODE_BUFFER_SIZE != read(IN, inode_buffer, INODE_BUFFER_SIZE)) |
619 | die("Unable to read inodes"); | 627 | die("Unable to read inodes"); |
620 | if (NORM_FIRSTZONE != FIRSTZONE) { | 628 | if (NORM_FIRSTZONE != FIRSTZONE) { |
621 | printf("Warning: Firstzone != Norm_firstzone\n"); | 629 | printf("Warning: Firstzone != Norm_firstzone\n"); |
622 | errors_uncorrected = 1; | 630 | errors_uncorrected = 1; |
623 | } | 631 | } |
624 | get_dirsize (); | 632 | get_dirsize(); |
625 | if (show) { | 633 | if (show) { |
626 | printf("%ld inodes\n",INODES); | 634 | printf("%ld inodes\n", INODES); |
627 | printf("%ld blocks\n",ZONES); | 635 | printf("%ld blocks\n", ZONES); |
628 | printf("Firstdatazone=%ld (%ld)\n",FIRSTZONE,NORM_FIRSTZONE); | 636 | printf("Firstdatazone=%ld (%ld)\n", FIRSTZONE, NORM_FIRSTZONE); |
629 | printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE); | 637 | printf("Zonesize=%d\n", BLOCK_SIZE << ZONESIZE); |
630 | printf("Maxsize=%ld\n",MAXSIZE); | 638 | printf("Maxsize=%ld\n", MAXSIZE); |
631 | printf("Filesystem state=%d\n", Super.s_state); | 639 | printf("Filesystem state=%d\n", Super.s_state); |
632 | printf("namelen=%d\n\n",namelen); | 640 | printf("namelen=%d\n\n", namelen); |
633 | } | 641 | } |
634 | } | 642 | } |
635 | 643 | ||
636 | struct minix_inode * get_inode(unsigned int nr) | 644 | struct minix_inode *get_inode(unsigned int nr) |
637 | { | 645 | { |
638 | struct minix_inode * inode; | 646 | struct minix_inode *inode; |
639 | 647 | ||
640 | if (!nr || nr > INODES) | 648 | if (!nr || nr > INODES) |
641 | return NULL; | 649 | return NULL; |
@@ -643,15 +651,14 @@ struct minix_inode * get_inode(unsigned int nr) | |||
643 | inode = Inode + nr; | 651 | inode = Inode + nr; |
644 | if (!inode_count[nr]) { | 652 | if (!inode_count[nr]) { |
645 | if (!inode_in_use(nr)) { | 653 | if (!inode_in_use(nr)) { |
646 | printf("Inode %d marked not used, but used for file '", | 654 | printf("Inode %d marked not used, but used for file '", nr); |
647 | nr); | ||
648 | print_current_name(); | 655 | print_current_name(); |
649 | printf("'\n"); | 656 | printf("'\n"); |
650 | if (repair) { | 657 | if (repair) { |
651 | if (ask("Mark in use",1)) | 658 | if (ask("Mark in use", 1)) |
652 | mark_inode(nr); | 659 | mark_inode(nr); |
653 | } else { | 660 | } else { |
654 | errors_uncorrected = 1; | 661 | errors_uncorrected = 1; |
655 | } | 662 | } |
656 | } | 663 | } |
657 | if (S_ISDIR(inode->i_mode)) | 664 | if (S_ISDIR(inode->i_mode)) |
@@ -664,14 +671,12 @@ struct minix_inode * get_inode(unsigned int nr) | |||
664 | blockdev++; | 671 | blockdev++; |
665 | else if (S_ISLNK(inode->i_mode)) | 672 | else if (S_ISLNK(inode->i_mode)) |
666 | symlinks++; | 673 | symlinks++; |
667 | else if (S_ISSOCK(inode->i_mode)) | 674 | else if (S_ISSOCK(inode->i_mode)); |
668 | ; | 675 | else if (S_ISFIFO(inode->i_mode)); |
669 | else if (S_ISFIFO(inode->i_mode)) | ||
670 | ; | ||
671 | else { | 676 | else { |
672 | print_current_name(); | 677 | print_current_name(); |
673 | printf(" has mode %05o\n",inode->i_mode); | 678 | printf(" has mode %05o\n", inode->i_mode); |
674 | } | 679 | } |
675 | 680 | ||
676 | } else | 681 | } else |
677 | links++; | 682 | links++; |
@@ -684,8 +689,7 @@ struct minix_inode * get_inode(unsigned int nr) | |||
684 | } | 689 | } |
685 | 690 | ||
686 | #ifdef HAVE_MINIX2 | 691 | #ifdef HAVE_MINIX2 |
687 | struct minix2_inode * | 692 | struct minix2_inode *get_inode2(unsigned int nr) |
688 | get_inode2 (unsigned int nr) | ||
689 | { | 693 | { |
690 | struct minix2_inode *inode; | 694 | struct minix2_inode *inode; |
691 | 695 | ||
@@ -694,37 +698,37 @@ get_inode2 (unsigned int nr) | |||
694 | total++; | 698 | total++; |
695 | inode = Inode2 + nr; | 699 | inode = Inode2 + nr; |
696 | if (!inode_count[nr]) { | 700 | if (!inode_count[nr]) { |
697 | if (!inode_in_use (nr)) { | 701 | if (!inode_in_use(nr)) { |
698 | printf ("Inode %d marked not used, but used for file '", nr); | 702 | printf("Inode %d marked not used, but used for file '", nr); |
699 | print_current_name (); | 703 | print_current_name(); |
700 | printf ("'\n"); | 704 | printf("'\n"); |
701 | if (repair) { | 705 | if (repair) { |
702 | if (ask ("Mark in use", 1)) | 706 | if (ask("Mark in use", 1)) |
703 | mark_inode (nr); | 707 | mark_inode(nr); |
704 | else | 708 | else |
705 | errors_uncorrected = 1; | 709 | errors_uncorrected = 1; |
706 | } | 710 | } |
707 | } | 711 | } |
708 | if (S_ISDIR (inode->i_mode)) | 712 | if (S_ISDIR(inode->i_mode)) |
709 | directory++; | 713 | directory++; |
710 | else if (S_ISREG (inode->i_mode)) | 714 | else if (S_ISREG(inode->i_mode)) |
711 | regular++; | 715 | regular++; |
712 | else if (S_ISCHR (inode->i_mode)) | 716 | else if (S_ISCHR(inode->i_mode)) |
713 | chardev++; | 717 | chardev++; |
714 | else if (S_ISBLK (inode->i_mode)) | 718 | else if (S_ISBLK(inode->i_mode)) |
715 | blockdev++; | 719 | blockdev++; |
716 | else if (S_ISLNK (inode->i_mode)) | 720 | else if (S_ISLNK(inode->i_mode)) |
717 | symlinks++; | 721 | symlinks++; |
718 | else if (S_ISSOCK (inode->i_mode)); | 722 | else if (S_ISSOCK(inode->i_mode)); |
719 | else if (S_ISFIFO (inode->i_mode)); | 723 | else if (S_ISFIFO(inode->i_mode)); |
720 | else { | 724 | else { |
721 | print_current_name (); | 725 | print_current_name(); |
722 | printf (" has mode %05o\n", inode->i_mode); | 726 | printf(" has mode %05o\n", inode->i_mode); |
723 | } | 727 | } |
724 | } else | 728 | } else |
725 | links++; | 729 | links++; |
726 | if (!++inode_count[nr]) { | 730 | if (!++inode_count[nr]) { |
727 | printf ("Warning: inode count too big.\n"); | 731 | printf("Warning: inode count too big.\n"); |
728 | inode_count[nr]--; | 732 | inode_count[nr]--; |
729 | errors_uncorrected = 1; | 733 | errors_uncorrected = 1; |
730 | } | 734 | } |
@@ -734,23 +738,23 @@ get_inode2 (unsigned int nr) | |||
734 | 738 | ||
735 | static void check_root(void) | 739 | static void check_root(void) |
736 | { | 740 | { |
737 | struct minix_inode * inode = Inode + ROOT_INO; | 741 | struct minix_inode *inode = Inode + ROOT_INO; |
738 | 742 | ||
739 | if (!inode || !S_ISDIR(inode->i_mode)) | 743 | if (!inode || !S_ISDIR(inode->i_mode)) |
740 | die("root inode isn't a directory"); | 744 | die("root inode isn't a directory"); |
741 | } | 745 | } |
742 | 746 | ||
743 | #ifdef HAVE_MINIX2 | 747 | #ifdef HAVE_MINIX2 |
744 | static void check_root2 (void) | 748 | static void check_root2(void) |
745 | { | 749 | { |
746 | struct minix2_inode *inode = Inode2 + ROOT_INO; | 750 | struct minix2_inode *inode = Inode2 + ROOT_INO; |
747 | 751 | ||
748 | if (!inode || !S_ISDIR (inode->i_mode)) | 752 | if (!inode || !S_ISDIR(inode->i_mode)) |
749 | die ("root inode isn't a directory"); | 753 | die("root inode isn't a directory"); |
750 | } | 754 | } |
751 | #endif | 755 | #endif |
752 | 756 | ||
753 | static int add_zone(unsigned short * znr, int * corrected) | 757 | static int add_zone(unsigned short *znr, int *corrected) |
754 | { | 758 | { |
755 | int result; | 759 | int result; |
756 | int block; | 760 | int block; |
@@ -763,7 +767,7 @@ static int add_zone(unsigned short * znr, int * corrected) | |||
763 | printf("Block has been used before. Now in file `"); | 767 | printf("Block has been used before. Now in file `"); |
764 | print_current_name(); | 768 | print_current_name(); |
765 | printf("'."); | 769 | printf("'."); |
766 | if (ask("Clear",1)) { | 770 | if (ask("Clear", 1)) { |
767 | *znr = 0; | 771 | *znr = 0; |
768 | block = 0; | 772 | block = 0; |
769 | *corrected = 1; | 773 | *corrected = 1; |
@@ -772,10 +776,10 @@ static int add_zone(unsigned short * znr, int * corrected) | |||
772 | if (!block) | 776 | if (!block) |
773 | return 0; | 777 | return 0; |
774 | if (!zone_in_use(block)) { | 778 | if (!zone_in_use(block)) { |
775 | printf("Block %d in file `",block); | 779 | printf("Block %d in file `", block); |
776 | print_current_name(); | 780 | print_current_name(); |
777 | printf("' is marked not in use."); | 781 | printf("' is marked not in use."); |
778 | if (ask("Correct",1)) | 782 | if (ask("Correct", 1)) |
779 | mark_zone(block); | 783 | mark_zone(block); |
780 | } | 784 | } |
781 | if (!++zone_count[block]) | 785 | if (!++zone_count[block]) |
@@ -784,20 +788,20 @@ static int add_zone(unsigned short * znr, int * corrected) | |||
784 | } | 788 | } |
785 | 789 | ||
786 | #ifdef HAVE_MINIX2 | 790 | #ifdef HAVE_MINIX2 |
787 | static int add_zone2 (unsigned int *znr, int *corrected) | 791 | static int add_zone2(unsigned int *znr, int *corrected) |
788 | { | 792 | { |
789 | int result; | 793 | int result; |
790 | int block; | 794 | int block; |
791 | 795 | ||
792 | result = 0; | 796 | result = 0; |
793 | block = check_zone_nr2 (znr, corrected); | 797 | block = check_zone_nr2(znr, corrected); |
794 | if (!block) | 798 | if (!block) |
795 | return 0; | 799 | return 0; |
796 | if (zone_count[block]) { | 800 | if (zone_count[block]) { |
797 | printf ("Block has been used before. Now in file `"); | 801 | printf("Block has been used before. Now in file `"); |
798 | print_current_name (); | 802 | print_current_name(); |
799 | printf ("'."); | 803 | printf("'."); |
800 | if (ask ("Clear", 1)) { | 804 | if (ask("Clear", 1)) { |
801 | *znr = 0; | 805 | *znr = 0; |
802 | block = 0; | 806 | block = 0; |
803 | *corrected = 1; | 807 | *corrected = 1; |
@@ -805,12 +809,12 @@ static int add_zone2 (unsigned int *znr, int *corrected) | |||
805 | } | 809 | } |
806 | if (!block) | 810 | if (!block) |
807 | return 0; | 811 | return 0; |
808 | if (!zone_in_use (block)) { | 812 | if (!zone_in_use(block)) { |
809 | printf ("Block %d in file `", block); | 813 | printf("Block %d in file `", block); |
810 | print_current_name (); | 814 | print_current_name(); |
811 | printf ("' is marked not in use."); | 815 | printf("' is marked not in use."); |
812 | if (ask ("Correct", 1)) | 816 | if (ask("Correct", 1)) |
813 | mark_zone (block); | 817 | mark_zone(block); |
814 | } | 818 | } |
815 | if (!++zone_count[block]) | 819 | if (!++zone_count[block]) |
816 | zone_count[block]--; | 820 | zone_count[block]--; |
@@ -818,182 +822,179 @@ static int add_zone2 (unsigned int *znr, int *corrected) | |||
818 | } | 822 | } |
819 | #endif | 823 | #endif |
820 | 824 | ||
821 | static void add_zone_ind(unsigned short * znr, int * corrected) | 825 | static void add_zone_ind(unsigned short *znr, int *corrected) |
822 | { | 826 | { |
823 | static char blk[BLOCK_SIZE]; | 827 | static char blk[BLOCK_SIZE]; |
824 | int i, chg_blk=0; | 828 | int i, chg_blk = 0; |
825 | int block; | 829 | int block; |
826 | 830 | ||
827 | block = add_zone(znr, corrected); | 831 | block = add_zone(znr, corrected); |
828 | if (!block) | 832 | if (!block) |
829 | return; | 833 | return; |
830 | read_block(block, blk); | 834 | read_block(block, blk); |
831 | for (i=0 ; i < (BLOCK_SIZE>>1) ; i++) | 835 | for (i = 0; i < (BLOCK_SIZE >> 1); i++) |
832 | add_zone(i + (unsigned short *) blk, &chg_blk); | 836 | add_zone(i + (unsigned short *) blk, &chg_blk); |
833 | if (chg_blk) | 837 | if (chg_blk) |
834 | write_block(block, blk); | 838 | write_block(block, blk); |
835 | } | 839 | } |
836 | 840 | ||
837 | #ifdef HAVE_MINIX2 | 841 | #ifdef HAVE_MINIX2 |
838 | static void | 842 | static void add_zone_ind2(unsigned int *znr, int *corrected) |
839 | add_zone_ind2 (unsigned int *znr, int *corrected) | ||
840 | { | 843 | { |
841 | static char blk[BLOCK_SIZE]; | 844 | static char blk[BLOCK_SIZE]; |
842 | int i, chg_blk = 0; | 845 | int i, chg_blk = 0; |
843 | int block; | 846 | int block; |
844 | 847 | ||
845 | block = add_zone2 (znr, corrected); | 848 | block = add_zone2(znr, corrected); |
846 | if (!block) | 849 | if (!block) |
847 | return; | 850 | return; |
848 | read_block (block, blk); | 851 | read_block(block, blk); |
849 | for (i = 0; i < BLOCK_SIZE >> 2; i++) | 852 | for (i = 0; i < BLOCK_SIZE >> 2; i++) |
850 | add_zone2 (i + (unsigned int *) blk, &chg_blk); | 853 | add_zone2(i + (unsigned int *) blk, &chg_blk); |
851 | if (chg_blk) | 854 | if (chg_blk) |
852 | write_block (block, blk); | 855 | write_block(block, blk); |
853 | } | 856 | } |
854 | #endif | 857 | #endif |
855 | 858 | ||
856 | static void add_zone_dind(unsigned short * znr, int * corrected) | 859 | static void add_zone_dind(unsigned short *znr, int *corrected) |
857 | { | 860 | { |
858 | static char blk[BLOCK_SIZE]; | 861 | static char blk[BLOCK_SIZE]; |
859 | int i, blk_chg=0; | 862 | int i, blk_chg = 0; |
860 | int block; | 863 | int block; |
861 | 864 | ||
862 | block = add_zone(znr, corrected); | 865 | block = add_zone(znr, corrected); |
863 | if (!block) | 866 | if (!block) |
864 | return; | 867 | return; |
865 | read_block(block, blk); | 868 | read_block(block, blk); |
866 | for (i=0 ; i < (BLOCK_SIZE>>1) ; i++) | 869 | for (i = 0; i < (BLOCK_SIZE >> 1); i++) |
867 | add_zone_ind(i + (unsigned short *) blk, &blk_chg); | 870 | add_zone_ind(i + (unsigned short *) blk, &blk_chg); |
868 | if (blk_chg) | 871 | if (blk_chg) |
869 | write_block(block, blk); | 872 | write_block(block, blk); |
870 | } | 873 | } |
871 | 874 | ||
872 | #ifdef HAVE_MINIX2 | 875 | #ifdef HAVE_MINIX2 |
873 | static void | 876 | static void add_zone_dind2(unsigned int *znr, int *corrected) |
874 | add_zone_dind2 (unsigned int *znr, int *corrected) | ||
875 | { | 877 | { |
876 | static char blk[BLOCK_SIZE]; | 878 | static char blk[BLOCK_SIZE]; |
877 | int i, blk_chg = 0; | 879 | int i, blk_chg = 0; |
878 | int block; | 880 | int block; |
879 | 881 | ||
880 | block = add_zone2 (znr, corrected); | 882 | block = add_zone2(znr, corrected); |
881 | if (!block) | 883 | if (!block) |
882 | return; | 884 | return; |
883 | read_block (block, blk); | 885 | read_block(block, blk); |
884 | for (i = 0; i < BLOCK_SIZE >> 2; i++) | 886 | for (i = 0; i < BLOCK_SIZE >> 2; i++) |
885 | add_zone_ind2 (i + (unsigned int *) blk, &blk_chg); | 887 | add_zone_ind2(i + (unsigned int *) blk, &blk_chg); |
886 | if (blk_chg) | 888 | if (blk_chg) |
887 | write_block (block, blk); | 889 | write_block(block, blk); |
888 | } | 890 | } |
889 | 891 | ||
890 | static void | 892 | static void add_zone_tind2(unsigned int *znr, int *corrected) |
891 | add_zone_tind2 (unsigned int *znr, int *corrected) | ||
892 | { | 893 | { |
893 | static char blk[BLOCK_SIZE]; | 894 | static char blk[BLOCK_SIZE]; |
894 | int i, blk_chg = 0; | 895 | int i, blk_chg = 0; |
895 | int block; | 896 | int block; |
896 | 897 | ||
897 | block = add_zone2 (znr, corrected); | 898 | block = add_zone2(znr, corrected); |
898 | if (!block) | 899 | if (!block) |
899 | return; | 900 | return; |
900 | read_block (block, blk); | 901 | read_block(block, blk); |
901 | for (i = 0; i < BLOCK_SIZE >> 2; i++) | 902 | for (i = 0; i < BLOCK_SIZE >> 2; i++) |
902 | add_zone_dind2 (i + (unsigned int *) blk, &blk_chg); | 903 | add_zone_dind2(i + (unsigned int *) blk, &blk_chg); |
903 | if (blk_chg) | 904 | if (blk_chg) |
904 | write_block (block, blk); | 905 | write_block(block, blk); |
905 | } | 906 | } |
906 | #endif | 907 | #endif |
907 | 908 | ||
908 | static void check_zones(unsigned int i) | 909 | static void check_zones(unsigned int i) |
909 | { | 910 | { |
910 | struct minix_inode * inode; | 911 | struct minix_inode *inode; |
911 | 912 | ||
912 | if (!i || i > INODES) | 913 | if (!i || i > INODES) |
913 | return; | 914 | return; |
914 | if (inode_count[i] > 1) /* have we counted this file already? */ | 915 | if (inode_count[i] > 1) /* have we counted this file already? */ |
915 | return; | 916 | return; |
916 | inode = Inode + i; | 917 | inode = Inode + i; |
917 | if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) && | 918 | if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) && |
918 | !S_ISLNK(inode->i_mode)) | 919 | !S_ISLNK(inode->i_mode)) return; |
919 | return; | 920 | for (i = 0; i < 7; i++) |
920 | for (i=0 ; i<7 ; i++) | ||
921 | add_zone(i + inode->i_zone, &changed); | 921 | add_zone(i + inode->i_zone, &changed); |
922 | add_zone_ind(7 + inode->i_zone, &changed); | 922 | add_zone_ind(7 + inode->i_zone, &changed); |
923 | add_zone_dind(8 + inode->i_zone, &changed); | 923 | add_zone_dind(8 + inode->i_zone, &changed); |
924 | } | 924 | } |
925 | 925 | ||
926 | #ifdef HAVE_MINIX2 | 926 | #ifdef HAVE_MINIX2 |
927 | static void | 927 | static void check_zones2(unsigned int i) |
928 | check_zones2 (unsigned int i) | ||
929 | { | 928 | { |
930 | struct minix2_inode *inode; | 929 | struct minix2_inode *inode; |
931 | 930 | ||
932 | if (!i || i > INODES) | 931 | if (!i || i > INODES) |
933 | return; | 932 | return; |
934 | if (inode_count[i] > 1) /* have we counted this file already? */ | 933 | if (inode_count[i] > 1) /* have we counted this file already? */ |
935 | return; | 934 | return; |
936 | inode = Inode2 + i; | 935 | inode = Inode2 + i; |
937 | if (!S_ISDIR (inode->i_mode) && !S_ISREG (inode->i_mode) | 936 | if (!S_ISDIR(inode->i_mode) && !S_ISREG(inode->i_mode) |
938 | && !S_ISLNK (inode->i_mode)) | 937 | && !S_ISLNK(inode->i_mode)) |
939 | return; | 938 | return; |
940 | for (i = 0; i < 7; i++) | 939 | for (i = 0; i < 7; i++) |
941 | add_zone2 (i + inode->i_zone, &changed); | 940 | add_zone2(i + inode->i_zone, &changed); |
942 | add_zone_ind2 (7 + inode->i_zone, &changed); | 941 | add_zone_ind2(7 + inode->i_zone, &changed); |
943 | add_zone_dind2 (8 + inode->i_zone, &changed); | 942 | add_zone_dind2(8 + inode->i_zone, &changed); |
944 | add_zone_tind2 (9 + inode->i_zone, &changed); | 943 | add_zone_tind2(9 + inode->i_zone, &changed); |
945 | } | 944 | } |
946 | #endif | 945 | #endif |
947 | 946 | ||
948 | static void check_file(struct minix_inode * dir, unsigned int offset) | 947 | static void check_file(struct minix_inode *dir, unsigned int offset) |
949 | { | 948 | { |
950 | static char blk[BLOCK_SIZE]; | 949 | static char blk[BLOCK_SIZE]; |
951 | struct minix_inode * inode; | 950 | struct minix_inode *inode; |
952 | int ino; | 951 | int ino; |
953 | char * name; | 952 | char *name; |
954 | int block; | 953 | int block; |
955 | 954 | ||
956 | block = map_block(dir,offset/BLOCK_SIZE); | 955 | block = map_block(dir, offset / BLOCK_SIZE); |
957 | read_block(block, blk); | 956 | read_block(block, blk); |
958 | name = blk + (offset % BLOCK_SIZE) + 2; | 957 | name = blk + (offset % BLOCK_SIZE) + 2; |
959 | ino = * (unsigned short *) (name-2); | 958 | ino = *(unsigned short *) (name - 2); |
960 | if (ino > INODES) { | 959 | if (ino > INODES) { |
961 | print_current_name(); | 960 | print_current_name(); |
962 | printf(" contains a bad inode number for file '"); | 961 | printf(" contains a bad inode number for file '"); |
963 | printf("%.*s'.",namelen,name); | 962 | printf("%.*s'.", namelen, name); |
964 | if (ask(" Remove",1)) { | 963 | if (ask(" Remove", 1)) { |
965 | *(unsigned short *)(name-2) = 0; | 964 | *(unsigned short *) (name - 2) = 0; |
966 | write_block(block, blk); | 965 | write_block(block, blk); |
967 | } | 966 | } |
968 | ino = 0; | 967 | ino = 0; |
969 | } | 968 | } |
970 | if (name_depth < MAX_DEPTH) | 969 | if (name_depth < MAX_DEPTH) |
971 | strncpy (name_list[name_depth], name, namelen); | 970 | strncpy(name_list[name_depth], name, namelen); |
972 | name_depth++; | 971 | name_depth++; |
973 | inode = get_inode(ino); | 972 | inode = get_inode(ino); |
974 | name_depth--; | 973 | name_depth--; |
975 | if (!offset) { | 974 | if (!offset) { |
976 | if (!inode || strcmp(".",name)) { | 975 | if (!inode || strcmp(".", name)) { |
977 | print_current_name(); | 976 | print_current_name(); |
978 | printf(": bad directory: '.' isn't first\n"); | 977 | printf(": bad directory: '.' isn't first\n"); |
979 | errors_uncorrected = 1; | 978 | errors_uncorrected = 1; |
980 | } else return; | 979 | } else |
980 | return; | ||
981 | } | 981 | } |
982 | if (offset == dirsize) { | 982 | if (offset == dirsize) { |
983 | if (!inode || strcmp("..",name)) { | 983 | if (!inode || strcmp("..", name)) { |
984 | print_current_name(); | 984 | print_current_name(); |
985 | printf(": bad directory: '..' isn't second\n"); | 985 | printf(": bad directory: '..' isn't second\n"); |
986 | errors_uncorrected = 1; | 986 | errors_uncorrected = 1; |
987 | } else return; | 987 | } else |
988 | return; | ||
988 | } | 989 | } |
989 | if (!inode) | 990 | if (!inode) |
990 | return; | 991 | return; |
991 | if (name_depth < MAX_DEPTH) | 992 | if (name_depth < MAX_DEPTH) |
992 | strncpy(name_list[name_depth],name,namelen); | 993 | strncpy(name_list[name_depth], name, namelen); |
993 | name_depth++; | 994 | name_depth++; |
994 | if (list) { | 995 | if (list) { |
995 | if (verbose) | 996 | if (verbose) |
996 | printf("%6d %07o %3d ",ino,inode->i_mode,inode->i_nlinks); | 997 | printf("%6d %07o %3d ", ino, inode->i_mode, inode->i_nlinks); |
997 | print_current_name(); | 998 | print_current_name(); |
998 | if (S_ISDIR(inode->i_mode)) | 999 | if (S_ISDIR(inode->i_mode)) |
999 | printf(":\n"); | 1000 | printf(":\n"); |
@@ -1008,8 +1009,7 @@ static void check_file(struct minix_inode * dir, unsigned int offset) | |||
1008 | } | 1009 | } |
1009 | 1010 | ||
1010 | #ifdef HAVE_MINIX2 | 1011 | #ifdef HAVE_MINIX2 |
1011 | static void | 1012 | static void check_file2(struct minix2_inode *dir, unsigned int offset) |
1012 | check_file2 (struct minix2_inode *dir, unsigned int offset) | ||
1013 | { | 1013 | { |
1014 | static char blk[BLOCK_SIZE]; | 1014 | static char blk[BLOCK_SIZE]; |
1015 | struct minix2_inode *inode; | 1015 | struct minix2_inode *inode; |
@@ -1017,37 +1017,37 @@ check_file2 (struct minix2_inode *dir, unsigned int offset) | |||
1017 | char *name; | 1017 | char *name; |
1018 | int block; | 1018 | int block; |
1019 | 1019 | ||
1020 | block = map_block2 (dir, offset / BLOCK_SIZE); | 1020 | block = map_block2(dir, offset / BLOCK_SIZE); |
1021 | read_block (block, blk); | 1021 | read_block(block, blk); |
1022 | name = blk + (offset % BLOCK_SIZE) + 2; | 1022 | name = blk + (offset % BLOCK_SIZE) + 2; |
1023 | ino = *(unsigned short *) (name - 2); | 1023 | ino = *(unsigned short *) (name - 2); |
1024 | if (ino > INODES) { | 1024 | if (ino > INODES) { |
1025 | print_current_name (); | 1025 | print_current_name(); |
1026 | printf (" contains a bad inode number for file '"); | 1026 | printf(" contains a bad inode number for file '"); |
1027 | printf ("%.*s'.", namelen, name); | 1027 | printf("%.*s'.", namelen, name); |
1028 | if (ask (" Remove", 1)) { | 1028 | if (ask(" Remove", 1)) { |
1029 | *(unsigned short *) (name - 2) = 0; | 1029 | *(unsigned short *) (name - 2) = 0; |
1030 | write_block (block, blk); | 1030 | write_block(block, blk); |
1031 | } | 1031 | } |
1032 | ino = 0; | 1032 | ino = 0; |
1033 | } | 1033 | } |
1034 | if (name_depth < MAX_DEPTH) | 1034 | if (name_depth < MAX_DEPTH) |
1035 | strncpy (name_list[name_depth], name, namelen); | 1035 | strncpy(name_list[name_depth], name, namelen); |
1036 | name_depth++; | 1036 | name_depth++; |
1037 | inode = get_inode2 (ino); | 1037 | inode = get_inode2(ino); |
1038 | name_depth--; | 1038 | name_depth--; |
1039 | if (!offset) { | 1039 | if (!offset) { |
1040 | if (!inode || strcmp (".", name)) { | 1040 | if (!inode || strcmp(".", name)) { |
1041 | print_current_name (); | 1041 | print_current_name(); |
1042 | printf (": bad directory: '.' isn't first\n"); | 1042 | printf(": bad directory: '.' isn't first\n"); |
1043 | errors_uncorrected = 1; | 1043 | errors_uncorrected = 1; |
1044 | } else | 1044 | } else |
1045 | return; | 1045 | return; |
1046 | } | 1046 | } |
1047 | if (offset == dirsize) { | 1047 | if (offset == dirsize) { |
1048 | if (!inode || strcmp ("..", name)) { | 1048 | if (!inode || strcmp("..", name)) { |
1049 | print_current_name (); | 1049 | print_current_name(); |
1050 | printf (": bad directory: '..' isn't second\n"); | 1050 | printf(": bad directory: '..' isn't second\n"); |
1051 | errors_uncorrected = 1; | 1051 | errors_uncorrected = 1; |
1052 | } else | 1052 | } else |
1053 | return; | 1053 | return; |
@@ -1057,16 +1057,16 @@ check_file2 (struct minix2_inode *dir, unsigned int offset) | |||
1057 | name_depth++; | 1057 | name_depth++; |
1058 | if (list) { | 1058 | if (list) { |
1059 | if (verbose) | 1059 | if (verbose) |
1060 | printf ("%6d %07o %3d ", ino, inode->i_mode, inode->i_nlinks); | 1060 | printf("%6d %07o %3d ", ino, inode->i_mode, inode->i_nlinks); |
1061 | print_current_name (); | 1061 | print_current_name(); |
1062 | if (S_ISDIR (inode->i_mode)) | 1062 | if (S_ISDIR(inode->i_mode)) |
1063 | printf (":\n"); | 1063 | printf(":\n"); |
1064 | else | 1064 | else |
1065 | printf ("\n"); | 1065 | printf("\n"); |
1066 | } | 1066 | } |
1067 | check_zones2 (ino); | 1067 | check_zones2(ino); |
1068 | if (inode && S_ISDIR (inode->i_mode)) | 1068 | if (inode && S_ISDIR(inode->i_mode)) |
1069 | recursive_check2 (ino); | 1069 | recursive_check2(ino); |
1070 | name_depth--; | 1070 | name_depth--; |
1071 | return; | 1071 | return; |
1072 | } | 1072 | } |
@@ -1074,7 +1074,7 @@ check_file2 (struct minix2_inode *dir, unsigned int offset) | |||
1074 | 1074 | ||
1075 | static void recursive_check(unsigned int ino) | 1075 | static void recursive_check(unsigned int ino) |
1076 | { | 1076 | { |
1077 | struct minix_inode * dir; | 1077 | struct minix_inode *dir; |
1078 | unsigned int offset; | 1078 | unsigned int offset; |
1079 | 1079 | ||
1080 | dir = Inode + ino; | 1080 | dir = Inode + ino; |
@@ -1085,27 +1085,26 @@ static void recursive_check(unsigned int ino) | |||
1085 | printf(": bad directory: size<32"); | 1085 | printf(": bad directory: size<32"); |
1086 | errors_uncorrected = 1; | 1086 | errors_uncorrected = 1; |
1087 | } | 1087 | } |
1088 | for (offset = 0 ; offset < dir->i_size ; offset += dirsize) | 1088 | for (offset = 0; offset < dir->i_size; offset += dirsize) |
1089 | check_file(dir,offset); | 1089 | check_file(dir, offset); |
1090 | } | 1090 | } |
1091 | 1091 | ||
1092 | #ifdef HAVE_MINIX2 | 1092 | #ifdef HAVE_MINIX2 |
1093 | static void | 1093 | static void recursive_check2(unsigned int ino) |
1094 | recursive_check2 (unsigned int ino) | ||
1095 | { | 1094 | { |
1096 | struct minix2_inode *dir; | 1095 | struct minix2_inode *dir; |
1097 | unsigned int offset; | 1096 | unsigned int offset; |
1098 | 1097 | ||
1099 | dir = Inode2 + ino; | 1098 | dir = Inode2 + ino; |
1100 | if (!S_ISDIR (dir->i_mode)) | 1099 | if (!S_ISDIR(dir->i_mode)) |
1101 | die ("internal error"); | 1100 | die("internal error"); |
1102 | if (dir->i_size < 2 * dirsize) { | 1101 | if (dir->i_size < 2 * dirsize) { |
1103 | print_current_name (); | 1102 | print_current_name(); |
1104 | printf (": bad directory: size < 32"); | 1103 | printf(": bad directory: size < 32"); |
1105 | errors_uncorrected = 1; | 1104 | errors_uncorrected = 1; |
1106 | } | 1105 | } |
1107 | for (offset = 0; offset < dir->i_size; offset += dirsize) | 1106 | for (offset = 0; offset < dir->i_size; offset += dirsize) |
1108 | check_file2 (dir, offset); | 1107 | check_file2(dir, offset); |
1109 | } | 1108 | } |
1110 | #endif | 1109 | #endif |
1111 | 1110 | ||
@@ -1113,7 +1112,7 @@ static int bad_zone(int i) | |||
1113 | { | 1112 | { |
1114 | char buffer[1024]; | 1113 | char buffer[1024]; |
1115 | 1114 | ||
1116 | if (BLOCK_SIZE*i != lseek(IN, BLOCK_SIZE*i, SEEK_SET)) | 1115 | if (BLOCK_SIZE * i != lseek(IN, BLOCK_SIZE * i, SEEK_SET)) |
1117 | die("seek failed in bad_zone"); | 1116 | die("seek failed in bad_zone"); |
1118 | return (BLOCK_SIZE != read(IN, buffer, BLOCK_SIZE)); | 1117 | return (BLOCK_SIZE != read(IN, buffer, BLOCK_SIZE)); |
1119 | } | 1118 | } |
@@ -1122,10 +1121,10 @@ static void check_counts(void) | |||
1122 | { | 1121 | { |
1123 | int i; | 1122 | int i; |
1124 | 1123 | ||
1125 | for (i=1 ; i <= INODES ; i++) { | 1124 | for (i = 1; i <= INODES; i++) { |
1126 | if (!inode_in_use(i) && Inode[i].i_mode && warn_mode) { | 1125 | if (!inode_in_use(i) && Inode[i].i_mode && warn_mode) { |
1127 | printf("Inode %d mode not cleared.",i); | 1126 | printf("Inode %d mode not cleared.", i); |
1128 | if (ask("Clear",1)) { | 1127 | if (ask("Clear", 1)) { |
1129 | Inode[i].i_mode = 0; | 1128 | Inode[i].i_mode = 0; |
1130 | changed = 1; | 1129 | changed = 1; |
1131 | } | 1130 | } |
@@ -1133,117 +1132,115 @@ static void check_counts(void) | |||
1133 | if (!inode_count[i]) { | 1132 | if (!inode_count[i]) { |
1134 | if (!inode_in_use(i)) | 1133 | if (!inode_in_use(i)) |
1135 | continue; | 1134 | continue; |
1136 | printf("Inode %d not used, marked used in the bitmap.",i); | 1135 | printf("Inode %d not used, marked used in the bitmap.", i); |
1137 | if (ask("Clear",1)) | 1136 | if (ask("Clear", 1)) |
1138 | unmark_inode(i); | 1137 | unmark_inode(i); |
1139 | continue; | 1138 | continue; |
1140 | } | 1139 | } |
1141 | if (!inode_in_use(i)) { | 1140 | if (!inode_in_use(i)) { |
1142 | printf("Inode %d used, marked unused in the bitmap.", i); | 1141 | printf("Inode %d used, marked unused in the bitmap.", i); |
1143 | if (ask("Set",1)) | 1142 | if (ask("Set", 1)) |
1144 | mark_inode(i); | 1143 | mark_inode(i); |
1145 | } | 1144 | } |
1146 | if (Inode[i].i_nlinks != inode_count[i]) { | 1145 | if (Inode[i].i_nlinks != inode_count[i]) { |
1147 | printf("Inode %d (mode = %07o), i_nlinks=%d, counted=%d.", | 1146 | printf("Inode %d (mode = %07o), i_nlinks=%d, counted=%d.", |
1148 | i,Inode[i].i_mode,Inode[i].i_nlinks,inode_count[i]); | 1147 | i, Inode[i].i_mode, Inode[i].i_nlinks, inode_count[i]); |
1149 | if (ask("Set i_nlinks to count",1)) { | 1148 | if (ask("Set i_nlinks to count", 1)) { |
1150 | Inode[i].i_nlinks=inode_count[i]; | 1149 | Inode[i].i_nlinks = inode_count[i]; |
1151 | changed=1; | 1150 | changed = 1; |
1152 | } | 1151 | } |
1153 | } | 1152 | } |
1154 | } | 1153 | } |
1155 | for (i=FIRSTZONE ; i < ZONES ; i++) { | 1154 | for (i = FIRSTZONE; i < ZONES; i++) { |
1156 | if (zone_in_use(i) == zone_count[i]) | 1155 | if (zone_in_use(i) == zone_count[i]) |
1157 | continue; | 1156 | continue; |
1158 | if (!zone_count[i]) { | 1157 | if (!zone_count[i]) { |
1159 | if (bad_zone(i)) | 1158 | if (bad_zone(i)) |
1160 | continue; | 1159 | continue; |
1161 | printf("Zone %d: marked in use, no file uses it.",i); | 1160 | printf("Zone %d: marked in use, no file uses it.", i); |
1162 | if (ask("Unmark",1)) | 1161 | if (ask("Unmark", 1)) |
1163 | unmark_zone(i); | 1162 | unmark_zone(i); |
1164 | continue; | 1163 | continue; |
1165 | } | 1164 | } |
1166 | printf("Zone %d: %sin use, counted=%d\n", | 1165 | printf("Zone %d: %sin use, counted=%d\n", |
1167 | i,zone_in_use(i)?"":"not ",zone_count[i]); | 1166 | i, zone_in_use(i) ? "" : "not ", zone_count[i]); |
1168 | } | 1167 | } |
1169 | } | 1168 | } |
1170 | 1169 | ||
1171 | #ifdef HAVE_MINIX2 | 1170 | #ifdef HAVE_MINIX2 |
1172 | static void | 1171 | static void check_counts2(void) |
1173 | check_counts2 (void) | ||
1174 | { | 1172 | { |
1175 | int i; | 1173 | int i; |
1176 | 1174 | ||
1177 | for (i = 1; i <= INODES; i++) { | 1175 | for (i = 1; i <= INODES; i++) { |
1178 | if (!inode_in_use (i) && Inode2[i].i_mode && warn_mode) { | 1176 | if (!inode_in_use(i) && Inode2[i].i_mode && warn_mode) { |
1179 | printf ("Inode %d mode not cleared.", i); | 1177 | printf("Inode %d mode not cleared.", i); |
1180 | if (ask ("Clear", 1)) { | 1178 | if (ask("Clear", 1)) { |
1181 | Inode2[i].i_mode = 0; | 1179 | Inode2[i].i_mode = 0; |
1182 | changed = 1; | 1180 | changed = 1; |
1183 | } | 1181 | } |
1184 | } | 1182 | } |
1185 | if (!inode_count[i]) { | 1183 | if (!inode_count[i]) { |
1186 | if (!inode_in_use (i)) | 1184 | if (!inode_in_use(i)) |
1187 | continue; | 1185 | continue; |
1188 | printf ("Inode %d not used, marked used in the bitmap.", i); | 1186 | printf("Inode %d not used, marked used in the bitmap.", i); |
1189 | if (ask ("Clear", 1)) | 1187 | if (ask("Clear", 1)) |
1190 | unmark_inode (i); | 1188 | unmark_inode(i); |
1191 | continue; | 1189 | continue; |
1192 | } | 1190 | } |
1193 | if (!inode_in_use (i)) { | 1191 | if (!inode_in_use(i)) { |
1194 | printf ("Inode %d used, marked unused in the bitmap.", i); | 1192 | printf("Inode %d used, marked unused in the bitmap.", i); |
1195 | if (ask ("Set", 1)) | 1193 | if (ask("Set", 1)) |
1196 | mark_inode (i); | 1194 | mark_inode(i); |
1197 | } | 1195 | } |
1198 | if (Inode2[i].i_nlinks != inode_count[i]) { | 1196 | if (Inode2[i].i_nlinks != inode_count[i]) { |
1199 | printf ("Inode %d (mode = %07o), i_nlinks=%d, counted=%d.", | 1197 | printf("Inode %d (mode = %07o), i_nlinks=%d, counted=%d.", |
1200 | i, Inode2[i].i_mode, Inode2[i].i_nlinks, inode_count[i]); | 1198 | i, Inode2[i].i_mode, Inode2[i].i_nlinks, |
1201 | if (ask ("Set i_nlinks to count", 1)) { | 1199 | inode_count[i]); |
1200 | if (ask("Set i_nlinks to count", 1)) { | ||
1202 | Inode2[i].i_nlinks = inode_count[i]; | 1201 | Inode2[i].i_nlinks = inode_count[i]; |
1203 | changed = 1; | 1202 | changed = 1; |
1204 | } | 1203 | } |
1205 | } | 1204 | } |
1206 | } | 1205 | } |
1207 | for (i = FIRSTZONE; i < ZONES; i++) { | 1206 | for (i = FIRSTZONE; i < ZONES; i++) { |
1208 | if (zone_in_use (i) == zone_count[i]) | 1207 | if (zone_in_use(i) == zone_count[i]) |
1209 | continue; | 1208 | continue; |
1210 | if (!zone_count[i]) { | 1209 | if (!zone_count[i]) { |
1211 | if (bad_zone (i)) | 1210 | if (bad_zone(i)) |
1212 | continue; | 1211 | continue; |
1213 | printf ("Zone %d: marked in use, no file uses it.", i); | 1212 | printf("Zone %d: marked in use, no file uses it.", i); |
1214 | if (ask ("Unmark", 1)) | 1213 | if (ask("Unmark", 1)) |
1215 | unmark_zone (i); | 1214 | unmark_zone(i); |
1216 | continue; | 1215 | continue; |
1217 | } | 1216 | } |
1218 | printf ("Zone %d: %sin use, counted=%d\n", | 1217 | printf("Zone %d: %sin use, counted=%d\n", |
1219 | i, zone_in_use (i) ? "" : "not ", zone_count[i]); | 1218 | i, zone_in_use(i) ? "" : "not ", zone_count[i]); |
1220 | } | 1219 | } |
1221 | } | 1220 | } |
1222 | #endif | 1221 | #endif |
1223 | 1222 | ||
1224 | static void check(void) | 1223 | static void check(void) |
1225 | { | 1224 | { |
1226 | memset(inode_count,0,(INODES + 1) * sizeof(*inode_count)); | 1225 | memset(inode_count, 0, (INODES + 1) * sizeof(*inode_count)); |
1227 | memset(zone_count,0,ZONES*sizeof(*zone_count)); | 1226 | memset(zone_count, 0, ZONES * sizeof(*zone_count)); |
1228 | check_zones(ROOT_INO); | 1227 | check_zones(ROOT_INO); |
1229 | recursive_check(ROOT_INO); | 1228 | recursive_check(ROOT_INO); |
1230 | check_counts(); | 1229 | check_counts(); |
1231 | } | 1230 | } |
1232 | 1231 | ||
1233 | #ifdef HAVE_MINIX2 | 1232 | #ifdef HAVE_MINIX2 |
1234 | static void | 1233 | static void check2(void) |
1235 | check2 (void) | ||
1236 | { | 1234 | { |
1237 | memset (inode_count, 0, (INODES + 1) * sizeof (*inode_count)); | 1235 | memset(inode_count, 0, (INODES + 1) * sizeof(*inode_count)); |
1238 | memset (zone_count, 0, ZONES * sizeof (*zone_count)); | 1236 | memset(zone_count, 0, ZONES * sizeof(*zone_count)); |
1239 | check_zones2 (ROOT_INO); | 1237 | check_zones2(ROOT_INO); |
1240 | recursive_check2 (ROOT_INO); | 1238 | recursive_check2(ROOT_INO); |
1241 | check_counts2 (); | 1239 | check_counts2(); |
1242 | } | 1240 | } |
1243 | #endif | 1241 | #endif |
1244 | 1242 | ||
1245 | extern int | 1243 | extern int fsck_minix_main(int argc, char **argv) |
1246 | fsck_minix_main(int argc, char ** argv) | ||
1247 | { | 1244 | { |
1248 | struct termios tmp; | 1245 | struct termios tmp; |
1249 | int count; | 1246 | int count; |
@@ -1264,29 +1261,47 @@ fsck_minix_main(int argc, char ** argv) | |||
1264 | show_usage(); | 1261 | show_usage(); |
1265 | else | 1262 | else |
1266 | device_name = argv[0]; | 1263 | device_name = argv[0]; |
1267 | } else while (*++argv[0]) | 1264 | } else |
1268 | switch (argv[0][0]) { | 1265 | while (*++argv[0]) |
1269 | case 'l': list=1; break; | 1266 | switch (argv[0][0]) { |
1270 | case 'a': automatic=1; repair=1; break; | 1267 | case 'l': |
1271 | case 'r': automatic=0; repair=1; break; | 1268 | list = 1; |
1272 | case 'v': verbose=1; break; | 1269 | break; |
1273 | case 's': show=1; break; | 1270 | case 'a': |
1274 | case 'm': warn_mode=1; break; | 1271 | automatic = 1; |
1275 | case 'f': force=1; break; | 1272 | repair = 1; |
1276 | default: show_usage(); | 1273 | break; |
1277 | } | 1274 | case 'r': |
1275 | automatic = 0; | ||
1276 | repair = 1; | ||
1277 | break; | ||
1278 | case 'v': | ||
1279 | verbose = 1; | ||
1280 | break; | ||
1281 | case 's': | ||
1282 | show = 1; | ||
1283 | break; | ||
1284 | case 'm': | ||
1285 | warn_mode = 1; | ||
1286 | break; | ||
1287 | case 'f': | ||
1288 | force = 1; | ||
1289 | break; | ||
1290 | default: | ||
1291 | show_usage(); | ||
1292 | } | ||
1278 | } | 1293 | } |
1279 | if (!device_name) | 1294 | if (!device_name) |
1280 | show_usage(); | 1295 | show_usage(); |
1281 | check_mount(); /* trying to check a mounted filesystem? */ | 1296 | check_mount(); /* trying to check a mounted filesystem? */ |
1282 | if (repair && !automatic) { | 1297 | if (repair && !automatic) { |
1283 | if (!isatty(0) || !isatty(1)) | 1298 | if (!isatty(0) || !isatty(1)) |
1284 | die("need terminal for interactive repairs"); | 1299 | die("need terminal for interactive repairs"); |
1285 | } | 1300 | } |
1286 | IN = open(device_name,repair?O_RDWR:O_RDONLY); | 1301 | IN = open(device_name, repair ? O_RDWR : O_RDONLY); |
1287 | if (IN < 0) | 1302 | if (IN < 0) |
1288 | die("unable to open '%s'"); | 1303 | die("unable to open '%s'"); |
1289 | for (count=0 ; count<3 ; count++) | 1304 | for (count = 0; count < 3; count++) |
1290 | sync(); | 1305 | sync(); |
1291 | read_superblock(); | 1306 | read_superblock(); |
1292 | 1307 | ||
@@ -1297,80 +1312,77 @@ fsck_minix_main(int argc, char ** argv) | |||
1297 | * command line. | 1312 | * command line. |
1298 | */ | 1313 | */ |
1299 | printf("%s, %s\n", program_name, program_version); | 1314 | printf("%s, %s\n", program_name, program_version); |
1300 | if ( !(Super.s_state & MINIX_ERROR_FS) && | 1315 | if (!(Super.s_state & MINIX_ERROR_FS) && |
1301 | (Super.s_state & MINIX_VALID_FS) && | 1316 | (Super.s_state & MINIX_VALID_FS) && !force) { |
1302 | !force ) { | ||
1303 | if (repair) | 1317 | if (repair) |
1304 | printf("%s is clean, no check.\n", device_name); | 1318 | printf("%s is clean, no check.\n", device_name); |
1305 | return retcode; | 1319 | return retcode; |
1306 | } | 1320 | } else if (force) |
1307 | else if (force) | ||
1308 | printf("Forcing filesystem check on %s.\n", device_name); | 1321 | printf("Forcing filesystem check on %s.\n", device_name); |
1309 | else if (repair) | 1322 | else if (repair) |
1310 | printf("Filesystem on %s is dirty, needs checking.\n",\ | 1323 | printf("Filesystem on %s is dirty, needs checking.\n", |
1311 | device_name); | 1324 | device_name); |
1312 | 1325 | ||
1313 | read_tables(); | 1326 | read_tables(); |
1314 | 1327 | ||
1315 | if (repair && !automatic) { | 1328 | if (repair && !automatic) { |
1316 | tcgetattr(0,&termios); | 1329 | tcgetattr(0, &termios); |
1317 | tmp = termios; | 1330 | tmp = termios; |
1318 | tmp.c_lflag &= ~(ICANON|ECHO); | 1331 | tmp.c_lflag &= ~(ICANON | ECHO); |
1319 | tcsetattr(0,TCSANOW,&tmp); | 1332 | tcsetattr(0, TCSANOW, &tmp); |
1320 | termios_set = 1; | 1333 | termios_set = 1; |
1321 | } | 1334 | } |
1322 | |||
1323 | #if HAVE_MINIX2 | 1335 | #if HAVE_MINIX2 |
1324 | if (version2) { | 1336 | if (version2) { |
1325 | check_root2 (); | 1337 | check_root2(); |
1326 | check2 (); | 1338 | check2(); |
1327 | } else | 1339 | } else |
1328 | #endif | 1340 | #endif |
1329 | { | 1341 | { |
1330 | check_root(); | 1342 | check_root(); |
1331 | check(); | 1343 | check(); |
1332 | } | 1344 | } |
1333 | if (verbose) { | 1345 | if (verbose) { |
1334 | int i, free; | 1346 | int i, free; |
1335 | 1347 | ||
1336 | for (i=1,free=0 ; i <= INODES ; i++) | 1348 | for (i = 1, free = 0; i <= INODES; i++) |
1337 | if (!inode_in_use(i)) | 1349 | if (!inode_in_use(i)) |
1338 | free++; | 1350 | free++; |
1339 | printf("\n%6ld inodes used (%ld%%)\n",(INODES-free), | 1351 | printf("\n%6ld inodes used (%ld%%)\n", (INODES - free), |
1340 | 100*(INODES-free)/INODES); | 1352 | 100 * (INODES - free) / INODES); |
1341 | for (i=FIRSTZONE,free=0 ; i < ZONES ; i++) | 1353 | for (i = FIRSTZONE, free = 0; i < ZONES; i++) |
1342 | if (!zone_in_use(i)) | 1354 | if (!zone_in_use(i)) |
1343 | free++; | 1355 | free++; |
1344 | printf("%6ld zones used (%ld%%)\n",(ZONES-free), | 1356 | printf("%6ld zones used (%ld%%)\n", (ZONES - free), |
1345 | 100*(ZONES-free)/ZONES); | 1357 | 100 * (ZONES - free) / ZONES); |
1346 | printf("\n%6d regular files\n" | 1358 | printf("\n%6d regular files\n" |
1347 | "%6d directories\n" | 1359 | "%6d directories\n" |
1348 | "%6d character device files\n" | 1360 | "%6d character device files\n" |
1349 | "%6d block device files\n" | 1361 | "%6d block device files\n" |
1350 | "%6d links\n" | 1362 | "%6d links\n" |
1351 | "%6d symbolic links\n" | 1363 | "%6d symbolic links\n" |
1352 | "------\n" | 1364 | "------\n" |
1353 | "%6d files\n", | 1365 | "%6d files\n", |
1354 | regular,directory,chardev,blockdev, | 1366 | regular, directory, chardev, blockdev, |
1355 | links-2*directory+1,symlinks,total-2*directory+1); | 1367 | links - 2 * directory + 1, symlinks, |
1368 | total - 2 * directory + 1); | ||
1356 | } | 1369 | } |
1357 | if (changed) { | 1370 | if (changed) { |
1358 | write_tables(); | 1371 | write_tables(); |
1359 | printf( "----------------------------\n" | 1372 | printf("----------------------------\n" |
1360 | "FILE SYSTEM HAS BEEN CHANGED\n" | 1373 | "FILE SYSTEM HAS BEEN CHANGED\n" |
1361 | "----------------------------\n"); | 1374 | "----------------------------\n"); |
1362 | for (count=0 ; count<3 ; count++) | 1375 | for (count = 0; count < 3; count++) |
1363 | sync(); | 1376 | sync(); |
1364 | } | 1377 | } else if (repair) |
1365 | else if ( repair ) | ||
1366 | write_super_block(); | 1378 | write_super_block(); |
1367 | 1379 | ||
1368 | if (repair && !automatic) | 1380 | if (repair && !automatic) |
1369 | tcsetattr(0,TCSANOW,&termios); | 1381 | tcsetattr(0, TCSANOW, &termios); |
1370 | 1382 | ||
1371 | if (changed) | 1383 | if (changed) |
1372 | retcode += 3; | 1384 | retcode += 3; |
1373 | if (errors_uncorrected) | 1385 | if (errors_uncorrected) |
1374 | retcode += 4; | 1386 | retcode += 4; |
1375 | return retcode; | 1387 | return retcode; |
1376 | } | 1388 | } |
diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c index b90d3a700..4435cb64a 100644 --- a/util-linux/mkfs_minix.c +++ b/util-linux/mkfs_minix.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * mkfs.c - make a linux (minix) file-system. | 3 | * mkfs.c - make a linux (minix) file-system. |
3 | * | 4 | * |
@@ -107,27 +108,30 @@ | |||
107 | 108 | ||
108 | #define BITS_PER_BLOCK (BLOCK_SIZE<<3) | 109 | #define BITS_PER_BLOCK (BLOCK_SIZE<<3) |
109 | 110 | ||
110 | static char * program_name = "mkfs"; | 111 | static char *program_name = "mkfs"; |
111 | static char * device_name = NULL; | 112 | static char *device_name = NULL; |
112 | static int DEV = -1; | 113 | static int DEV = -1; |
113 | static long BLOCKS = 0; | 114 | static long BLOCKS = 0; |
114 | static int check = 0; | 115 | static int check = 0; |
115 | static int badblocks = 0; | 116 | static int badblocks = 0; |
116 | static int namelen = 30; /* default (changed to 30, per Linus's | 117 | static int namelen = 30; /* default (changed to 30, per Linus's |
117 | suggestion, Sun Nov 21 08:05:07 1993) */ | 118 | |
119 | suggestion, Sun Nov 21 08:05:07 1993) */ | ||
118 | static int dirsize = 32; | 120 | static int dirsize = 32; |
119 | static int magic = MINIX_SUPER_MAGIC2; | 121 | static int magic = MINIX_SUPER_MAGIC2; |
120 | static int version2 = 0; | 122 | static int version2 = 0; |
121 | 123 | ||
122 | static char root_block[BLOCK_SIZE] = "\0"; | 124 | static char root_block[BLOCK_SIZE] = "\0"; |
123 | 125 | ||
124 | static char * inode_buffer = NULL; | 126 | static char *inode_buffer = NULL; |
127 | |||
125 | #define Inode (((struct minix_inode *) inode_buffer)-1) | 128 | #define Inode (((struct minix_inode *) inode_buffer)-1) |
126 | #ifdef HAVE_MINIX2 | 129 | #ifdef HAVE_MINIX2 |
127 | #define Inode2 (((struct minix2_inode *) inode_buffer)-1) | 130 | #define Inode2 (((struct minix2_inode *) inode_buffer)-1) |
128 | #endif | 131 | #endif |
129 | static char super_block_buffer[BLOCK_SIZE]; | 132 | static char super_block_buffer[BLOCK_SIZE]; |
130 | static char boot_block_buffer[512]; | 133 | static char boot_block_buffer[512]; |
134 | |||
131 | #define Super (*(struct minix_super_block *)super_block_buffer) | 135 | #define Super (*(struct minix_super_block *)super_block_buffer) |
132 | #define INODES ((unsigned long)Super.s_ninodes) | 136 | #define INODES ((unsigned long)Super.s_ninodes) |
133 | #ifdef HAVE_MINIX2 | 137 | #ifdef HAVE_MINIX2 |
@@ -164,21 +168,28 @@ static unsigned long req_nr_inodes = 0; | |||
164 | * to compile this under minix, volatile gives a warning, as | 168 | * to compile this under minix, volatile gives a warning, as |
165 | * exit() isn't defined as volatile under minix. | 169 | * exit() isn't defined as volatile under minix. |
166 | */ | 170 | */ |
167 | static volatile void die(char *str) { | 171 | static volatile void die(char *str) |
172 | { | ||
168 | fprintf(stderr, "%s: %s\n", program_name, str); | 173 | fprintf(stderr, "%s: %s\n", program_name, str); |
169 | exit(8); | 174 | exit(8); |
170 | } | 175 | } |
171 | 176 | ||
172 | static volatile void show_usage() | 177 | static volatile void show_usage() |
173 | { | 178 | { |
174 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", BB_VER, BB_BT); | 179 | fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n", |
175 | fprintf(stderr, "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n\n", program_name); | 180 | BB_VER, BB_BT); |
181 | fprintf(stderr, | ||
182 | "Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]\n\n", | ||
183 | program_name); | ||
176 | fprintf(stderr, "Make a MINIX filesystem.\n\n"); | 184 | fprintf(stderr, "Make a MINIX filesystem.\n\n"); |
177 | fprintf(stderr, "OPTIONS:\n"); | 185 | fprintf(stderr, "OPTIONS:\n"); |
178 | fprintf(stderr, "\t-c\t\tCheck the device for bad blocks\n"); | 186 | fprintf(stderr, "\t-c\t\tCheck the device for bad blocks\n"); |
179 | fprintf(stderr, "\t-n [14|30]\tSpecify the maximum length of filenames\n"); | 187 | fprintf(stderr, |
180 | fprintf(stderr, "\t-i\t\tSpecify the number of inodes for the filesystem\n"); | 188 | "\t-n [14|30]\tSpecify the maximum length of filenames\n"); |
181 | fprintf(stderr, "\t-l FILENAME\tRead the bad blocks list from FILENAME\n"); | 189 | fprintf(stderr, |
190 | "\t-i\t\tSpecify the number of inodes for the filesystem\n"); | ||
191 | fprintf(stderr, | ||
192 | "\t-l FILENAME\tRead the bad blocks list from FILENAME\n"); | ||
182 | fprintf(stderr, "\t-v\t\tMake a Minix version 2 filesystem\n\n"); | 193 | fprintf(stderr, "\t-v\t\tMake a Minix version 2 filesystem\n\n"); |
183 | exit(16); | 194 | exit(16); |
184 | } | 195 | } |
@@ -190,56 +201,55 @@ static volatile void show_usage() | |||
190 | */ | 201 | */ |
191 | static void check_mount(void) | 202 | static void check_mount(void) |
192 | { | 203 | { |
193 | FILE * f; | 204 | FILE *f; |
194 | struct mntent * mnt; | 205 | struct mntent *mnt; |
195 | 206 | ||
196 | if ((f = setmntent (MOUNTED, "r")) == NULL) | 207 | if ((f = setmntent(MOUNTED, "r")) == NULL) |
197 | return; | 208 | return; |
198 | while ((mnt = getmntent (f)) != NULL) | 209 | while ((mnt = getmntent(f)) != NULL) |
199 | if (strcmp (device_name, mnt->mnt_fsname) == 0) | 210 | if (strcmp(device_name, mnt->mnt_fsname) == 0) |
200 | break; | 211 | break; |
201 | endmntent (f); | 212 | endmntent(f); |
202 | if (!mnt) | 213 | if (!mnt) |
203 | return; | 214 | return; |
204 | 215 | ||
205 | die("%s is mounted; will not make a filesystem here!"); | 216 | die("%s is mounted; will not make a filesystem here!"); |
206 | } | 217 | } |
207 | 218 | ||
208 | static long valid_offset (int fd, int offset) | 219 | static long valid_offset(int fd, int offset) |
209 | { | 220 | { |
210 | char ch; | 221 | char ch; |
211 | 222 | ||
212 | if (lseek (fd, offset, 0) < 0) | 223 | if (lseek(fd, offset, 0) < 0) |
213 | return 0; | 224 | return 0; |
214 | if (read (fd, &ch, 1) < 1) | 225 | if (read(fd, &ch, 1) < 1) |
215 | return 0; | 226 | return 0; |
216 | return 1; | 227 | return 1; |
217 | } | 228 | } |
218 | 229 | ||
219 | static int count_blocks (int fd) | 230 | static int count_blocks(int fd) |
220 | { | 231 | { |
221 | int high, low; | 232 | int high, low; |
222 | 233 | ||
223 | low = 0; | 234 | low = 0; |
224 | for (high = 1; valid_offset (fd, high); high *= 2) | 235 | for (high = 1; valid_offset(fd, high); high *= 2) |
225 | low = high; | 236 | low = high; |
226 | while (low < high - 1) | 237 | while (low < high - 1) { |
227 | { | ||
228 | const int mid = (low + high) / 2; | 238 | const int mid = (low + high) / 2; |
229 | 239 | ||
230 | if (valid_offset (fd, mid)) | 240 | if (valid_offset(fd, mid)) |
231 | low = mid; | 241 | low = mid; |
232 | else | 242 | else |
233 | high = mid; | 243 | high = mid; |
234 | } | 244 | } |
235 | valid_offset (fd, 0); | 245 | valid_offset(fd, 0); |
236 | return (low + 1); | 246 | return (low + 1); |
237 | } | 247 | } |
238 | 248 | ||
239 | static int get_size(const char *file) | 249 | static int get_size(const char *file) |
240 | { | 250 | { |
241 | int fd; | 251 | int fd; |
242 | long size; | 252 | long size; |
243 | 253 | ||
244 | fd = open(file, O_RDWR); | 254 | fd = open(file, O_RDWR); |
245 | if (fd < 0) { | 255 | if (fd < 0) { |
@@ -250,7 +260,7 @@ static int get_size(const char *file) | |||
250 | close(fd); | 260 | close(fd); |
251 | return (size * 512); | 261 | return (size * 512); |
252 | } | 262 | } |
253 | 263 | ||
254 | size = count_blocks(fd); | 264 | size = count_blocks(fd); |
255 | close(fd); | 265 | close(fd); |
256 | return size; | 266 | return size; |
@@ -270,18 +280,18 @@ static void write_tables(void) | |||
270 | die("seek failed in write_tables"); | 280 | die("seek failed in write_tables"); |
271 | if (BLOCK_SIZE != write(DEV, super_block_buffer, BLOCK_SIZE)) | 281 | if (BLOCK_SIZE != write(DEV, super_block_buffer, BLOCK_SIZE)) |
272 | die("unable to write super-block"); | 282 | die("unable to write super-block"); |
273 | if (IMAPS*BLOCK_SIZE != write(DEV,inode_map,IMAPS*BLOCK_SIZE)) | 283 | if (IMAPS * BLOCK_SIZE != write(DEV, inode_map, IMAPS * BLOCK_SIZE)) |
274 | die("unable to write inode map"); | 284 | die("unable to write inode map"); |
275 | if (ZMAPS*BLOCK_SIZE != write(DEV,zone_map,ZMAPS*BLOCK_SIZE)) | 285 | if (ZMAPS * BLOCK_SIZE != write(DEV, zone_map, ZMAPS * BLOCK_SIZE)) |
276 | die("unable to write zone map"); | 286 | die("unable to write zone map"); |
277 | if (INODE_BUFFER_SIZE != write(DEV,inode_buffer,INODE_BUFFER_SIZE)) | 287 | if (INODE_BUFFER_SIZE != write(DEV, inode_buffer, INODE_BUFFER_SIZE)) |
278 | die("unable to write inodes"); | 288 | die("unable to write inodes"); |
279 | 289 | ||
280 | } | 290 | } |
281 | 291 | ||
282 | static void write_block(int blk, char * buffer) | 292 | static void write_block(int blk, char *buffer) |
283 | { | 293 | { |
284 | if (blk*BLOCK_SIZE != lseek(DEV, blk*BLOCK_SIZE, SEEK_SET)) | 294 | if (blk * BLOCK_SIZE != lseek(DEV, blk * BLOCK_SIZE, SEEK_SET)) |
285 | die("seek failed in write_block"); | 295 | die("seek failed in write_block"); |
286 | if (BLOCK_SIZE != write(DEV, buffer, BLOCK_SIZE)) | 296 | if (BLOCK_SIZE != write(DEV, buffer, BLOCK_SIZE)) |
287 | die("write failed in write_block"); | 297 | die("write failed in write_block"); |
@@ -291,10 +301,10 @@ static int get_free_block(void) | |||
291 | { | 301 | { |
292 | int blk; | 302 | int blk; |
293 | 303 | ||
294 | if (used_good_blocks+1 >= MAX_GOOD_BLOCKS) | 304 | if (used_good_blocks + 1 >= MAX_GOOD_BLOCKS) |
295 | die("too many bad blocks"); | 305 | die("too many bad blocks"); |
296 | if (used_good_blocks) | 306 | if (used_good_blocks) |
297 | blk = good_blocks_table[used_good_blocks-1]+1; | 307 | blk = good_blocks_table[used_good_blocks - 1] + 1; |
298 | else | 308 | else |
299 | blk = FIRSTZONE; | 309 | blk = FIRSTZONE; |
300 | while (blk < ZONES && zone_in_use(blk)) | 310 | while (blk < ZONES && zone_in_use(blk)) |
@@ -310,14 +320,14 @@ static void mark_good_blocks(void) | |||
310 | { | 320 | { |
311 | int blk; | 321 | int blk; |
312 | 322 | ||
313 | for (blk=0 ; blk < used_good_blocks ; blk++) | 323 | for (blk = 0; blk < used_good_blocks; blk++) |
314 | mark_zone(good_blocks_table[blk]); | 324 | mark_zone(good_blocks_table[blk]); |
315 | } | 325 | } |
316 | 326 | ||
317 | inline int next(int zone) | 327 | inline int next(int zone) |
318 | { | 328 | { |
319 | if (!zone) | 329 | if (!zone) |
320 | zone = FIRSTZONE-1; | 330 | zone = FIRSTZONE - 1; |
321 | while (++zone < ZONES) | 331 | while (++zone < ZONES) |
322 | if (zone_in_use(zone)) | 332 | if (zone_in_use(zone)) |
323 | return zone; | 333 | return zone; |
@@ -326,11 +336,11 @@ inline int next(int zone) | |||
326 | 336 | ||
327 | static void make_bad_inode(void) | 337 | static void make_bad_inode(void) |
328 | { | 338 | { |
329 | struct minix_inode * inode = &Inode[MINIX_BAD_INO]; | 339 | struct minix_inode *inode = &Inode[MINIX_BAD_INO]; |
330 | int i,j,zone; | 340 | int i, j, zone; |
331 | int ind=0,dind=0; | 341 | int ind = 0, dind = 0; |
332 | unsigned short ind_block[BLOCK_SIZE>>1]; | 342 | unsigned short ind_block[BLOCK_SIZE >> 1]; |
333 | unsigned short dind_block[BLOCK_SIZE>>1]; | 343 | unsigned short dind_block[BLOCK_SIZE >> 1]; |
334 | 344 | ||
335 | #define NEXT_BAD (zone = next(zone)) | 345 | #define NEXT_BAD (zone = next(zone)) |
336 | 346 | ||
@@ -340,34 +350,34 @@ static void make_bad_inode(void) | |||
340 | inode->i_nlinks = 1; | 350 | inode->i_nlinks = 1; |
341 | inode->i_time = time(NULL); | 351 | inode->i_time = time(NULL); |
342 | inode->i_mode = S_IFREG + 0000; | 352 | inode->i_mode = S_IFREG + 0000; |
343 | inode->i_size = badblocks*BLOCK_SIZE; | 353 | inode->i_size = badblocks * BLOCK_SIZE; |
344 | zone = next(0); | 354 | zone = next(0); |
345 | for (i=0 ; i<7 ; i++) { | 355 | for (i = 0; i < 7; i++) { |
346 | inode->i_zone[i] = zone; | 356 | inode->i_zone[i] = zone; |
347 | if (!NEXT_BAD) | 357 | if (!NEXT_BAD) |
348 | goto end_bad; | 358 | goto end_bad; |
349 | } | 359 | } |
350 | inode->i_zone[7] = ind = get_free_block(); | 360 | inode->i_zone[7] = ind = get_free_block(); |
351 | memset(ind_block,0,BLOCK_SIZE); | 361 | memset(ind_block, 0, BLOCK_SIZE); |
352 | for (i=0 ; i<512 ; i++) { | 362 | for (i = 0; i < 512; i++) { |
353 | ind_block[i] = zone; | 363 | ind_block[i] = zone; |
354 | if (!NEXT_BAD) | 364 | if (!NEXT_BAD) |
355 | goto end_bad; | 365 | goto end_bad; |
356 | } | 366 | } |
357 | inode->i_zone[8] = dind = get_free_block(); | 367 | inode->i_zone[8] = dind = get_free_block(); |
358 | memset(dind_block,0,BLOCK_SIZE); | 368 | memset(dind_block, 0, BLOCK_SIZE); |
359 | for (i=0 ; i<512 ; i++) { | 369 | for (i = 0; i < 512; i++) { |
360 | write_block(ind,(char *) ind_block); | 370 | write_block(ind, (char *) ind_block); |
361 | dind_block[i] = ind = get_free_block(); | 371 | dind_block[i] = ind = get_free_block(); |
362 | memset(ind_block,0,BLOCK_SIZE); | 372 | memset(ind_block, 0, BLOCK_SIZE); |
363 | for (j=0 ; j<512 ; j++) { | 373 | for (j = 0; j < 512; j++) { |
364 | ind_block[j] = zone; | 374 | ind_block[j] = zone; |
365 | if (!NEXT_BAD) | 375 | if (!NEXT_BAD) |
366 | goto end_bad; | 376 | goto end_bad; |
367 | } | 377 | } |
368 | } | 378 | } |
369 | die("too many bad blocks"); | 379 | die("too many bad blocks"); |
370 | end_bad: | 380 | end_bad: |
371 | if (ind) | 381 | if (ind) |
372 | write_block(ind, (char *) ind_block); | 382 | write_block(ind, (char *) ind_block); |
373 | if (dind) | 383 | if (dind) |
@@ -375,8 +385,7 @@ end_bad: | |||
375 | } | 385 | } |
376 | 386 | ||
377 | #ifdef HAVE_MINIX2 | 387 | #ifdef HAVE_MINIX2 |
378 | static void | 388 | static void make_bad_inode2(void) |
379 | make_bad_inode2 (void) | ||
380 | { | 389 | { |
381 | struct minix2_inode *inode = &Inode2[MINIX_BAD_INO]; | 390 | struct minix2_inode *inode = &Inode2[MINIX_BAD_INO]; |
382 | int i, j, zone; | 391 | int i, j, zone; |
@@ -386,30 +395,30 @@ make_bad_inode2 (void) | |||
386 | 395 | ||
387 | if (!badblocks) | 396 | if (!badblocks) |
388 | return; | 397 | return; |
389 | mark_inode (MINIX_BAD_INO); | 398 | mark_inode(MINIX_BAD_INO); |
390 | inode->i_nlinks = 1; | 399 | inode->i_nlinks = 1; |
391 | inode->i_atime = inode->i_mtime = inode->i_ctime = time (NULL); | 400 | inode->i_atime = inode->i_mtime = inode->i_ctime = time(NULL); |
392 | inode->i_mode = S_IFREG + 0000; | 401 | inode->i_mode = S_IFREG + 0000; |
393 | inode->i_size = badblocks * BLOCK_SIZE; | 402 | inode->i_size = badblocks * BLOCK_SIZE; |
394 | zone = next (0); | 403 | zone = next(0); |
395 | for (i = 0; i < 7; i++) { | 404 | for (i = 0; i < 7; i++) { |
396 | inode->i_zone[i] = zone; | 405 | inode->i_zone[i] = zone; |
397 | if (!NEXT_BAD) | 406 | if (!NEXT_BAD) |
398 | goto end_bad; | 407 | goto end_bad; |
399 | } | 408 | } |
400 | inode->i_zone[7] = ind = get_free_block (); | 409 | inode->i_zone[7] = ind = get_free_block(); |
401 | memset (ind_block, 0, BLOCK_SIZE); | 410 | memset(ind_block, 0, BLOCK_SIZE); |
402 | for (i = 0; i < 256; i++) { | 411 | for (i = 0; i < 256; i++) { |
403 | ind_block[i] = zone; | 412 | ind_block[i] = zone; |
404 | if (!NEXT_BAD) | 413 | if (!NEXT_BAD) |
405 | goto end_bad; | 414 | goto end_bad; |
406 | } | 415 | } |
407 | inode->i_zone[8] = dind = get_free_block (); | 416 | inode->i_zone[8] = dind = get_free_block(); |
408 | memset (dind_block, 0, BLOCK_SIZE); | 417 | memset(dind_block, 0, BLOCK_SIZE); |
409 | for (i = 0; i < 256; i++) { | 418 | for (i = 0; i < 256; i++) { |
410 | write_block (ind, (char *) ind_block); | 419 | write_block(ind, (char *) ind_block); |
411 | dind_block[i] = ind = get_free_block (); | 420 | dind_block[i] = ind = get_free_block(); |
412 | memset (ind_block, 0, BLOCK_SIZE); | 421 | memset(ind_block, 0, BLOCK_SIZE); |
413 | for (j = 0; j < 256; j++) { | 422 | for (j = 0; j < 256; j++) { |
414 | ind_block[j] = zone; | 423 | ind_block[j] = zone; |
415 | if (!NEXT_BAD) | 424 | if (!NEXT_BAD) |
@@ -417,47 +426,46 @@ make_bad_inode2 (void) | |||
417 | } | 426 | } |
418 | } | 427 | } |
419 | /* Could make triple indirect block here */ | 428 | /* Could make triple indirect block here */ |
420 | die ("too many bad blocks"); | 429 | die("too many bad blocks"); |
421 | end_bad: | 430 | end_bad: |
422 | if (ind) | 431 | if (ind) |
423 | write_block (ind, (char *) ind_block); | 432 | write_block(ind, (char *) ind_block); |
424 | if (dind) | 433 | if (dind) |
425 | write_block (dind, (char *) dind_block); | 434 | write_block(dind, (char *) dind_block); |
426 | } | 435 | } |
427 | #endif | 436 | #endif |
428 | 437 | ||
429 | static void make_root_inode(void) | 438 | static void make_root_inode(void) |
430 | { | 439 | { |
431 | struct minix_inode * inode = &Inode[MINIX_ROOT_INO]; | 440 | struct minix_inode *inode = &Inode[MINIX_ROOT_INO]; |
432 | 441 | ||
433 | mark_inode(MINIX_ROOT_INO); | 442 | mark_inode(MINIX_ROOT_INO); |
434 | inode->i_zone[0] = get_free_block(); | 443 | inode->i_zone[0] = get_free_block(); |
435 | inode->i_nlinks = 2; | 444 | inode->i_nlinks = 2; |
436 | inode->i_time = time(NULL); | 445 | inode->i_time = time(NULL); |
437 | if (badblocks) | 446 | if (badblocks) |
438 | inode->i_size = 3*dirsize; | 447 | inode->i_size = 3 * dirsize; |
439 | else { | 448 | else { |
440 | root_block[2*dirsize] = '\0'; | 449 | root_block[2 * dirsize] = '\0'; |
441 | root_block[2*dirsize+1] = '\0'; | 450 | root_block[2 * dirsize + 1] = '\0'; |
442 | inode->i_size = 2*dirsize; | 451 | inode->i_size = 2 * dirsize; |
443 | } | 452 | } |
444 | inode->i_mode = S_IFDIR + 0755; | 453 | inode->i_mode = S_IFDIR + 0755; |
445 | inode->i_uid = getuid(); | 454 | inode->i_uid = getuid(); |
446 | if (inode->i_uid) | 455 | if (inode->i_uid) |
447 | inode->i_gid = getgid(); | 456 | inode->i_gid = getgid(); |
448 | write_block(inode->i_zone[0],root_block); | 457 | write_block(inode->i_zone[0], root_block); |
449 | } | 458 | } |
450 | 459 | ||
451 | #ifdef HAVE_MINIX2 | 460 | #ifdef HAVE_MINIX2 |
452 | static void | 461 | static void make_root_inode2(void) |
453 | make_root_inode2 (void) | ||
454 | { | 462 | { |
455 | struct minix2_inode *inode = &Inode2[MINIX_ROOT_INO]; | 463 | struct minix2_inode *inode = &Inode2[MINIX_ROOT_INO]; |
456 | 464 | ||
457 | mark_inode (MINIX_ROOT_INO); | 465 | mark_inode(MINIX_ROOT_INO); |
458 | inode->i_zone[0] = get_free_block (); | 466 | inode->i_zone[0] = get_free_block(); |
459 | inode->i_nlinks = 2; | 467 | inode->i_nlinks = 2; |
460 | inode->i_atime = inode->i_mtime = inode->i_ctime = time (NULL); | 468 | inode->i_atime = inode->i_mtime = inode->i_ctime = time(NULL); |
461 | if (badblocks) | 469 | if (badblocks) |
462 | inode->i_size = 3 * dirsize; | 470 | inode->i_size = 3 * dirsize; |
463 | else { | 471 | else { |
@@ -469,7 +477,7 @@ make_root_inode2 (void) | |||
469 | inode->i_uid = getuid(); | 477 | inode->i_uid = getuid(); |
470 | if (inode->i_uid) | 478 | if (inode->i_uid) |
471 | inode->i_gid = getgid(); | 479 | inode->i_gid = getgid(); |
472 | write_block (inode->i_zone[0], root_block); | 480 | write_block(inode->i_zone[0], root_block); |
473 | } | 481 | } |
474 | #endif | 482 | #endif |
475 | 483 | ||
@@ -478,34 +486,38 @@ static void setup_tables(void) | |||
478 | int i; | 486 | int i; |
479 | unsigned long inodes; | 487 | unsigned long inodes; |
480 | 488 | ||
481 | memset(super_block_buffer,0,BLOCK_SIZE); | 489 | memset(super_block_buffer, 0, BLOCK_SIZE); |
482 | memset(boot_block_buffer,0,512); | 490 | memset(boot_block_buffer, 0, 512); |
483 | MAGIC = magic; | 491 | MAGIC = magic; |
484 | ZONESIZE = 0; | 492 | ZONESIZE = 0; |
485 | MAXSIZE = version2 ? 0x7fffffff : (7+512+512*512)*1024; | 493 | MAXSIZE = version2 ? 0x7fffffff : (7 + 512 + 512 * 512) * 1024; |
486 | ZONES = BLOCKS; | 494 | ZONES = BLOCKS; |
487 | /* some magic nrs: 1 inode / 3 blocks */ | 495 | /* some magic nrs: 1 inode / 3 blocks */ |
488 | if ( req_nr_inodes == 0 ) | 496 | if (req_nr_inodes == 0) |
489 | inodes = BLOCKS/3; | 497 | inodes = BLOCKS / 3; |
490 | else | 498 | else |
491 | inodes = req_nr_inodes; | 499 | inodes = req_nr_inodes; |
492 | /* Round up inode count to fill block size */ | 500 | /* Round up inode count to fill block size */ |
493 | #ifdef HAVE_MINIX2 | 501 | #ifdef HAVE_MINIX2 |
494 | if (version2) | 502 | if (version2) |
495 | inodes = ((inodes + MINIX2_INODES_PER_BLOCK - 1) & | 503 | inodes = ((inodes + MINIX2_INODES_PER_BLOCK - 1) & |
496 | ~(MINIX2_INODES_PER_BLOCK - 1)); | 504 | ~(MINIX2_INODES_PER_BLOCK - 1)); |
497 | else | 505 | else |
498 | #endif | 506 | #endif |
499 | inodes = ((inodes + MINIX_INODES_PER_BLOCK - 1) & | 507 | inodes = ((inodes + MINIX_INODES_PER_BLOCK - 1) & |
500 | ~(MINIX_INODES_PER_BLOCK - 1)); | 508 | ~(MINIX_INODES_PER_BLOCK - 1)); |
501 | if (inodes > 65535) | 509 | if (inodes > 65535) |
502 | inodes = 65535; | 510 | inodes = 65535; |
503 | INODES = inodes; | 511 | INODES = inodes; |
504 | IMAPS = UPPER(INODES + 1,BITS_PER_BLOCK); | 512 | IMAPS = UPPER(INODES + 1, BITS_PER_BLOCK); |
505 | ZMAPS = 0; | 513 | ZMAPS = 0; |
506 | i=0; | 514 | i = 0; |
507 | while (ZMAPS != UPPER(BLOCKS - (2+IMAPS+ZMAPS+INODE_BLOCKS) + 1,BITS_PER_BLOCK) && i<1000) { | 515 | while (ZMAPS != |
508 | ZMAPS = UPPER(BLOCKS - (2+IMAPS+ZMAPS+INODE_BLOCKS) + 1,BITS_PER_BLOCK); | 516 | UPPER(BLOCKS - (2 + IMAPS + ZMAPS + INODE_BLOCKS) + 1, |
517 | BITS_PER_BLOCK) && i < 1000) { | ||
518 | ZMAPS = | ||
519 | UPPER(BLOCKS - (2 + IMAPS + ZMAPS + INODE_BLOCKS) + 1, | ||
520 | BITS_PER_BLOCK); | ||
509 | i++; | 521 | i++; |
510 | } | 522 | } |
511 | /* Real bad hack but overwise mkfs.minix can be thrown | 523 | /* Real bad hack but overwise mkfs.minix can be thrown |
@@ -514,50 +526,51 @@ static void setup_tables(void) | |||
514 | * dd if=/dev/zero of=test.fs count=10 bs=1024 | 526 | * dd if=/dev/zero of=test.fs count=10 bs=1024 |
515 | * /sbin/mkfs.minix -i 200 test.fs | 527 | * /sbin/mkfs.minix -i 200 test.fs |
516 | * */ | 528 | * */ |
517 | if (i>=999) { | 529 | if (i >= 999) { |
518 | die ("unable to allocate buffers for maps"); | 530 | die("unable to allocate buffers for maps"); |
519 | } | 531 | } |
520 | FIRSTZONE = NORM_FIRSTZONE; | 532 | FIRSTZONE = NORM_FIRSTZONE; |
521 | inode_map = malloc(IMAPS * BLOCK_SIZE); | 533 | inode_map = malloc(IMAPS * BLOCK_SIZE); |
522 | zone_map = malloc(ZMAPS * BLOCK_SIZE); | 534 | zone_map = malloc(ZMAPS * BLOCK_SIZE); |
523 | if (!inode_map || !zone_map) | 535 | if (!inode_map || !zone_map) |
524 | die("unable to allocate buffers for maps"); | 536 | die("unable to allocate buffers for maps"); |
525 | memset(inode_map,0xff,IMAPS * BLOCK_SIZE); | 537 | memset(inode_map, 0xff, IMAPS * BLOCK_SIZE); |
526 | memset(zone_map,0xff,ZMAPS * BLOCK_SIZE); | 538 | memset(zone_map, 0xff, ZMAPS * BLOCK_SIZE); |
527 | for (i = FIRSTZONE ; i<ZONES ; i++) | 539 | for (i = FIRSTZONE; i < ZONES; i++) |
528 | unmark_zone(i); | 540 | unmark_zone(i); |
529 | for (i = MINIX_ROOT_INO ; i<=INODES ; i++) | 541 | for (i = MINIX_ROOT_INO; i <= INODES; i++) |
530 | unmark_inode(i); | 542 | unmark_inode(i); |
531 | inode_buffer = malloc(INODE_BUFFER_SIZE); | 543 | inode_buffer = malloc(INODE_BUFFER_SIZE); |
532 | if (!inode_buffer) | 544 | if (!inode_buffer) |
533 | die("unable to allocate buffer for inodes"); | 545 | die("unable to allocate buffer for inodes"); |
534 | memset(inode_buffer,0,INODE_BUFFER_SIZE); | 546 | memset(inode_buffer, 0, INODE_BUFFER_SIZE); |
535 | printf("%ld inodes\n",INODES); | 547 | printf("%ld inodes\n", INODES); |
536 | printf("%ld blocks\n",ZONES); | 548 | printf("%ld blocks\n", ZONES); |
537 | printf("Firstdatazone=%ld (%ld)\n",FIRSTZONE,NORM_FIRSTZONE); | 549 | printf("Firstdatazone=%ld (%ld)\n", FIRSTZONE, NORM_FIRSTZONE); |
538 | printf("Zonesize=%d\n",BLOCK_SIZE<<ZONESIZE); | 550 | printf("Zonesize=%d\n", BLOCK_SIZE << ZONESIZE); |
539 | printf("Maxsize=%ld\n\n",MAXSIZE); | 551 | printf("Maxsize=%ld\n\n", MAXSIZE); |
540 | } | 552 | } |
541 | 553 | ||
542 | /* | 554 | /* |
543 | * Perform a test of a block; return the number of | 555 | * Perform a test of a block; return the number of |
544 | * blocks readable/writeable. | 556 | * blocks readable/writeable. |
545 | */ | 557 | */ |
546 | long do_check(char * buffer, int try, unsigned int current_block) | 558 | long do_check(char *buffer, int try, unsigned int current_block) |
547 | { | 559 | { |
548 | long got; | 560 | long got; |
549 | 561 | ||
550 | /* Seek to the correct loc. */ | 562 | /* Seek to the correct loc. */ |
551 | if (lseek(DEV, current_block * BLOCK_SIZE, SEEK_SET) != | 563 | if (lseek(DEV, current_block * BLOCK_SIZE, SEEK_SET) != |
552 | current_block * BLOCK_SIZE ) { | 564 | current_block * BLOCK_SIZE) { |
553 | die("seek failed during testing of blocks"); | 565 | die("seek failed during testing of blocks"); |
554 | } | 566 | } |
555 | 567 | ||
556 | 568 | ||
557 | /* Try the read */ | 569 | /* Try the read */ |
558 | got = read(DEV, buffer, try * BLOCK_SIZE); | 570 | got = read(DEV, buffer, try * BLOCK_SIZE); |
559 | if (got < 0) got = 0; | 571 | if (got < 0) |
560 | if (got & (BLOCK_SIZE - 1 )) { | 572 | got = 0; |
573 | if (got & (BLOCK_SIZE - 1)) { | ||
561 | printf("Weird values in do_check: probably bugs\n"); | 574 | printf("Weird values in do_check: probably bugs\n"); |
562 | } | 575 | } |
563 | got /= BLOCK_SIZE; | 576 | got /= BLOCK_SIZE; |
@@ -570,7 +583,7 @@ static void alarm_intr(int alnum) | |||
570 | { | 583 | { |
571 | if (currently_testing >= ZONES) | 584 | if (currently_testing >= ZONES) |
572 | return; | 585 | return; |
573 | signal(SIGALRM,alarm_intr); | 586 | signal(SIGALRM, alarm_intr); |
574 | alarm(5); | 587 | alarm(5); |
575 | if (!currently_testing) | 588 | if (!currently_testing) |
576 | return; | 589 | return; |
@@ -580,19 +593,19 @@ static void alarm_intr(int alnum) | |||
580 | 593 | ||
581 | static void check_blocks(void) | 594 | static void check_blocks(void) |
582 | { | 595 | { |
583 | int try,got; | 596 | int try, got; |
584 | static char buffer[BLOCK_SIZE * TEST_BUFFER_BLOCKS]; | 597 | static char buffer[BLOCK_SIZE * TEST_BUFFER_BLOCKS]; |
585 | 598 | ||
586 | currently_testing=0; | 599 | currently_testing = 0; |
587 | signal(SIGALRM,alarm_intr); | 600 | signal(SIGALRM, alarm_intr); |
588 | alarm(5); | 601 | alarm(5); |
589 | while (currently_testing < ZONES) { | 602 | while (currently_testing < ZONES) { |
590 | if (lseek(DEV,currently_testing*BLOCK_SIZE,SEEK_SET) != | 603 | if (lseek(DEV, currently_testing * BLOCK_SIZE, SEEK_SET) != |
591 | currently_testing*BLOCK_SIZE) | 604 | currently_testing * BLOCK_SIZE) |
592 | die("seek failed in check_blocks"); | 605 | die("seek failed in check_blocks"); |
593 | try = TEST_BUFFER_BLOCKS; | 606 | try = TEST_BUFFER_BLOCKS; |
594 | if (currently_testing + try > ZONES) | 607 | if (currently_testing + try > ZONES) |
595 | try = ZONES-currently_testing; | 608 | try = ZONES - currently_testing; |
596 | got = do_check(buffer, try, currently_testing); | 609 | got = do_check(buffer, try, currently_testing); |
597 | currently_testing += got; | 610 | currently_testing += got; |
598 | if (got == try) | 611 | if (got == try) |
@@ -613,139 +626,141 @@ static void get_list_blocks(filename) | |||
613 | char *filename; | 626 | char *filename; |
614 | 627 | ||
615 | { | 628 | { |
616 | FILE *listfile; | 629 | FILE *listfile; |
617 | unsigned long blockno; | 630 | unsigned long blockno; |
618 | 631 | ||
619 | listfile=fopen(filename,"r"); | 632 | listfile = fopen(filename, "r"); |
620 | if(listfile == (FILE *)NULL) { | 633 | if (listfile == (FILE *) NULL) { |
621 | die("can't open file of bad blocks"); | 634 | die("can't open file of bad blocks"); |
622 | } | 635 | } |
623 | while(!feof(listfile)) { | 636 | while (!feof(listfile)) { |
624 | fscanf(listfile,"%ld\n", &blockno); | 637 | fscanf(listfile, "%ld\n", &blockno); |
625 | mark_zone(blockno); | 638 | mark_zone(blockno); |
626 | badblocks++; | 639 | badblocks++; |
627 | } | 640 | } |
628 | if(badblocks > 1) | 641 | if (badblocks > 1) |
629 | printf("%d bad blocks\n", badblocks); | 642 | printf("%d bad blocks\n", badblocks); |
630 | else if (badblocks == 1) | 643 | else if (badblocks == 1) |
631 | printf("one bad block\n"); | 644 | printf("one bad block\n"); |
632 | } | 645 | } |
633 | 646 | ||
634 | extern int | 647 | extern int mkfs_minix_main(int argc, char **argv) |
635 | mkfs_minix_main(int argc, char ** argv) | ||
636 | { | 648 | { |
637 | int i; | 649 | int i; |
638 | char * tmp; | 650 | char *tmp; |
639 | struct stat statbuf; | 651 | struct stat statbuf; |
640 | char * listfile = NULL; | 652 | char *listfile = NULL; |
641 | 653 | ||
642 | if (argc && *argv) | 654 | if (argc && *argv) |
643 | program_name = *argv; | 655 | program_name = *argv; |
644 | if (INODE_SIZE * MINIX_INODES_PER_BLOCK != BLOCK_SIZE) | 656 | if (INODE_SIZE * MINIX_INODES_PER_BLOCK != BLOCK_SIZE) |
645 | die("bad inode size"); | 657 | die("bad inode size"); |
646 | #ifdef HAVE_MINIX2 | 658 | #ifdef HAVE_MINIX2 |
647 | if (INODE_SIZE2 * MINIX2_INODES_PER_BLOCK != BLOCK_SIZE) | 659 | if (INODE_SIZE2 * MINIX2_INODES_PER_BLOCK != BLOCK_SIZE) |
648 | die("bad inode size"); | 660 | die("bad inode size"); |
649 | #endif | 661 | #endif |
650 | opterr = 0; | 662 | opterr = 0; |
651 | while ((i = getopt(argc, argv, "ci:l:n:v")) != EOF) | 663 | while ((i = getopt(argc, argv, "ci:l:n:v")) != EOF) |
652 | switch (i) { | 664 | switch (i) { |
653 | case 'c': | 665 | case 'c': |
654 | check=1; break; | 666 | check = 1; |
655 | case 'i': | 667 | break; |
656 | req_nr_inodes = (unsigned long) atol(optarg); | 668 | case 'i': |
657 | break; | 669 | req_nr_inodes = (unsigned long) atol(optarg); |
658 | case 'l': | 670 | break; |
659 | listfile = optarg; break; | 671 | case 'l': |
660 | case 'n': | 672 | listfile = optarg; |
661 | i = strtoul(optarg,&tmp,0); | 673 | break; |
662 | if (*tmp) | 674 | case 'n': |
663 | show_usage(); | 675 | i = strtoul(optarg, &tmp, 0); |
664 | if (i == 14) | 676 | if (*tmp) |
665 | magic = MINIX_SUPER_MAGIC; | 677 | show_usage(); |
666 | else if (i == 30) | 678 | if (i == 14) |
667 | magic = MINIX_SUPER_MAGIC2; | 679 | magic = MINIX_SUPER_MAGIC; |
668 | else | 680 | else if (i == 30) |
669 | show_usage(); | 681 | magic = MINIX_SUPER_MAGIC2; |
670 | namelen = i; | 682 | else |
671 | dirsize = i+2; | 683 | show_usage(); |
672 | break; | 684 | namelen = i; |
673 | case 'v': | 685 | dirsize = i + 2; |
686 | break; | ||
687 | case 'v': | ||
674 | #ifdef HAVE_MINIX2 | 688 | #ifdef HAVE_MINIX2 |
675 | version2 = 1; | 689 | version2 = 1; |
676 | #else | 690 | #else |
677 | fprintf(stderr,"%s: not compiled with minix v2 support\n",program_name,device_name); | 691 | fprintf(stderr, "%s: not compiled with minix v2 support\n", |
678 | exit(-1); | 692 | program_name, device_name); |
693 | exit(-1); | ||
679 | #endif | 694 | #endif |
680 | break; | 695 | break; |
681 | default: | 696 | default: |
682 | show_usage(); | 697 | show_usage(); |
683 | } | 698 | } |
684 | argc -= optind; | 699 | argc -= optind; |
685 | argv += optind; | 700 | argv += optind; |
686 | if (argc > 0 && !device_name) { | 701 | if (argc > 0 && !device_name) { |
687 | device_name = argv[0]; | 702 | device_name = argv[0]; |
688 | argc--; | 703 | argc--; |
689 | argv++; | 704 | argv++; |
690 | } | 705 | } |
691 | if (argc > 0) { | 706 | if (argc > 0) { |
692 | BLOCKS = strtol(argv[0],&tmp,0); | 707 | BLOCKS = strtol(argv[0], &tmp, 0); |
693 | if (*tmp) { | 708 | if (*tmp) { |
694 | printf("strtol error: number of blocks not specified"); | 709 | printf("strtol error: number of blocks not specified"); |
695 | show_usage(); | 710 | show_usage(); |
696 | } | 711 | } |
697 | } | 712 | } |
698 | 713 | ||
699 | if (device_name && !BLOCKS) | 714 | if (device_name && !BLOCKS) |
700 | BLOCKS = get_size (device_name) / 1024; | 715 | BLOCKS = get_size(device_name) / 1024; |
701 | if (!device_name || BLOCKS<10) { | 716 | if (!device_name || BLOCKS < 10) { |
702 | show_usage(); | 717 | show_usage(); |
703 | } | 718 | } |
704 | #ifdef HAVE_MINIX2 | 719 | #ifdef HAVE_MINIX2 |
705 | if (version2) { | 720 | if (version2) { |
706 | if (namelen == 14) | 721 | if (namelen == 14) |
707 | magic = MINIX2_SUPER_MAGIC; | 722 | magic = MINIX2_SUPER_MAGIC; |
708 | else | 723 | else |
709 | magic = MINIX2_SUPER_MAGIC2; | 724 | magic = MINIX2_SUPER_MAGIC2; |
710 | } else | 725 | } else |
711 | #endif | 726 | #endif |
712 | if (BLOCKS > 65535) | 727 | if (BLOCKS > 65535) |
713 | BLOCKS = 65535; | 728 | BLOCKS = 65535; |
714 | check_mount(); /* is it already mounted? */ | 729 | check_mount(); /* is it already mounted? */ |
715 | tmp = root_block; | 730 | tmp = root_block; |
716 | *(short *)tmp = 1; | 731 | *(short *) tmp = 1; |
717 | strcpy(tmp+2,"."); | 732 | strcpy(tmp + 2, "."); |
718 | tmp += dirsize; | 733 | tmp += dirsize; |
719 | *(short *)tmp = 1; | 734 | *(short *) tmp = 1; |
720 | strcpy(tmp+2,".."); | 735 | strcpy(tmp + 2, ".."); |
721 | tmp += dirsize; | 736 | tmp += dirsize; |
722 | *(short *)tmp = 2; | 737 | *(short *) tmp = 2; |
723 | strcpy(tmp+2,".badblocks"); | 738 | strcpy(tmp + 2, ".badblocks"); |
724 | DEV = open(device_name,O_RDWR ); | 739 | DEV = open(device_name, O_RDWR); |
725 | if (DEV<0) | 740 | if (DEV < 0) |
726 | die("unable to open %s"); | 741 | die("unable to open %s"); |
727 | if (fstat(DEV,&statbuf)<0) | 742 | if (fstat(DEV, &statbuf) < 0) |
728 | die("unable to stat %s"); | 743 | die("unable to stat %s"); |
729 | if (!S_ISBLK(statbuf.st_mode)) | 744 | if (!S_ISBLK(statbuf.st_mode)) |
730 | check=0; | 745 | check = 0; |
731 | else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340) | 746 | else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340) |
732 | die("will not try to make filesystem on '%s'"); | 747 | die("will not try to make filesystem on '%s'"); |
733 | setup_tables(); | 748 | setup_tables(); |
734 | if (check) | 749 | if (check) |
735 | check_blocks(); | 750 | check_blocks(); |
736 | else if (listfile) | 751 | else if (listfile) |
737 | get_list_blocks(listfile); | 752 | get_list_blocks(listfile); |
738 | #ifdef HAVE_MINIX2 | 753 | #ifdef HAVE_MINIX2 |
739 | if (version2) { | 754 | if (version2) { |
740 | make_root_inode2 (); | 755 | make_root_inode2(); |
741 | make_bad_inode2 (); | 756 | make_bad_inode2(); |
742 | } else | 757 | } else |
743 | #endif | 758 | #endif |
744 | { | 759 | { |
745 | make_root_inode(); | 760 | make_root_inode(); |
746 | make_bad_inode(); | 761 | make_bad_inode(); |
747 | } | 762 | } |
748 | mark_good_blocks(); | 763 | mark_good_blocks(); |
749 | write_tables(); | 764 | write_tables(); |
750 | return 0; | 765 | return 0; |
751 | } | 766 | } |
diff --git a/util-linux/mkswap.c b/util-linux/mkswap.c index 601188f86..130d24162 100644 --- a/util-linux/mkswap.c +++ b/util-linux/mkswap.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * mkswap.c - set up a linux swap device | 3 | * mkswap.c - set up a linux swap device |
3 | * | 4 | * |
@@ -40,20 +41,21 @@ | |||
40 | #include <string.h> | 41 | #include <string.h> |
41 | #include <fcntl.h> | 42 | #include <fcntl.h> |
42 | #include <stdlib.h> | 43 | #include <stdlib.h> |
43 | #include <sys/ioctl.h> /* for _IO */ | 44 | #include <sys/ioctl.h> /* for _IO */ |
44 | #include <sys/utsname.h> | 45 | #include <sys/utsname.h> |
45 | #include <sys/stat.h> | 46 | #include <sys/stat.h> |
46 | #include <asm/page.h> /* for PAGE_SIZE and PAGE_SHIFT */ | 47 | #include <asm/page.h> /* for PAGE_SIZE and PAGE_SHIFT */ |
47 | /* we also get PAGE_SIZE via getpagesize() */ | 48 | /* we also get PAGE_SIZE via getpagesize() */ |
48 | 49 | ||
49 | 50 | ||
50 | static const char mkswap_usage[] = "mkswap [-c] [-v0|-v1] device [block-count]\n\n" | 51 | static const char mkswap_usage[] = |
51 | "Prepare a disk partition to be used as a swap partition.\n\n" | 52 | "mkswap [-c] [-v0|-v1] device [block-count]\n\n" |
52 | "Options:\n" | 53 | "Prepare a disk partition to be used as a swap partition.\n\n" |
53 | "\t-c\t\tCheck for read-ability.\n" | 54 | "Options:\n" "\t-c\t\tCheck for read-ability.\n" |
54 | "\t-v0\t\tMake version 0 swap [max 128 Megs].\n" | 55 | "\t-v0\t\tMake version 0 swap [max 128 Megs].\n" |
55 | "\t-v1\t\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n" | 56 | "\t-v1\t\tMake version 1 swap [big!] (default for kernels > 2.1.117).\n" |
56 | "\tblock-count\tNumber of block to use (default is entire partition).\n"; | 57 | |
58 | "\tblock-count\tNumber of block to use (default is entire partition).\n"; | ||
57 | 59 | ||
58 | 60 | ||
59 | #ifndef _IO | 61 | #ifndef _IO |
@@ -64,8 +66,8 @@ static const char mkswap_usage[] = "mkswap [-c] [-v0|-v1] device [block-count]\n | |||
64 | #define BLKGETSIZE _IO(0x12,96) | 66 | #define BLKGETSIZE _IO(0x12,96) |
65 | #endif | 67 | #endif |
66 | 68 | ||
67 | static char * program_name = "mkswap"; | 69 | static char *program_name = "mkswap"; |
68 | static char * device_name = NULL; | 70 | static char *device_name = NULL; |
69 | static int DEV = -1; | 71 | static int DEV = -1; |
70 | static long PAGES = 0; | 72 | static long PAGES = 0; |
71 | static int check = 0; | 73 | static int check = 0; |
@@ -74,8 +76,8 @@ static int version = -1; | |||
74 | 76 | ||
75 | #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) | 77 | #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) |
76 | 78 | ||
77 | static int | 79 | static int linux_version_code(void) |
78 | linux_version_code(void) { | 80 | { |
79 | struct utsname my_utsname; | 81 | struct utsname my_utsname; |
80 | int p, q, r; | 82 | int p, q, r; |
81 | 83 | ||
@@ -83,7 +85,7 @@ linux_version_code(void) { | |||
83 | p = atoi(strtok(my_utsname.release, ".")); | 85 | p = atoi(strtok(my_utsname.release, ".")); |
84 | q = atoi(strtok(NULL, ".")); | 86 | q = atoi(strtok(NULL, ".")); |
85 | r = atoi(strtok(NULL, ".")); | 87 | r = atoi(strtok(NULL, ".")); |
86 | return MAKE_VERSION(p,q,r); | 88 | return MAKE_VERSION(p, q, r); |
87 | } | 89 | } |
88 | return 0; | 90 | return 0; |
89 | } | 91 | } |
@@ -98,7 +100,7 @@ static int pagesize; | |||
98 | static int *signature_page; | 100 | static int *signature_page; |
99 | 101 | ||
100 | struct swap_header_v1 { | 102 | struct swap_header_v1 { |
101 | char bootbits[1024]; /* Space for disklabel etc. */ | 103 | char bootbits[1024]; /* Space for disklabel etc. */ |
102 | unsigned int version; | 104 | unsigned int version; |
103 | unsigned int last_page; | 105 | unsigned int last_page; |
104 | unsigned int nr_badpages; | 106 | unsigned int nr_badpages; |
@@ -106,8 +108,8 @@ struct swap_header_v1 { | |||
106 | unsigned int badpages[1]; | 108 | unsigned int badpages[1]; |
107 | } *p; | 109 | } *p; |
108 | 110 | ||
109 | static void | 111 | static void init_signature_page() |
110 | init_signature_page() { | 112 | { |
111 | pagesize = getpagesize(); | 113 | pagesize = getpagesize(); |
112 | 114 | ||
113 | #ifdef PAGE_SIZE | 115 | #ifdef PAGE_SIZE |
@@ -115,15 +117,15 @@ init_signature_page() { | |||
115 | fprintf(stderr, "Assuming pages of size %d\n", pagesize); | 117 | fprintf(stderr, "Assuming pages of size %d\n", pagesize); |
116 | #endif | 118 | #endif |
117 | signature_page = (int *) malloc(pagesize); | 119 | signature_page = (int *) malloc(pagesize); |
118 | memset(signature_page,0,pagesize); | 120 | memset(signature_page, 0, pagesize); |
119 | p = (struct swap_header_v1 *) signature_page; | 121 | p = (struct swap_header_v1 *) signature_page; |
120 | } | 122 | } |
121 | 123 | ||
122 | static void | 124 | static void write_signature(char *sig) |
123 | write_signature(char *sig) { | 125 | { |
124 | char *sp = (char *) signature_page; | 126 | char *sp = (char *) signature_page; |
125 | 127 | ||
126 | strncpy(sp+pagesize-10, sig, 10); | 128 | strncpy(sp + pagesize - 10, sig, 10); |
127 | } | 129 | } |
128 | 130 | ||
129 | #define V0_MAX_PAGES (8 * (pagesize - 10)) | 131 | #define V0_MAX_PAGES (8 * (pagesize - 10)) |
@@ -172,42 +174,46 @@ It is roughly 2GB on i386, PPC, m68k, ARM, 1GB on sparc, 512MB on mips, | |||
172 | 174 | ||
173 | #define MAX_BADPAGES ((pagesize-1024-128*sizeof(int)-10)/sizeof(int)) | 175 | #define MAX_BADPAGES ((pagesize-1024-128*sizeof(int)-10)/sizeof(int)) |
174 | 176 | ||
175 | static void bit_set (unsigned int *addr, unsigned int nr) | 177 | static void bit_set(unsigned int *addr, unsigned int nr) |
176 | { | 178 | { |
177 | unsigned int r, m; | 179 | unsigned int r, m; |
178 | 180 | ||
179 | addr += nr / (8 * sizeof(int)); | 181 | addr += nr / (8 * sizeof(int)); |
182 | |||
180 | r = *addr; | 183 | r = *addr; |
181 | m = 1 << (nr & (8 * sizeof(int) - 1)); | 184 | m = 1 << (nr & (8 * sizeof(int) - 1)); |
185 | |||
182 | *addr = r | m; | 186 | *addr = r | m; |
183 | } | 187 | } |
184 | 188 | ||
185 | static int bit_test_and_clear (unsigned int *addr, unsigned int nr) | 189 | static int bit_test_and_clear(unsigned int *addr, unsigned int nr) |
186 | { | 190 | { |
187 | unsigned int r, m; | 191 | unsigned int r, m; |
188 | 192 | ||
189 | addr += nr / (8 * sizeof(int)); | 193 | addr += nr / (8 * sizeof(int)); |
194 | |||
190 | r = *addr; | 195 | r = *addr; |
191 | m = 1 << (nr & (8 * sizeof(int) - 1)); | 196 | m = 1 << (nr & (8 * sizeof(int) - 1)); |
197 | |||
192 | *addr = r & ~m; | 198 | *addr = r & ~m; |
193 | return (r & m) != 0; | 199 | return (r & m) != 0; |
194 | } | 200 | } |
195 | 201 | ||
196 | 202 | ||
197 | void | 203 | void die(const char *str) |
198 | die(const char *str) { | 204 | { |
199 | fprintf(stderr, "%s: %s\n", program_name, str); | 205 | fprintf(stderr, "%s: %s\n", program_name, str); |
200 | exit( FALSE); | 206 | exit(FALSE); |
201 | } | 207 | } |
202 | 208 | ||
203 | void | 209 | void page_ok(int page) |
204 | page_ok(int page) { | 210 | { |
205 | if (version==0) | 211 | if (version == 0) |
206 | bit_set(signature_page, page); | 212 | bit_set(signature_page, page); |
207 | } | 213 | } |
208 | 214 | ||
209 | void | 215 | void page_bad(int page) |
210 | page_bad(int page) { | 216 | { |
211 | if (version == 0) | 217 | if (version == 0) |
212 | bit_test_and_clear(signature_page, page); | 218 | bit_test_and_clear(signature_page, page); |
213 | else { | 219 | else { |
@@ -218,8 +224,8 @@ page_bad(int page) { | |||
218 | badpages++; | 224 | badpages++; |
219 | } | 225 | } |
220 | 226 | ||
221 | void | 227 | void check_blocks(void) |
222 | check_blocks(void) { | 228 | { |
223 | unsigned int current_page; | 229 | unsigned int current_page; |
224 | int do_seek = 1; | 230 | int do_seek = 1; |
225 | char *buffer; | 231 | char *buffer; |
@@ -233,8 +239,8 @@ check_blocks(void) { | |||
233 | page_ok(current_page++); | 239 | page_ok(current_page++); |
234 | continue; | 240 | continue; |
235 | } | 241 | } |
236 | if (do_seek && lseek(DEV,current_page*pagesize,SEEK_SET) != | 242 | if (do_seek && lseek(DEV, current_page * pagesize, SEEK_SET) != |
237 | current_page*pagesize) | 243 | current_page * pagesize) |
238 | die("seek failed in check_blocks"); | 244 | die("seek failed in check_blocks"); |
239 | if ((do_seek = (pagesize != read(DEV, buffer, pagesize)))) { | 245 | if ((do_seek = (pagesize != read(DEV, buffer, pagesize)))) { |
240 | page_bad(current_page++); | 246 | page_bad(current_page++); |
@@ -248,30 +254,28 @@ check_blocks(void) { | |||
248 | printf("%d bad pages\n", badpages); | 254 | printf("%d bad pages\n", badpages); |
249 | } | 255 | } |
250 | 256 | ||
251 | static long valid_offset (int fd, int offset) | 257 | static long valid_offset(int fd, int offset) |
252 | { | 258 | { |
253 | char ch; | 259 | char ch; |
254 | 260 | ||
255 | if (lseek (fd, offset, 0) < 0) | 261 | if (lseek(fd, offset, 0) < 0) |
256 | return 0; | 262 | return 0; |
257 | if (read (fd, &ch, 1) < 1) | 263 | if (read(fd, &ch, 1) < 1) |
258 | return 0; | 264 | return 0; |
259 | return 1; | 265 | return 1; |
260 | } | 266 | } |
261 | 267 | ||
262 | static int | 268 | static int find_size(int fd) |
263 | find_size (int fd) | ||
264 | { | 269 | { |
265 | unsigned int high, low; | 270 | unsigned int high, low; |
266 | 271 | ||
267 | low = 0; | 272 | low = 0; |
268 | for (high = 1; high > 0 && valid_offset (fd, high); high *= 2) | 273 | for (high = 1; high > 0 && valid_offset(fd, high); high *= 2) |
269 | low = high; | 274 | low = high; |
270 | while (low < high - 1) | 275 | while (low < high - 1) { |
271 | { | ||
272 | const int mid = (low + high) / 2; | 276 | const int mid = (low + high) / 2; |
273 | 277 | ||
274 | if (valid_offset (fd, mid)) | 278 | if (valid_offset(fd, mid)) |
275 | low = mid; | 279 | low = mid; |
276 | else | 280 | else |
277 | high = mid; | 281 | high = mid; |
@@ -280,11 +284,10 @@ find_size (int fd) | |||
280 | } | 284 | } |
281 | 285 | ||
282 | /* return size in pages, to avoid integer overflow */ | 286 | /* return size in pages, to avoid integer overflow */ |
283 | static long | 287 | static long get_size(const char *file) |
284 | get_size(const char *file) | ||
285 | { | 288 | { |
286 | int fd; | 289 | int fd; |
287 | long size; | 290 | long size; |
288 | 291 | ||
289 | fd = open(file, O_RDONLY); | 292 | fd = open(file, O_RDONLY); |
290 | if (fd < 0) { | 293 | if (fd < 0) { |
@@ -292,7 +295,8 @@ get_size(const char *file) | |||
292 | exit(1); | 295 | exit(1); |
293 | } | 296 | } |
294 | if (ioctl(fd, BLKGETSIZE, &size) >= 0) { | 297 | if (ioctl(fd, BLKGETSIZE, &size) >= 0) { |
295 | int sectors_per_page = pagesize/512; | 298 | int sectors_per_page = pagesize / 512; |
299 | |||
296 | size /= sectors_per_page; | 300 | size /= sectors_per_page; |
297 | } else { | 301 | } else { |
298 | size = find_size(fd) / pagesize; | 302 | size = find_size(fd) / pagesize; |
@@ -301,9 +305,9 @@ get_size(const char *file) | |||
301 | return size; | 305 | return size; |
302 | } | 306 | } |
303 | 307 | ||
304 | int mkswap_main(int argc, char ** argv) | 308 | int mkswap_main(int argc, char **argv) |
305 | { | 309 | { |
306 | char * tmp; | 310 | char *tmp; |
307 | struct stat statbuf; | 311 | struct stat statbuf; |
308 | int sz; | 312 | int sz; |
309 | int maxpages; | 313 | int maxpages; |
@@ -314,56 +318,56 @@ int mkswap_main(int argc, char ** argv) | |||
314 | if (argc && *argv) | 318 | if (argc && *argv) |
315 | program_name = *argv; | 319 | program_name = *argv; |
316 | 320 | ||
317 | init_signature_page(); /* get pagesize */ | 321 | init_signature_page(); /* get pagesize */ |
318 | 322 | ||
319 | while (argc-- > 1) { | 323 | while (argc-- > 1) { |
320 | argv++; | 324 | argv++; |
321 | if (argv[0][0] != '-') { | 325 | if (argv[0][0] != '-') { |
322 | if (device_name) { | 326 | if (device_name) { |
323 | int blocks_per_page = pagesize/1024; | 327 | int blocks_per_page = pagesize / 1024; |
324 | PAGES = strtol(argv[0],&tmp,0)/blocks_per_page; | 328 | |
329 | PAGES = strtol(argv[0], &tmp, 0) / blocks_per_page; | ||
325 | if (*tmp) | 330 | if (*tmp) |
326 | usage( mkswap_usage); | 331 | usage(mkswap_usage); |
327 | } else | 332 | } else |
328 | device_name = argv[0]; | 333 | device_name = argv[0]; |
329 | } else { | 334 | } else { |
330 | switch (argv[0][1]) { | 335 | switch (argv[0][1]) { |
331 | case 'c': | 336 | case 'c': |
332 | check=1; | 337 | check = 1; |
333 | break; | 338 | break; |
334 | case 'f': | 339 | case 'f': |
335 | force=1; | 340 | force = 1; |
336 | break; | 341 | break; |
337 | case 'v': | 342 | case 'v': |
338 | version=atoi(argv[0]+2); | 343 | version = atoi(argv[0] + 2); |
339 | break; | 344 | break; |
340 | default: | 345 | default: |
341 | usage( mkswap_usage); | 346 | usage(mkswap_usage); |
342 | } | 347 | } |
343 | } | 348 | } |
344 | } | 349 | } |
345 | if (!device_name) { | 350 | if (!device_name) { |
346 | fprintf(stderr, | 351 | fprintf(stderr, |
347 | "%s: error: Nowhere to set up swap on?\n", | 352 | "%s: error: Nowhere to set up swap on?\n", program_name); |
348 | program_name); | 353 | usage(mkswap_usage); |
349 | usage( mkswap_usage); | ||
350 | } | 354 | } |
351 | sz = get_size(device_name); | 355 | sz = get_size(device_name); |
352 | if (!PAGES) { | 356 | if (!PAGES) { |
353 | PAGES = sz; | 357 | PAGES = sz; |
354 | } else if (PAGES > sz && !force) { | 358 | } else if (PAGES > sz && !force) { |
355 | fprintf(stderr, | 359 | fprintf(stderr, |
356 | "%s: error: " | 360 | "%s: error: " |
357 | "size %ld is larger than device size %d\n", | 361 | "size %ld is larger than device size %d\n", |
358 | program_name, | 362 | program_name, |
359 | PAGES*(pagesize/1024), sz*(pagesize/1024)); | 363 | PAGES * (pagesize / 1024), sz * (pagesize / 1024)); |
360 | exit( FALSE); | 364 | exit(FALSE); |
361 | } | 365 | } |
362 | 366 | ||
363 | if (version == -1) { | 367 | if (version == -1) { |
364 | if (PAGES <= V0_MAX_PAGES) | 368 | if (PAGES <= V0_MAX_PAGES) |
365 | version = 0; | 369 | version = 0; |
366 | else if (linux_version_code() < MAKE_VERSION(2,1,117)) | 370 | else if (linux_version_code() < MAKE_VERSION(2, 1, 117)) |
367 | version = 0; | 371 | version = 0; |
368 | else if (pagesize < 2048) | 372 | else if (pagesize < 2048) |
369 | version = 0; | 373 | version = 0; |
@@ -372,21 +376,21 @@ int mkswap_main(int argc, char ** argv) | |||
372 | } | 376 | } |
373 | if (version != 0 && version != 1) { | 377 | if (version != 0 && version != 1) { |
374 | fprintf(stderr, "%s: error: unknown version %d\n", | 378 | fprintf(stderr, "%s: error: unknown version %d\n", |
375 | program_name, version); | 379 | program_name, version); |
376 | usage( mkswap_usage); | 380 | usage(mkswap_usage); |
377 | } | 381 | } |
378 | if (PAGES < 10) { | 382 | if (PAGES < 10) { |
379 | fprintf(stderr, | 383 | fprintf(stderr, |
380 | "%s: error: swap area needs to be at least %ldkB\n", | 384 | "%s: error: swap area needs to be at least %ldkB\n", |
381 | program_name, (long)(10 * pagesize / 1024)); | 385 | program_name, (long) (10 * pagesize / 1024)); |
382 | usage( mkswap_usage); | 386 | usage(mkswap_usage); |
383 | } | 387 | } |
384 | #if 0 | 388 | #if 0 |
385 | maxpages = ((version == 0) ? V0_MAX_PAGES : V1_MAX_PAGES); | 389 | maxpages = ((version == 0) ? V0_MAX_PAGES : V1_MAX_PAGES); |
386 | #else | 390 | #else |
387 | if (!version) | 391 | if (!version) |
388 | maxpages = V0_MAX_PAGES; | 392 | maxpages = V0_MAX_PAGES; |
389 | else if (linux_version_code() >= MAKE_VERSION(2,2,1)) | 393 | else if (linux_version_code() >= MAKE_VERSION(2, 2, 1)) |
390 | maxpages = V1_MAX_PAGES; | 394 | maxpages = V1_MAX_PAGES; |
391 | else { | 395 | else { |
392 | maxpages = V1_OLD_MAX_PAGES; | 396 | maxpages = V1_OLD_MAX_PAGES; |
@@ -397,29 +401,29 @@ int mkswap_main(int argc, char ** argv) | |||
397 | if (PAGES > maxpages) { | 401 | if (PAGES > maxpages) { |
398 | PAGES = maxpages; | 402 | PAGES = maxpages; |
399 | fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n", | 403 | fprintf(stderr, "%s: warning: truncating swap area to %ldkB\n", |
400 | program_name, PAGES * pagesize / 1024); | 404 | program_name, PAGES * pagesize / 1024); |
401 | } | 405 | } |
402 | 406 | ||
403 | DEV = open(device_name,O_RDWR); | 407 | DEV = open(device_name, O_RDWR); |
404 | if (DEV < 0 || fstat(DEV, &statbuf) < 0) { | 408 | if (DEV < 0 || fstat(DEV, &statbuf) < 0) { |
405 | perror(device_name); | 409 | perror(device_name); |
406 | exit( FALSE); | 410 | exit(FALSE); |
407 | } | 411 | } |
408 | if (!S_ISBLK(statbuf.st_mode)) | 412 | if (!S_ISBLK(statbuf.st_mode)) |
409 | check=0; | 413 | check = 0; |
410 | else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340) | 414 | else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340) |
411 | die("Will not try to make swapdevice on '%s'"); | 415 | die("Will not try to make swapdevice on '%s'"); |
412 | 416 | ||
413 | #ifdef __sparc__ | 417 | #ifdef __sparc__ |
414 | if (!force && version == 0) { | 418 | if (!force && version == 0) { |
415 | /* Don't overwrite partition table unless forced */ | 419 | /* Don't overwrite partition table unless forced */ |
416 | unsigned char *buffer = (unsigned char *)signature_page; | 420 | unsigned char *buffer = (unsigned char *) signature_page; |
417 | unsigned short *q, sum; | 421 | unsigned short *q, sum; |
418 | 422 | ||
419 | if (read(DEV, buffer, 512) != 512) | 423 | if (read(DEV, buffer, 512) != 512) |
420 | die("fatal: first page unreadable"); | 424 | die("fatal: first page unreadable"); |
421 | if (buffer[508] == 0xDA && buffer[509] == 0xBE) { | 425 | if (buffer[508] == 0xDA && buffer[509] == 0xBE) { |
422 | q = (unsigned short *)(buffer + 510); | 426 | q = (unsigned short *) (buffer + 510); |
423 | for (sum = 0; q >= (unsigned short *) buffer;) | 427 | for (sum = 0; q >= (unsigned short *) buffer;) |
424 | sum ^= *q--; | 428 | sum ^= *q--; |
425 | if (!sum) { | 429 | if (!sum) { |
@@ -427,9 +431,8 @@ int mkswap_main(int argc, char ** argv) | |||
427 | %s: Device '%s' contains a valid Sun disklabel.\n\ | 431 | %s: Device '%s' contains a valid Sun disklabel.\n\ |
428 | This probably means creating v0 swap would destroy your partition table\n\ | 432 | This probably means creating v0 swap would destroy your partition table\n\ |
429 | No swap created. If you really want to create swap v0 on that device, use\n\ | 433 | No swap created. If you really want to create swap v0 on that device, use\n\ |
430 | the -f option to force it.\n", | 434 | the -f option to force it.\n", program_name, device_name); |
431 | program_name, device_name); | 435 | exit(FALSE); |
432 | exit( FALSE); | ||
433 | } | 436 | } |
434 | } | 437 | } |
435 | } | 438 | } |
@@ -437,11 +440,11 @@ the -f option to force it.\n", | |||
437 | 440 | ||
438 | if (version == 0 || check) | 441 | if (version == 0 || check) |
439 | check_blocks(); | 442 | check_blocks(); |
440 | if (version == 0 && !bit_test_and_clear(signature_page,0)) | 443 | if (version == 0 && !bit_test_and_clear(signature_page, 0)) |
441 | die("fatal: first page unreadable"); | 444 | die("fatal: first page unreadable"); |
442 | if (version == 1) { | 445 | if (version == 1) { |
443 | p->version = version; | 446 | p->version = version; |
444 | p->last_page = PAGES-1; | 447 | p->last_page = PAGES - 1; |
445 | p->nr_badpages = badpages; | 448 | p->nr_badpages = badpages; |
446 | } | 449 | } |
447 | 450 | ||
@@ -449,14 +452,14 @@ the -f option to force it.\n", | |||
449 | if (goodpages <= 0) | 452 | if (goodpages <= 0) |
450 | die("Unable to set up swap-space: unreadable"); | 453 | die("Unable to set up swap-space: unreadable"); |
451 | printf("Setting up swapspace version %d, size = %ld bytes\n", | 454 | printf("Setting up swapspace version %d, size = %ld bytes\n", |
452 | version, (long)(goodpages*pagesize)); | 455 | version, (long) (goodpages * pagesize)); |
453 | write_signature((version == 0) ? "SWAP-SPACE" : "SWAPSPACE2"); | 456 | write_signature((version == 0) ? "SWAP-SPACE" : "SWAPSPACE2"); |
454 | 457 | ||
455 | offset = ((version == 0) ? 0 : 1024); | 458 | offset = ((version == 0) ? 0 : 1024); |
456 | if (lseek(DEV, offset, SEEK_SET) != offset) | 459 | if (lseek(DEV, offset, SEEK_SET) != offset) |
457 | die("unable to rewind swap-device"); | 460 | die("unable to rewind swap-device"); |
458 | if (write(DEV,(char*)signature_page+offset, pagesize-offset) | 461 | if (write(DEV, (char *) signature_page + offset, pagesize - offset) |
459 | != pagesize-offset) | 462 | != pagesize - offset) |
460 | die("unable to write signature page"); | 463 | die("unable to write signature page"); |
461 | 464 | ||
462 | /* | 465 | /* |
@@ -464,6 +467,6 @@ the -f option to force it.\n", | |||
464 | * is not actually on disk. (This is a kernel bug.) | 467 | * is not actually on disk. (This is a kernel bug.) |
465 | */ | 468 | */ |
466 | if (fsync(DEV)) | 469 | if (fsync(DEV)) |
467 | die("fsync failed"); | 470 | die("fsync failed"); |
468 | exit ( TRUE); | 471 | exit(TRUE); |
469 | } | 472 | } |
diff --git a/util-linux/more.c b/util-linux/more.c index 821427dda..d5711aa2f 100644 --- a/util-linux/more.c +++ b/util-linux/more.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini more implementation for busybox | 3 | * Mini more implementation for busybox |
3 | * | 4 | * |
@@ -45,19 +46,20 @@ static const char more_usage[] = "more [file ...]\n"; | |||
45 | # define stty(fd,argp) tcsetattr(fd,TCSANOW,argp) | 46 | # define stty(fd,argp) tcsetattr(fd,TCSANOW,argp) |
46 | #endif | 47 | #endif |
47 | 48 | ||
48 | FILE *cin; | 49 | FILE *cin; |
49 | struct termios initial_settings, new_settings; | 50 | struct termios initial_settings, new_settings; |
50 | 51 | ||
51 | void gotsig(int sig) { | 52 | void gotsig(int sig) |
52 | stty(fileno(cin), &initial_settings); | 53 | { |
53 | fprintf(stdout, "\n"); | 54 | stty(fileno(cin), &initial_settings); |
54 | exit( TRUE); | 55 | fprintf(stdout, "\n"); |
55 | } | 56 | exit(TRUE); |
57 | } | ||
56 | #endif | 58 | #endif |
57 | 59 | ||
58 | 60 | ||
59 | 61 | ||
60 | #define TERMINAL_WIDTH 79 /* not 80 in case terminal has linefold bug */ | 62 | #define TERMINAL_WIDTH 79 /* not 80 in case terminal has linefold bug */ |
61 | #define TERMINAL_HEIGHT 24 | 63 | #define TERMINAL_HEIGHT 24 |
62 | 64 | ||
63 | 65 | ||
@@ -72,118 +74,121 @@ static int terminal_width = 0, terminal_height = 0; | |||
72 | 74 | ||
73 | extern int more_main(int argc, char **argv) | 75 | extern int more_main(int argc, char **argv) |
74 | { | 76 | { |
75 | int c, lines=0, input=0; | 77 | int c, lines = 0, input = 0; |
76 | int next_page=0; | 78 | int next_page = 0; |
77 | struct stat st; | 79 | struct stat st; |
78 | FILE *file; | 80 | FILE *file; |
81 | |||
79 | #ifdef BB_FEATURE_AUTOWIDTH | 82 | #ifdef BB_FEATURE_AUTOWIDTH |
80 | struct winsize win = {0,0}; | 83 | struct winsize win = { 0, 0 }; |
81 | #endif | 84 | #endif |
82 | 85 | ||
83 | argc--; | 86 | argc--; |
84 | argv++; | 87 | argv++; |
85 | |||
86 | if ( argc > 0 && (strcmp(*argv,"--help")==0 || strcmp(*argv,"-h")==0) ) { | ||
87 | usage (more_usage); | ||
88 | } | ||
89 | do { | ||
90 | if (argc==0) { | ||
91 | file = stdin; | ||
92 | } | ||
93 | else | ||
94 | file = fopen(*argv, "r"); | ||
95 | 88 | ||
96 | if (file == NULL) { | 89 | if (argc > 0 |
97 | perror(*argv); | 90 | && (strcmp(*argv, "--help") == 0 || strcmp(*argv, "-h") == 0)) { |
98 | exit(FALSE); | 91 | usage(more_usage); |
99 | } | 92 | } |
100 | fstat(fileno(file), &st); | 93 | do { |
94 | if (argc == 0) { | ||
95 | file = stdin; | ||
96 | } else | ||
97 | file = fopen(*argv, "r"); | ||
98 | |||
99 | if (file == NULL) { | ||
100 | perror(*argv); | ||
101 | exit(FALSE); | ||
102 | } | ||
103 | fstat(fileno(file), &st); | ||
101 | 104 | ||
102 | #ifdef BB_FEATURE_USE_TERMIOS | 105 | #ifdef BB_FEATURE_USE_TERMIOS |
103 | cin = fopen("/dev/tty", "r"); | 106 | cin = fopen("/dev/tty", "r"); |
104 | if (!cin) | 107 | if (!cin) |
105 | cin = fopen("/dev/console", "r"); | 108 | cin = fopen("/dev/console", "r"); |
106 | #ifdef USE_OLD_TERMIO | 109 | #ifdef USE_OLD_TERMIO |
107 | ioctl(fileno(cin),TCGETA,&initial_settings); | 110 | ioctl(fileno(cin), TCGETA, &initial_settings); |
108 | #else | 111 | #else |
109 | tcgetattr(fileno(cin),&initial_settings); | 112 | tcgetattr(fileno(cin), &initial_settings); |
110 | #endif | 113 | #endif |
111 | new_settings = initial_settings; | 114 | new_settings = initial_settings; |
112 | new_settings.c_lflag &= ~ICANON; | 115 | new_settings.c_lflag &= ~ICANON; |
113 | new_settings.c_lflag &= ~ECHO; | 116 | new_settings.c_lflag &= ~ECHO; |
114 | stty(fileno(cin), &new_settings); | 117 | stty(fileno(cin), &new_settings); |
115 | 118 | ||
116 | #ifdef BB_FEATURE_AUTOWIDTH | 119 | #ifdef BB_FEATURE_AUTOWIDTH |
117 | ioctl(fileno(stdout), TIOCGWINSZ, &win); | 120 | ioctl(fileno(stdout), TIOCGWINSZ, &win); |
118 | if (win.ws_row > 4) | 121 | if (win.ws_row > 4) |
119 | terminal_height = win.ws_row - 2; | 122 | terminal_height = win.ws_row - 2; |
120 | if (win.ws_col > 0) | 123 | if (win.ws_col > 0) |
121 | terminal_width = win.ws_col - 1; | 124 | terminal_width = win.ws_col - 1; |
122 | #endif | 125 | #endif |
123 | 126 | ||
124 | (void) signal(SIGINT, gotsig); | 127 | (void) signal(SIGINT, gotsig); |
125 | (void) signal(SIGQUIT, gotsig); | 128 | (void) signal(SIGQUIT, gotsig); |
126 | (void) signal(SIGTERM, gotsig); | 129 | (void) signal(SIGTERM, gotsig); |
127 | 130 | ||
128 | #endif | 131 | #endif |
129 | while ((c = getc(file)) != EOF) { | 132 | while ((c = getc(file)) != EOF) { |
130 | if ( next_page ) { | 133 | if (next_page) { |
131 | int len=0; | 134 | int len = 0; |
132 | next_page = 0; | 135 | |
133 | lines=0; | 136 | next_page = 0; |
134 | len = fprintf(stdout, "--More-- "); | 137 | lines = 0; |
135 | if (file != stdin) { | 138 | len = fprintf(stdout, "--More-- "); |
136 | len += fprintf(stdout, "(%d%% of %ld bytes)", | 139 | if (file != stdin) { |
137 | (int) (100*( (double) ftell(file) / (double) st.st_size )), | 140 | len += fprintf(stdout, "(%d%% of %ld bytes)", |
138 | st.st_size); | 141 | (int) (100 * |
139 | } | 142 | ((double) ftell(file) / |
140 | len += fprintf(stdout, "%s", | 143 | (double) st.st_size)), |
144 | st.st_size); | ||
145 | } | ||
146 | len += fprintf(stdout, "%s", | ||
141 | #ifdef BB_FEATURE_USE_TERMIOS | 147 | #ifdef BB_FEATURE_USE_TERMIOS |
142 | "" | 148 | "" |
143 | #else | 149 | #else |
144 | "\n" | 150 | "\n" |
145 | #endif | 151 | #endif |
146 | ); | 152 | ); |
147 | 153 | ||
148 | fflush(stdout); | 154 | fflush(stdout); |
149 | input = getc( cin); | 155 | input = getc(cin); |
150 | 156 | ||
151 | #ifdef BB_FEATURE_USE_TERMIOS | 157 | #ifdef BB_FEATURE_USE_TERMIOS |
152 | /* Erase the "More" message */ | 158 | /* Erase the "More" message */ |
153 | while(--len >= 0) | 159 | while (--len >= 0) |
154 | putc('\b', stdout); | 160 | putc('\b', stdout); |
155 | while(++len <= terminal_width) | 161 | while (++len <= terminal_width) |
156 | putc(' ', stdout); | 162 | putc(' ', stdout); |
157 | while(--len >= 0) | 163 | while (--len >= 0) |
158 | putc('\b', stdout); | 164 | putc('\b', stdout); |
159 | fflush(stdout); | 165 | fflush(stdout); |
160 | #endif | 166 | #endif |
161 | 167 | ||
162 | } | 168 | } |
163 | if (c == '\n' ) { | 169 | if (c == '\n') { |
164 | switch(input) { | 170 | switch (input) { |
165 | case 'q': | 171 | case 'q': |
166 | goto end; | 172 | goto end; |
167 | case '\n': | 173 | case '\n': |
168 | /* increment by just one line if we are at | 174 | /* increment by just one line if we are at |
169 | * the end of this line*/ | 175 | * the end of this line*/ |
170 | next_page = 1; | 176 | next_page = 1; |
171 | break; | 177 | break; |
178 | } | ||
179 | if (++lines == terminal_height) | ||
180 | next_page = 1; | ||
181 | } | ||
182 | putc(c, stdout); | ||
172 | } | 183 | } |
173 | if ( ++lines == terminal_height ) | 184 | fclose(file); |
174 | next_page = 1; | 185 | fflush(stdout); |
175 | } | ||
176 | putc(c, stdout); | ||
177 | } | ||
178 | fclose(file); | ||
179 | fflush(stdout); | ||
180 | 186 | ||
181 | argv++; | 187 | argv++; |
182 | } while (--argc > 0); | 188 | } while (--argc > 0); |
183 | end: | 189 | end: |
184 | #ifdef BB_FEATURE_USE_TERMIOS | 190 | #ifdef BB_FEATURE_USE_TERMIOS |
185 | gotsig(0); | 191 | gotsig(0); |
186 | #endif | 192 | #endif |
187 | exit(TRUE); | 193 | exit(TRUE); |
188 | } | 194 | } |
189 | |||
diff --git a/util-linux/mount.c b/util-linux/mount.c index 4c9e77be0..c3e3bbd75 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini mount implementation for busybox | 3 | * Mini mount implementation for busybox |
3 | * | 4 | * |
@@ -55,357 +56,371 @@ | |||
55 | static int use_loop = 0; | 56 | static int use_loop = 0; |
56 | #endif | 57 | #endif |
57 | 58 | ||
58 | extern const char mtab_file[]; /* Defined in utility.c */ | 59 | extern const char mtab_file[]; /* Defined in utility.c */ |
59 | 60 | ||
60 | static const char mount_usage[] = "\tmount [flags]\n" | 61 | static const char mount_usage[] = "\tmount [flags]\n" |
61 | "\tmount [flags] device directory [-o options,more-options]\n" | 62 | "\tmount [flags] device directory [-o options,more-options]\n" |
62 | "\n" | 63 | "\n" "Flags:\n" "\t-a:\tMount all file systems in fstab.\n" |
63 | "Flags:\n" | ||
64 | "\t-a:\tMount all file systems in fstab.\n" | ||
65 | #ifdef BB_MTAB | 64 | #ifdef BB_MTAB |
66 | "\t-f:\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" | 65 | "\t-f:\t\"Fake\" mount. Add entry to mount table but don't mount it.\n" |
67 | "\t-n:\tDon't write a mount table entry.\n" | 66 | "\t-n:\tDon't write a mount table entry.\n" |
68 | #endif | 67 | #endif |
69 | "\t-o option:\tOne of many filesystem options, listed below.\n" | 68 | "\t-o option:\tOne of many filesystem options, listed below.\n" |
70 | "\t-r:\tMount the filesystem read-only.\n" | 69 | "\t-r:\tMount the filesystem read-only.\n" |
71 | "\t-t filesystem-type:\tSpecify the filesystem type.\n" | 70 | "\t-t filesystem-type:\tSpecify the filesystem type.\n" |
72 | "\t-w:\tMount for reading and writing (default).\n" | 71 | "\t-w:\tMount for reading and writing (default).\n" |
73 | "\n" | 72 | "\n" |
74 | "Options for use with the \"-o\" flag:\n" | 73 | "Options for use with the \"-o\" flag:\n" |
75 | "\tasync / sync:\tWrites are asynchronous / synchronous.\n" | 74 | "\tasync / sync:\tWrites are asynchronous / synchronous.\n" |
76 | "\tdev / nodev:\tAllow use of special device files / disallow them.\n" | 75 | "\tdev / nodev:\tAllow use of special device files / disallow them.\n" |
77 | "\texec / noexec:\tAllow use of executable files / disallow them.\n" | 76 | "\texec / noexec:\tAllow use of executable files / disallow them.\n" |
78 | #if defined BB_FEATURE_MOUNT_LOOP | 77 | #if defined BB_FEATURE_MOUNT_LOOP |
79 | "\tloop: Mounts a file via loop device.\n" | 78 | "\tloop: Mounts a file via loop device.\n" |
80 | #endif | 79 | #endif |
81 | "\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n" | 80 | "\tsuid / nosuid:\tAllow set-user-id-root programs / disallow them.\n" |
82 | "\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n" | 81 | "\tremount: Re-mount a currently-mounted filesystem, changing its flags.\n" |
83 | "\tro / rw: Mount for read-only / read-write.\n" | 82 | "\tro / rw: Mount for read-only / read-write.\n" |
84 | "\t" | 83 | "\t" |
85 | "There are EVEN MORE flags that are specific to each filesystem.\n" | 84 | |
86 | "You'll have to see the written documentation for those.\n"; | 85 | "There are EVEN MORE flags that are specific to each filesystem.\n" |
86 | "You'll have to see the written documentation for those.\n"; | ||
87 | 87 | ||
88 | 88 | ||
89 | struct mount_options { | 89 | struct mount_options { |
90 | const char *name; | 90 | const char *name; |
91 | unsigned long and; | 91 | unsigned long and; |
92 | unsigned long or; | 92 | unsigned long or; |
93 | }; | 93 | }; |
94 | 94 | ||
95 | static const struct mount_options mount_options[] = { | 95 | static const struct mount_options mount_options[] = { |
96 | {"async", ~MS_SYNCHRONOUS, 0}, | 96 | {"async", ~MS_SYNCHRONOUS, 0}, |
97 | {"defaults", ~0, 0}, | 97 | {"defaults", ~0, 0}, |
98 | {"dev", ~MS_NODEV, 0}, | 98 | {"dev", ~MS_NODEV, 0}, |
99 | {"exec", ~MS_NOEXEC, 0}, | 99 | {"exec", ~MS_NOEXEC, 0}, |
100 | {"nodev", ~0, MS_NODEV}, | 100 | {"nodev", ~0, MS_NODEV}, |
101 | {"noexec", ~0, MS_NOEXEC}, | 101 | {"noexec", ~0, MS_NOEXEC}, |
102 | {"nosuid", ~0, MS_NOSUID}, | 102 | {"nosuid", ~0, MS_NOSUID}, |
103 | {"remount", ~0, MS_REMOUNT}, | 103 | {"remount", ~0, MS_REMOUNT}, |
104 | {"ro", ~0, MS_RDONLY}, | 104 | {"ro", ~0, MS_RDONLY}, |
105 | {"rw", ~MS_RDONLY, 0}, | 105 | {"rw", ~MS_RDONLY, 0}, |
106 | {"suid", ~MS_NOSUID, 0}, | 106 | {"suid", ~MS_NOSUID, 0}, |
107 | {"sync", ~0, MS_SYNCHRONOUS}, | 107 | {"sync", ~0, MS_SYNCHRONOUS}, |
108 | {0, 0, 0} | 108 | {0, 0, 0} |
109 | }; | 109 | }; |
110 | 110 | ||
111 | static int | 111 | static int |
112 | do_mount(char* specialfile, char* dir, char* filesystemtype, | 112 | do_mount(char *specialfile, char *dir, char *filesystemtype, |
113 | long flags, void* string_flags, int useMtab, int fakeIt, char* mtab_opts) | 113 | long flags, void *string_flags, int useMtab, int fakeIt, |
114 | char *mtab_opts) | ||
114 | { | 115 | { |
115 | int status=0; | 116 | int status = 0; |
116 | 117 | ||
117 | #if defined BB_MTAB | 118 | #if defined BB_MTAB |
118 | if (fakeIt==FALSE) | 119 | if (fakeIt == FALSE) |
119 | #endif | 120 | #endif |
120 | { | 121 | { |
121 | #if defined BB_FEATURE_MOUNT_LOOP | 122 | #if defined BB_FEATURE_MOUNT_LOOP |
122 | if (use_loop) { | 123 | if (use_loop) { |
123 | int loro = flags & MS_RDONLY; | 124 | int loro = flags & MS_RDONLY; |
124 | char *lofile = specialfile; | 125 | char *lofile = specialfile; |
125 | specialfile = find_unused_loop_device(); | 126 | |
126 | if (specialfile == NULL) { | 127 | specialfile = find_unused_loop_device(); |
127 | fprintf(stderr, "Could not find a spare loop device\n"); | 128 | if (specialfile == NULL) { |
128 | return( FALSE); | 129 | fprintf(stderr, "Could not find a spare loop device\n"); |
129 | } | 130 | return (FALSE); |
130 | if (set_loop (specialfile, lofile, 0, &loro)) { | 131 | } |
131 | fprintf(stderr, "Could not setup loop device\n"); | 132 | if (set_loop(specialfile, lofile, 0, &loro)) { |
132 | return( FALSE); | 133 | fprintf(stderr, "Could not setup loop device\n"); |
133 | } | 134 | return (FALSE); |
134 | if (!(flags & MS_RDONLY) && loro) { /* loop is ro, but wanted rw */ | 135 | } |
135 | fprintf(stderr, "WARNING: loop device is read-only\n"); | 136 | if (!(flags & MS_RDONLY) && loro) { /* loop is ro, but wanted rw */ |
136 | flags &= ~MS_RDONLY; | 137 | fprintf(stderr, "WARNING: loop device is read-only\n"); |
137 | } | 138 | flags &= ~MS_RDONLY; |
138 | } | 139 | } |
140 | } | ||
139 | #endif | 141 | #endif |
140 | status=mount(specialfile, dir, filesystemtype, flags, string_flags); | 142 | status = |
141 | } | 143 | mount(specialfile, dir, filesystemtype, flags, string_flags); |
144 | } | ||
142 | 145 | ||
143 | 146 | ||
144 | /* If the mount was sucessful, do anything needed, then return TRUE */ | 147 | /* If the mount was sucessful, do anything needed, then return TRUE */ |
145 | if (status == 0) { | 148 | if (status == 0) { |
146 | 149 | ||
147 | #if defined BB_MTAB | 150 | #if defined BB_MTAB |
148 | if (useMtab==TRUE) { | 151 | if (useMtab == TRUE) { |
149 | write_mtab(specialfile, dir, filesystemtype, flags, mtab_opts); | 152 | write_mtab(specialfile, dir, filesystemtype, flags, mtab_opts); |
150 | } | 153 | } |
151 | #endif | 154 | #endif |
152 | return( TRUE); | 155 | return (TRUE); |
153 | } | 156 | } |
154 | 157 | ||
155 | /* Bummer. mount failed. Clean up */ | 158 | /* Bummer. mount failed. Clean up */ |
156 | #if defined BB_FEATURE_MOUNT_LOOP | 159 | #if defined BB_FEATURE_MOUNT_LOOP |
157 | if (specialfile != NULL) { | 160 | if (specialfile != NULL) { |
158 | del_loop(specialfile); | 161 | del_loop(specialfile); |
159 | } | 162 | } |
160 | #endif | 163 | #endif |
161 | return( FALSE); | 164 | return (FALSE); |
162 | } | 165 | } |
163 | 166 | ||
164 | 167 | ||
165 | 168 | ||
166 | #if defined BB_MTAB | 169 | #if defined BB_MTAB |
167 | #define whine_if_fstab_is_missing() {} | 170 | #define whine_if_fstab_is_missing() {} |
168 | #else | 171 | #else |
169 | extern void whine_if_fstab_is_missing() | 172 | extern void whine_if_fstab_is_missing() |
170 | { | 173 | { |
171 | struct stat statBuf; | 174 | struct stat statBuf; |
172 | if (stat("/etc/fstab", &statBuf) < 0) | 175 | |
173 | fprintf(stderr, "/etc/fstab file missing -- install one to name /dev/root.\n\n"); | 176 | if (stat("/etc/fstab", &statBuf) < 0) |
177 | fprintf(stderr, | ||
178 | "/etc/fstab file missing -- install one to name /dev/root.\n\n"); | ||
174 | } | 179 | } |
175 | #endif | 180 | #endif |
176 | 181 | ||
177 | 182 | ||
178 | /* Seperate standard mount options from the nonstandard string options */ | 183 | /* Seperate standard mount options from the nonstandard string options */ |
179 | static void | 184 | static void |
180 | parse_mount_options ( char *options, unsigned long *flags, char *strflags) | 185 | parse_mount_options(char *options, unsigned long *flags, char *strflags) |
181 | { | 186 | { |
182 | while (options) { | 187 | while (options) { |
183 | int gotone=FALSE; | 188 | int gotone = FALSE; |
184 | char *comma = strchr (options, ','); | 189 | char *comma = strchr(options, ','); |
185 | const struct mount_options* f = mount_options; | 190 | const struct mount_options *f = mount_options; |
186 | if (comma) | 191 | |
187 | *comma = '\0'; | 192 | if (comma) |
188 | 193 | *comma = '\0'; | |
189 | while (f->name != 0) { | 194 | |
190 | if (strcasecmp (f->name, options) == 0) { | 195 | while (f->name != 0) { |
191 | 196 | if (strcasecmp(f->name, options) == 0) { | |
192 | *flags &= f->and; | 197 | |
193 | *flags |= f->or; | 198 | *flags &= f->and; |
194 | gotone=TRUE; | 199 | *flags |= f->or; |
195 | break; | 200 | gotone = TRUE; |
196 | } | 201 | break; |
197 | f++; | 202 | } |
198 | } | 203 | f++; |
204 | } | ||
199 | #if defined BB_FEATURE_MOUNT_LOOP | 205 | #if defined BB_FEATURE_MOUNT_LOOP |
200 | if (gotone==FALSE && !strcasecmp ("loop", options)) { /* loop device support */ | 206 | if (gotone == FALSE && !strcasecmp("loop", options)) { /* loop device support */ |
201 | use_loop = 1; | 207 | use_loop = 1; |
202 | gotone=TRUE; | 208 | gotone = TRUE; |
203 | } | 209 | } |
204 | #endif | 210 | #endif |
205 | if (*strflags && strflags!= '\0' && gotone==FALSE) { | 211 | if (*strflags && strflags != '\0' && gotone == FALSE) { |
206 | char *temp=strflags; | 212 | char *temp = strflags; |
207 | temp += strlen (strflags); | 213 | |
208 | *temp++ = ','; | 214 | temp += strlen(strflags); |
209 | *temp++ = '\0'; | 215 | *temp++ = ','; |
210 | } | 216 | *temp++ = '\0'; |
211 | if (gotone==FALSE) | 217 | } |
212 | strcat (strflags, options); | 218 | if (gotone == FALSE) |
213 | if (comma) { | 219 | strcat(strflags, options); |
214 | *comma = ','; | 220 | if (comma) { |
215 | options = ++comma; | 221 | *comma = ','; |
216 | } else { | 222 | options = ++comma; |
217 | break; | 223 | } else { |
224 | break; | ||
225 | } | ||
218 | } | 226 | } |
219 | } | ||
220 | } | 227 | } |
221 | 228 | ||
222 | int | 229 | int |
223 | mount_one(char *blockDevice, char *directory, char *filesystemType, | 230 | mount_one(char *blockDevice, char *directory, char *filesystemType, |
224 | unsigned long flags, char *string_flags, int useMtab, int fakeIt, char *mtab_opts) | 231 | unsigned long flags, char *string_flags, int useMtab, int fakeIt, |
232 | char *mtab_opts) | ||
225 | { | 233 | { |
226 | int status = 0; | 234 | int status = 0; |
227 | 235 | ||
228 | char buf[255]; | 236 | char buf[255]; |
229 | 237 | ||
230 | #if defined BB_FEATURE_USE_PROCFS | 238 | #if defined BB_FEATURE_USE_PROCFS |
231 | if (strcmp(filesystemType, "auto") == 0) { | 239 | if (strcmp(filesystemType, "auto") == 0) { |
232 | FILE *f = fopen ("/proc/filesystems", "r"); | 240 | FILE *f = fopen("/proc/filesystems", "r"); |
233 | 241 | ||
234 | if (f == NULL) | 242 | if (f == NULL) |
235 | return( FALSE); | 243 | return (FALSE); |
236 | 244 | ||
237 | while (fgets (buf, sizeof (buf), f) != NULL) { | 245 | while (fgets(buf, sizeof(buf), f) != NULL) { |
238 | filesystemType = buf; | 246 | filesystemType = buf; |
239 | if (*filesystemType == '\t') { // Not a nodev filesystem | 247 | if (*filesystemType == '\t') { // Not a nodev filesystem |
240 | 248 | ||
241 | // Add NULL termination to each line | 249 | // Add NULL termination to each line |
242 | while (*filesystemType && *filesystemType != '\n') | 250 | while (*filesystemType && *filesystemType != '\n') |
243 | filesystemType++; | 251 | filesystemType++; |
244 | *filesystemType = '\0'; | 252 | *filesystemType = '\0'; |
245 | 253 | ||
246 | filesystemType = buf; | 254 | filesystemType = buf; |
247 | filesystemType++; // hop past tab | 255 | filesystemType++; // hop past tab |
248 | 256 | ||
249 | status = do_mount (blockDevice, directory, filesystemType, | 257 | status = do_mount(blockDevice, directory, filesystemType, |
250 | flags | MS_MGC_VAL, string_flags, useMtab, | 258 | flags | MS_MGC_VAL, string_flags, |
251 | fakeIt, mtab_opts); | 259 | useMtab, fakeIt, mtab_opts); |
252 | if (status == TRUE) | 260 | if (status == TRUE) |
253 | break; | 261 | break; |
254 | } | 262 | } |
255 | } | 263 | } |
256 | fclose (f); | 264 | fclose(f); |
257 | } else | 265 | } else |
258 | #endif | 266 | #endif |
259 | { | 267 | { |
260 | status = do_mount (blockDevice, directory, filesystemType, | 268 | status = do_mount(blockDevice, directory, filesystemType, |
261 | flags | MS_MGC_VAL, string_flags, useMtab, | 269 | flags | MS_MGC_VAL, string_flags, useMtab, |
262 | fakeIt, mtab_opts); | 270 | fakeIt, mtab_opts); |
263 | } | 271 | } |
264 | 272 | ||
265 | if (status==FALSE) { | 273 | if (status == FALSE) { |
266 | fprintf (stderr, "Mounting %s on %s failed: %s\n", | 274 | fprintf(stderr, "Mounting %s on %s failed: %s\n", |
267 | blockDevice, directory, strerror(errno)); | 275 | blockDevice, directory, strerror(errno)); |
268 | return (FALSE); | 276 | return (FALSE); |
269 | } | 277 | } |
270 | return (TRUE); | 278 | return (TRUE); |
271 | } | 279 | } |
272 | 280 | ||
273 | extern int mount_main (int argc, char **argv) | 281 | extern int mount_main(int argc, char **argv) |
274 | { | 282 | { |
275 | char string_flags_buf[1024]=""; | 283 | char string_flags_buf[1024] = ""; |
276 | char *string_flags = string_flags_buf; | 284 | char *string_flags = string_flags_buf; |
277 | char *extra_opts = string_flags_buf; | 285 | char *extra_opts = string_flags_buf; |
278 | unsigned long flags = 0; | 286 | unsigned long flags = 0; |
279 | char *filesystemType = "auto"; | 287 | char *filesystemType = "auto"; |
280 | char *device = NULL; | 288 | char *device = NULL; |
281 | char *directory = NULL; | 289 | char *directory = NULL; |
282 | int all = FALSE; | 290 | int all = FALSE; |
283 | int fakeIt = FALSE; | 291 | int fakeIt = FALSE; |
284 | int useMtab = TRUE; | 292 | int useMtab = TRUE; |
285 | int i; | 293 | int i; |
286 | 294 | ||
287 | /* Only compiled in if BB_MTAB is not defined */ | 295 | /* Only compiled in if BB_MTAB is not defined */ |
288 | whine_if_fstab_is_missing(); | 296 | whine_if_fstab_is_missing(); |
289 | 297 | ||
290 | if (argc == 1) { | 298 | if (argc == 1) { |
291 | FILE *mountTable = setmntent (mtab_file, "r"); | 299 | FILE *mountTable = setmntent(mtab_file, "r"); |
292 | if (mountTable) { | 300 | |
293 | struct mntent *m; | 301 | if (mountTable) { |
294 | while ((m = getmntent (mountTable)) != 0) { | 302 | struct mntent *m; |
295 | struct fstab* fstabItem; | 303 | |
296 | char *blockDevice = m->mnt_fsname; | 304 | while ((m = getmntent(mountTable)) != 0) { |
297 | /* Note that if /etc/fstab is missing, libc can't fix up /dev/root for us */ | 305 | struct fstab *fstabItem; |
298 | if (strcmp (blockDevice, "/dev/root") == 0) { | 306 | char *blockDevice = m->mnt_fsname; |
299 | fstabItem = getfsfile ("/"); | 307 | |
300 | if (fstabItem != NULL) | 308 | /* Note that if /etc/fstab is missing, libc can't fix up /dev/root for us */ |
301 | blockDevice = fstabItem->fs_spec; | 309 | if (strcmp(blockDevice, "/dev/root") == 0) { |
310 | fstabItem = getfsfile("/"); | ||
311 | if (fstabItem != NULL) | ||
312 | blockDevice = fstabItem->fs_spec; | ||
313 | } | ||
314 | printf("%s on %s type %s (%s)\n", blockDevice, m->mnt_dir, | ||
315 | m->mnt_type, m->mnt_opts); | ||
316 | } | ||
317 | endmntent(mountTable); | ||
318 | } else { | ||
319 | perror(mtab_file); | ||
302 | } | 320 | } |
303 | printf ("%s on %s type %s (%s)\n", blockDevice, m->mnt_dir, | 321 | exit(TRUE); |
304 | m->mnt_type, m->mnt_opts); | ||
305 | } | ||
306 | endmntent (mountTable); | ||
307 | } else { | ||
308 | perror(mtab_file); | ||
309 | } | 322 | } |
310 | exit( TRUE); | 323 | |
311 | } | 324 | |
312 | 325 | /* Parse options */ | |
313 | 326 | i = --argc; | |
314 | /* Parse options */ | 327 | argv++; |
315 | i = --argc; | 328 | while (i > 0 && **argv) { |
316 | argv++; | 329 | if (**argv == '-') { |
317 | while (i > 0 && **argv) { | 330 | char *opt = *argv; |
318 | if (**argv == '-') { | 331 | |
319 | char *opt = *argv; | 332 | while (i > 0 && *++opt) |
320 | while (i>0 && *++opt) switch (*opt) { | 333 | switch (*opt) { |
321 | case 'o': | 334 | case 'o': |
322 | if (--i == 0) { | 335 | if (--i == 0) { |
323 | goto goodbye; | 336 | goto goodbye; |
324 | } | 337 | } |
325 | parse_mount_options (*(++argv), &flags, string_flags); | 338 | parse_mount_options(*(++argv), &flags, string_flags); |
326 | break; | 339 | break; |
327 | case 'r': | 340 | case 'r': |
328 | flags |= MS_RDONLY; | 341 | flags |= MS_RDONLY; |
329 | break; | 342 | break; |
330 | case 't': | 343 | case 't': |
331 | if (--i == 0) { | 344 | if (--i == 0) { |
332 | goto goodbye; | 345 | goto goodbye; |
333 | } | 346 | } |
334 | filesystemType = *(++argv); | 347 | filesystemType = *(++argv); |
335 | break; | 348 | break; |
336 | case 'w': | 349 | case 'w': |
337 | flags &= ~MS_RDONLY; | 350 | flags &= ~MS_RDONLY; |
338 | break; | 351 | break; |
339 | case 'a': | 352 | case 'a': |
340 | all = TRUE; | 353 | all = TRUE; |
341 | break; | 354 | break; |
342 | #ifdef BB_MTAB | 355 | #ifdef BB_MTAB |
343 | case 'f': | 356 | case 'f': |
344 | fakeIt = TRUE; | 357 | fakeIt = TRUE; |
345 | break; | 358 | break; |
346 | case 'n': | 359 | case 'n': |
347 | useMtab = FALSE; | 360 | useMtab = FALSE; |
348 | break; | 361 | break; |
349 | #endif | 362 | #endif |
350 | case 'v': | 363 | case 'v': |
351 | case 'h': | 364 | case 'h': |
352 | case '-': | 365 | case '-': |
353 | goto goodbye; | 366 | goto goodbye; |
354 | } | 367 | } |
355 | } else { | 368 | } else { |
356 | if (device == NULL) | 369 | if (device == NULL) |
357 | device = *argv; | 370 | device = *argv; |
358 | else if (directory == NULL) | 371 | else if (directory == NULL) |
359 | directory = *argv; | 372 | directory = *argv; |
360 | else { | 373 | else { |
361 | goto goodbye; | 374 | goto goodbye; |
362 | } | 375 | } |
376 | } | ||
377 | i--; | ||
378 | argv++; | ||
363 | } | 379 | } |
364 | i--; | ||
365 | argv++; | ||
366 | } | ||
367 | 380 | ||
368 | if (all == TRUE) { | 381 | if (all == TRUE) { |
369 | struct mntent *m; | 382 | struct mntent *m; |
370 | FILE *f = setmntent ("/etc/fstab", "r"); | 383 | FILE *f = setmntent("/etc/fstab", "r"); |
371 | 384 | ||
372 | if (f == NULL) { | 385 | if (f == NULL) { |
373 | perror("/etc/fstab"); | 386 | perror("/etc/fstab"); |
374 | exit( FALSE); | 387 | exit(FALSE); |
375 | } | 388 | } |
376 | while ((m = getmntent (f)) != NULL) { | 389 | while ((m = getmntent(f)) != NULL) { |
377 | // If the file system isn't noauto, and isn't mounted on /, | 390 | // If the file system isn't noauto, and isn't mounted on /, |
378 | // and isn't swap or nfs, then mount it | 391 | // and isn't swap or nfs, then mount it |
379 | if ((!strstr (m->mnt_opts, "noauto")) && | 392 | if ((!strstr(m->mnt_opts, "noauto")) && |
380 | (m->mnt_dir[1] != '\0') && | 393 | (m->mnt_dir[1] != '\0') && |
381 | (!strstr (m->mnt_type, "swap")) && | 394 | (!strstr(m->mnt_type, "swap")) && |
382 | (!strstr (m->mnt_type, "nfs"))) | 395 | (!strstr(m->mnt_type, "nfs"))) { |
383 | { | 396 | flags = 0; |
384 | flags = 0; | 397 | *string_flags = '\0'; |
385 | *string_flags = '\0'; | 398 | parse_mount_options(m->mnt_opts, &flags, string_flags); |
386 | parse_mount_options(m->mnt_opts, &flags, string_flags); | 399 | mount_one(m->mnt_fsname, m->mnt_dir, m->mnt_type, |
387 | mount_one (m->mnt_fsname, m->mnt_dir, m->mnt_type, | 400 | flags, string_flags, useMtab, fakeIt, |
388 | flags, string_flags, useMtab, fakeIt, extra_opts); | 401 | extra_opts); |
389 | } | 402 | } |
390 | } | 403 | } |
391 | endmntent (f); | 404 | endmntent(f); |
392 | } else { | 405 | } else { |
393 | if (device && directory) { | 406 | if (device && directory) { |
394 | #ifdef BB_NFSMOUNT | 407 | #ifdef BB_NFSMOUNT |
395 | if (strcmp(filesystemType, "nfs") == 0) { | 408 | if (strcmp(filesystemType, "nfs") == 0) { |
396 | if (nfsmount(device, directory, &flags, &extra_opts, &string_flags, 1) != 0) | 409 | if (nfsmount |
397 | exit(FALSE); | 410 | (device, directory, &flags, &extra_opts, &string_flags, |
398 | } | 411 | 1) != 0) |
412 | exit(FALSE); | ||
413 | } | ||
399 | #endif | 414 | #endif |
400 | exit (mount_one (device, directory, filesystemType, | 415 | exit(mount_one(device, directory, filesystemType, |
401 | flags, string_flags, useMtab, fakeIt, extra_opts)); | 416 | flags, string_flags, useMtab, fakeIt, |
402 | } else { | 417 | extra_opts)); |
403 | goto goodbye; | 418 | } else { |
419 | goto goodbye; | ||
420 | } | ||
404 | } | 421 | } |
405 | } | 422 | exit(TRUE); |
406 | exit( TRUE); | ||
407 | 423 | ||
408 | goodbye: | 424 | goodbye: |
409 | usage( mount_usage); | 425 | usage(mount_usage); |
410 | } | 426 | } |
411 | |||
diff --git a/util-linux/nfsmount.c b/util-linux/nfsmount.c index f2bd2f49c..03ce58447 100644 --- a/util-linux/nfsmount.c +++ b/util-linux/nfsmount.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * nfsmount.c -- Linux NFS mount | 3 | * nfsmount.c -- Linux NFS mount |
3 | * Copyright (C) 1993 Rick Sladkey <jrs@world.std.com> | 4 | * Copyright (C) 1993 Rick Sladkey <jrs@world.std.com> |
@@ -53,7 +54,7 @@ | |||
53 | 54 | ||
54 | #define _ | 55 | #define _ |
55 | #define HAVE_inet_aton | 56 | #define HAVE_inet_aton |
56 | #define MS_REMOUNT 32 /* Alter flags of a mounted FS */ | 57 | #define MS_REMOUNT 32 /* Alter flags of a mounted FS */ |
57 | #define sloppy 0 | 58 | #define sloppy 0 |
58 | #define EX_FAIL 1 | 59 | #define EX_FAIL 1 |
59 | #define EX_BG 1 | 60 | #define EX_BG 1 |
@@ -65,8 +66,8 @@ static char *nfs_strerror(int stat); | |||
65 | 66 | ||
66 | #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) | 67 | #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) |
67 | 68 | ||
68 | static int | 69 | static int linux_version_code(void) |
69 | linux_version_code(void) { | 70 | { |
70 | struct utsname my_utsname; | 71 | struct utsname my_utsname; |
71 | int p, q, r; | 72 | int p, q, r; |
72 | 73 | ||
@@ -74,7 +75,7 @@ linux_version_code(void) { | |||
74 | p = atoi(strtok(my_utsname.release, ".")); | 75 | p = atoi(strtok(my_utsname.release, ".")); |
75 | q = atoi(strtok(NULL, ".")); | 76 | q = atoi(strtok(NULL, ".")); |
76 | r = atoi(strtok(NULL, ".")); | 77 | r = atoi(strtok(NULL, ".")); |
77 | return MAKE_VERSION(p,q,r); | 78 | return MAKE_VERSION(p, q, r); |
78 | } | 79 | } |
79 | return 0; | 80 | return 0; |
80 | } | 81 | } |
@@ -95,22 +96,22 @@ static int nfs_mount_version = NFS_MOUNT_VERSION; | |||
95 | * NFS_MOUNT_VERSION: these nfsmount sources at compile time | 96 | * NFS_MOUNT_VERSION: these nfsmount sources at compile time |
96 | * nfs_mount_version: version this source and running kernel can handle | 97 | * nfs_mount_version: version this source and running kernel can handle |
97 | */ | 98 | */ |
98 | static void | 99 | static void find_kernel_nfs_mount_version(void) |
99 | find_kernel_nfs_mount_version(void) { | 100 | { |
100 | int kernel_version = linux_version_code(); | 101 | int kernel_version = linux_version_code(); |
101 | 102 | ||
102 | if (kernel_version) { | 103 | if (kernel_version) { |
103 | if (kernel_version < MAKE_VERSION(2,1,32)) | 104 | if (kernel_version < MAKE_VERSION(2, 1, 32)) |
104 | nfs_mount_version = 1; | 105 | nfs_mount_version = 1; |
105 | else | 106 | else |
106 | nfs_mount_version = 3; | 107 | nfs_mount_version = 3; |
107 | } | 108 | } |
108 | if (nfs_mount_version > NFS_MOUNT_VERSION) | 109 | if (nfs_mount_version > NFS_MOUNT_VERSION) |
109 | nfs_mount_version = NFS_MOUNT_VERSION; | 110 | nfs_mount_version = NFS_MOUNT_VERSION; |
110 | } | 111 | } |
111 | 112 | ||
112 | int nfsmount(const char *spec, const char *node, unsigned long *flags, | 113 | int nfsmount(const char *spec, const char *node, unsigned long *flags, |
113 | char **extra_opts, char **mount_opts, int running_bg) | 114 | char **extra_opts, char **mount_opts, int running_bg) |
114 | { | 115 | { |
115 | static char *prev_bg_host; | 116 | static char *prev_bg_host; |
116 | char hostdir[1024]; | 117 | char hostdir[1024]; |
@@ -118,7 +119,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
118 | char *hostname; | 119 | char *hostname; |
119 | char *dirname; | 120 | char *dirname; |
120 | char *old_opts; | 121 | char *old_opts; |
121 | char *mounthost=NULL; | 122 | char *mounthost = NULL; |
122 | char new_opts[1024]; | 123 | char new_opts[1024]; |
123 | fhandle root_fhandle; | 124 | fhandle root_fhandle; |
124 | struct timeval total_timeout; | 125 | struct timeval total_timeout; |
@@ -161,7 +162,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
161 | mclient = NULL; | 162 | mclient = NULL; |
162 | if (strlen(spec) >= sizeof(hostdir)) { | 163 | if (strlen(spec) >= sizeof(hostdir)) { |
163 | fprintf(stderr, _("mount: " | 164 | fprintf(stderr, _("mount: " |
164 | "excessively long host:dir argument\n")); | 165 | "excessively long host:dir argument\n")); |
165 | goto fail; | 166 | goto fail; |
166 | } | 167 | } |
167 | strcpy(hostdir, spec); | 168 | strcpy(hostdir, spec); |
@@ -174,11 +175,11 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
174 | if ((s = strchr(hostdir, ','))) { | 175 | if ((s = strchr(hostdir, ','))) { |
175 | *s = '\0'; | 176 | *s = '\0'; |
176 | fprintf(stderr, _("mount: warning: " | 177 | fprintf(stderr, _("mount: warning: " |
177 | "multiple hostnames not supported\n")); | 178 | "multiple hostnames not supported\n")); |
178 | } | 179 | } |
179 | } else { | 180 | } else { |
180 | fprintf(stderr, _("mount: " | 181 | fprintf(stderr, _("mount: " |
181 | "directory to mount not in host:dir format\n")); | 182 | "directory to mount not in host:dir format\n")); |
182 | goto fail; | 183 | goto fail; |
183 | } | 184 | } |
184 | 185 | ||
@@ -189,20 +190,18 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
189 | { | 190 | { |
190 | if ((hp = gethostbyname(hostname)) == NULL) { | 191 | if ((hp = gethostbyname(hostname)) == NULL) { |
191 | fprintf(stderr, _("mount: can't get address for %s\n"), | 192 | fprintf(stderr, _("mount: can't get address for %s\n"), |
192 | hostname); | 193 | hostname); |
193 | goto fail; | 194 | goto fail; |
194 | } else { | 195 | } else { |
195 | if (hp->h_length > sizeof(struct in_addr)) { | 196 | if (hp->h_length > sizeof(struct in_addr)) { |
196 | fprintf(stderr, | 197 | fprintf(stderr, _("mount: got bad hp->h_length\n")); |
197 | _("mount: got bad hp->h_length\n")); | ||
198 | hp->h_length = sizeof(struct in_addr); | 198 | hp->h_length = sizeof(struct in_addr); |
199 | } | 199 | } |
200 | memcpy(&server_addr.sin_addr, | 200 | memcpy(&server_addr.sin_addr, hp->h_addr, hp->h_length); |
201 | hp->h_addr, hp->h_length); | ||
202 | } | 201 | } |
203 | } | 202 | } |
204 | 203 | ||
205 | memcpy (&mount_server_addr, &server_addr, sizeof (mount_server_addr)); | 204 | memcpy(&mount_server_addr, &server_addr, sizeof(mount_server_addr)); |
206 | 205 | ||
207 | /* add IP address to mtab options for use when unmounting */ | 206 | /* add IP address to mtab options for use when unmounting */ |
208 | 207 | ||
@@ -211,12 +210,10 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
211 | if (!old_opts) | 210 | if (!old_opts) |
212 | old_opts = ""; | 211 | old_opts = ""; |
213 | if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) { | 212 | if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) { |
214 | fprintf(stderr, _("mount: " | 213 | fprintf(stderr, _("mount: " "excessively long option argument\n")); |
215 | "excessively long option argument\n")); | ||
216 | goto fail; | 214 | goto fail; |
217 | } | 215 | } |
218 | sprintf(new_opts, "%s%saddr=%s", | 216 | sprintf(new_opts, "%s%saddr=%s", old_opts, *old_opts ? "," : "", s); |
219 | old_opts, *old_opts ? "," : "", s); | ||
220 | *extra_opts = xstrdup(new_opts); | 217 | *extra_opts = xstrdup(new_opts); |
221 | 218 | ||
222 | /* Set default options. | 219 | /* Set default options. |
@@ -224,13 +221,13 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
224 | * let the kernel decide. | 221 | * let the kernel decide. |
225 | * timeo is filled in after we know whether it'll be TCP or UDP. */ | 222 | * timeo is filled in after we know whether it'll be TCP or UDP. */ |
226 | memset(&data, 0, sizeof(data)); | 223 | memset(&data, 0, sizeof(data)); |
227 | data.retrans = 3; | 224 | data.retrans = 3; |
228 | data.acregmin = 3; | 225 | data.acregmin = 3; |
229 | data.acregmax = 60; | 226 | data.acregmax = 60; |
230 | data.acdirmin = 30; | 227 | data.acdirmin = 30; |
231 | data.acdirmax = 60; | 228 | data.acdirmax = 60; |
232 | #if NFS_MOUNT_VERSION >= 2 | 229 | #if NFS_MOUNT_VERSION >= 2 |
233 | data.namlen = NAME_MAX; | 230 | data.namlen = NAME_MAX; |
234 | #endif | 231 | #endif |
235 | 232 | ||
236 | bg = 0; | 233 | bg = 0; |
@@ -240,7 +237,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
240 | nocto = 0; | 237 | nocto = 0; |
241 | nolock = 0; | 238 | nolock = 0; |
242 | noac = 0; | 239 | noac = 0; |
243 | retry = 10000; /* 10000 minutes ~ 1 week */ | 240 | retry = 10000; /* 10000 minutes ~ 1 week */ |
244 | tcp = 0; | 241 | tcp = 0; |
245 | 242 | ||
246 | mountprog = MOUNTPROG; | 243 | mountprog = MOUNTPROG; |
@@ -254,7 +251,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
254 | 251 | ||
255 | for (opt = strtok(old_opts, ","); opt; opt = strtok(NULL, ",")) { | 252 | for (opt = strtok(old_opts, ","); opt; opt = strtok(NULL, ",")) { |
256 | if ((opteq = strchr(opt, '='))) { | 253 | if ((opteq = strchr(opt, '='))) { |
257 | val = atoi(opteq + 1); | 254 | val = atoi(opteq + 1); |
258 | *opteq = '\0'; | 255 | *opteq = '\0'; |
259 | if (!strcmp(opt, "rsize")) | 256 | if (!strcmp(opt, "rsize")) |
260 | data.rsize = val; | 257 | data.rsize = val; |
@@ -277,29 +274,27 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
277 | data.acregmax = val; | 274 | data.acregmax = val; |
278 | data.acdirmin = val; | 275 | data.acdirmin = val; |
279 | data.acdirmax = val; | 276 | data.acdirmax = val; |
280 | } | 277 | } else if (!strcmp(opt, "retry")) |
281 | else if (!strcmp(opt, "retry")) | ||
282 | retry = val; | 278 | retry = val; |
283 | else if (!strcmp(opt, "port")) | 279 | else if (!strcmp(opt, "port")) |
284 | port = val; | 280 | port = val; |
285 | else if (!strcmp(opt, "mountport")) | 281 | else if (!strcmp(opt, "mountport")) |
286 | mountport = val; | 282 | mountport = val; |
287 | else if (!strcmp(opt, "mounthost")) | 283 | else if (!strcmp(opt, "mounthost")) |
288 | mounthost=xstrndup(opteq+1, | 284 | mounthost = xstrndup(opteq + 1, |
289 | strcspn(opteq+1," \t\n\r,")); | 285 | strcspn(opteq + 1, " \t\n\r,")); |
290 | else if (!strcmp(opt, "mountprog")) | 286 | else if (!strcmp(opt, "mountprog")) |
291 | mountprog = val; | 287 | mountprog = val; |
292 | else if (!strcmp(opt, "mountvers")) | 288 | else if (!strcmp(opt, "mountvers")) |
293 | mountvers = val; | 289 | mountvers = val; |
294 | else if (!strcmp(opt, "nfsprog")) | 290 | else if (!strcmp(opt, "nfsprog")) |
295 | nfsprog = val; | 291 | nfsprog = val; |
296 | else if (!strcmp(opt, "nfsvers") || | 292 | else if (!strcmp(opt, "nfsvers") || !strcmp(opt, "vers")) |
297 | !strcmp(opt, "vers")) | ||
298 | nfsvers = val; | 293 | nfsvers = val; |
299 | else if (!strcmp(opt, "proto")) { | 294 | else if (!strcmp(opt, "proto")) { |
300 | if (!strncmp(opteq+1, "tcp", 3)) | 295 | if (!strncmp(opteq + 1, "tcp", 3)) |
301 | tcp = 1; | 296 | tcp = 1; |
302 | else if (!strncmp(opteq+1, "udp", 3)) | 297 | else if (!strncmp(opteq + 1, "udp", 3)) |
303 | tcp = 0; | 298 | tcp = 0; |
304 | else | 299 | else |
305 | printf(_("Warning: Unrecognized proto= option.\n")); | 300 | printf(_("Warning: Unrecognized proto= option.\n")); |
@@ -309,24 +304,24 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
309 | data.namlen = val; | 304 | data.namlen = val; |
310 | else | 305 | else |
311 | #endif | 306 | #endif |
312 | printf(_("Warning: Option namlen is not supported.\n")); | 307 | printf(_ |
308 | ("Warning: Option namlen is not supported.\n")); | ||
313 | } else if (!strcmp(opt, "addr")) | 309 | } else if (!strcmp(opt, "addr")) |
314 | /* ignore */; | 310 | /* ignore */ ; |
315 | else { | 311 | else { |
316 | printf(_("unknown nfs mount parameter: " | 312 | printf(_("unknown nfs mount parameter: " |
317 | "%s=%d\n"), opt, val); | 313 | "%s=%d\n"), opt, val); |
318 | goto fail; | 314 | goto fail; |
319 | } | 315 | } |
320 | } | 316 | } else { |
321 | else { | ||
322 | val = 1; | 317 | val = 1; |
323 | if (!strncmp(opt, "no", 2)) { | 318 | if (!strncmp(opt, "no", 2)) { |
324 | val = 0; | 319 | val = 0; |
325 | opt += 2; | 320 | opt += 2; |
326 | } | 321 | } |
327 | if (!strcmp(opt, "bg")) | 322 | if (!strcmp(opt, "bg")) |
328 | bg = val; | 323 | bg = val; |
329 | else if (!strcmp(opt, "fg")) | 324 | else if (!strcmp(opt, "fg")) |
330 | bg = !val; | 325 | bg = !val; |
331 | else if (!strcmp(opt, "soft")) | 326 | else if (!strcmp(opt, "soft")) |
332 | soft = val; | 327 | soft = val; |
@@ -348,11 +343,12 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
348 | if (nfs_mount_version >= 3) | 343 | if (nfs_mount_version >= 3) |
349 | nolock = !val; | 344 | nolock = !val; |
350 | else | 345 | else |
351 | printf(_("Warning: option nolock is not supported.\n")); | 346 | printf(_ |
347 | ("Warning: option nolock is not supported.\n")); | ||
352 | } else { | 348 | } else { |
353 | if (!sloppy) { | 349 | if (!sloppy) { |
354 | printf(_("unknown nfs mount option: " | 350 | printf(_("unknown nfs mount option: " |
355 | "%s%s\n"), val ? "" : "no", opt); | 351 | "%s%s\n"), val ? "" : "no", opt); |
356 | goto fail; | 352 | goto fail; |
357 | } | 353 | } |
358 | } | 354 | } |
@@ -378,22 +374,21 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
378 | 374 | ||
379 | #ifdef NFS_MOUNT_DEBUG | 375 | #ifdef NFS_MOUNT_DEBUG |
380 | printf("rsize = %d, wsize = %d, timeo = %d, retrans = %d\n", | 376 | printf("rsize = %d, wsize = %d, timeo = %d, retrans = %d\n", |
381 | data.rsize, data.wsize, data.timeo, data.retrans); | 377 | data.rsize, data.wsize, data.timeo, data.retrans); |
382 | printf("acreg (min, max) = (%d, %d), acdir (min, max) = (%d, %d)\n", | 378 | printf("acreg (min, max) = (%d, %d), acdir (min, max) = (%d, %d)\n", |
383 | data.acregmin, data.acregmax, data.acdirmin, data.acdirmax); | 379 | data.acregmin, data.acregmax, data.acdirmin, data.acdirmax); |
384 | printf("port = %d, bg = %d, retry = %d, flags = %.8x\n", | 380 | printf("port = %d, bg = %d, retry = %d, flags = %.8x\n", |
385 | port, bg, retry, data.flags); | 381 | port, bg, retry, data.flags); |
386 | printf("mountprog = %d, mountvers = %d, nfsprog = %d, nfsvers = %d\n", | 382 | printf("mountprog = %d, mountvers = %d, nfsprog = %d, nfsvers = %d\n", |
387 | mountprog, mountvers, nfsprog, nfsvers); | 383 | mountprog, mountvers, nfsprog, nfsvers); |
388 | printf("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d\n", | 384 | printf("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d\n", |
389 | (data.flags & NFS_MOUNT_SOFT) != 0, | 385 | (data.flags & NFS_MOUNT_SOFT) != 0, |
390 | (data.flags & NFS_MOUNT_INTR) != 0, | 386 | (data.flags & NFS_MOUNT_INTR) != 0, |
391 | (data.flags & NFS_MOUNT_POSIX) != 0, | 387 | (data.flags & NFS_MOUNT_POSIX) != 0, |
392 | (data.flags & NFS_MOUNT_NOCTO) != 0, | 388 | (data.flags & NFS_MOUNT_NOCTO) != 0, |
393 | (data.flags & NFS_MOUNT_NOAC) != 0); | 389 | (data.flags & NFS_MOUNT_NOAC) != 0); |
394 | #if NFS_MOUNT_VERSION >= 2 | 390 | #if NFS_MOUNT_VERSION >= 2 |
395 | printf("tcp = %d\n", | 391 | printf("tcp = %d\n", (data.flags & NFS_MOUNT_TCP) != 0); |
396 | (data.flags & NFS_MOUNT_TCP) != 0); | ||
397 | #endif | 392 | #endif |
398 | #endif | 393 | #endif |
399 | 394 | ||
@@ -409,7 +404,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
409 | * give up immediately, to avoid the initial timeout. | 404 | * give up immediately, to avoid the initial timeout. |
410 | */ | 405 | */ |
411 | if (bg && !running_bg && | 406 | if (bg && !running_bg && |
412 | prev_bg_host && strcmp(hostname, prev_bg_host) == 0) { | 407 | prev_bg_host && strcmp(hostname, prev_bg_host) == 0) { |
413 | if (retry > 0) | 408 | if (retry > 0) |
414 | retval = EX_BG; | 409 | retval = EX_BG; |
415 | return retval; | 410 | return retval; |
@@ -418,25 +413,24 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
418 | /* create mount deamon client */ | 413 | /* create mount deamon client */ |
419 | /* See if the nfs host = mount host. */ | 414 | /* See if the nfs host = mount host. */ |
420 | if (mounthost) { | 415 | if (mounthost) { |
421 | if (mounthost[0] >= '0' && mounthost[0] <= '9') { | 416 | if (mounthost[0] >= '0' && mounthost[0] <= '9') { |
422 | mount_server_addr.sin_family = AF_INET; | 417 | mount_server_addr.sin_family = AF_INET; |
423 | mount_server_addr.sin_addr.s_addr = inet_addr(hostname); | 418 | mount_server_addr.sin_addr.s_addr = inet_addr(hostname); |
424 | } else { | 419 | } else { |
425 | if ((hp = gethostbyname(mounthost)) == NULL) { | 420 | if ((hp = gethostbyname(mounthost)) == NULL) { |
426 | fprintf(stderr, _("mount: can't get address for %s\n"), | 421 | fprintf(stderr, _("mount: can't get address for %s\n"), |
427 | hostname); | 422 | hostname); |
428 | goto fail; | 423 | goto fail; |
429 | } else { | 424 | } else { |
430 | if (hp->h_length > sizeof(struct in_addr)) { | 425 | if (hp->h_length > sizeof(struct in_addr)) { |
431 | fprintf(stderr, | 426 | fprintf(stderr, _("mount: got bad hp->h_length?\n")); |
432 | _("mount: got bad hp->h_length?\n")); | 427 | hp->h_length = sizeof(struct in_addr); |
433 | hp->h_length = sizeof(struct in_addr); | 428 | } |
434 | } | 429 | mount_server_addr.sin_family = AF_INET; |
435 | mount_server_addr.sin_family = AF_INET; | 430 | memcpy(&mount_server_addr.sin_addr, |
436 | memcpy(&mount_server_addr.sin_addr, | 431 | hp->h_addr, hp->h_length); |
437 | hp->h_addr, hp->h_length); | 432 | } |
438 | } | 433 | } |
439 | } | ||
440 | } | 434 | } |
441 | 435 | ||
442 | /* | 436 | /* |
@@ -466,7 +460,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
466 | for (;;) { | 460 | for (;;) { |
467 | if (bg && stat(node, &statbuf) == -1) { | 461 | if (bg && stat(node, &statbuf) == -1) { |
468 | if (running_bg) { | 462 | if (running_bg) { |
469 | sleep(val); /* 1, 2, 4, 8, 16, 30, ... */ | 463 | sleep(val); /* 1, 2, 4, 8, 16, 30, ... */ |
470 | val *= 2; | 464 | val *= 2; |
471 | if (val > 30) | 465 | if (val > 30) |
472 | val = 30; | 466 | val = 30; |
@@ -480,24 +474,24 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
480 | mount_server_addr.sin_port = htons(mountport); | 474 | mount_server_addr.sin_port = htons(mountport); |
481 | msock = RPC_ANYSOCK; | 475 | msock = RPC_ANYSOCK; |
482 | mclient = clnttcp_create(&mount_server_addr, | 476 | mclient = clnttcp_create(&mount_server_addr, |
483 | mountprog, mountvers, | 477 | mountprog, mountvers, &msock, 0, 0); |
484 | &msock, 0, 0); | ||
485 | 478 | ||
486 | /* if this fails, contact the mount daemon via UDP */ | 479 | /* if this fails, contact the mount daemon via UDP */ |
487 | if (!mclient) { | 480 | if (!mclient) { |
488 | mount_server_addr.sin_port = htons(mountport); | 481 | mount_server_addr.sin_port = htons(mountport); |
489 | msock = RPC_ANYSOCK; | 482 | msock = RPC_ANYSOCK; |
490 | mclient = clntudp_create(&mount_server_addr, | 483 | mclient = clntudp_create(&mount_server_addr, |
491 | mountprog, mountvers, | 484 | mountprog, mountvers, |
492 | retry_timeout, &msock); | 485 | retry_timeout, &msock); |
493 | } | 486 | } |
494 | if (mclient) { | 487 | if (mclient) { |
495 | /* try to mount hostname:dirname */ | 488 | /* try to mount hostname:dirname */ |
496 | mclient->cl_auth = authunix_create_default(); | 489 | mclient->cl_auth = authunix_create_default(); |
497 | clnt_stat = clnt_call(mclient, MOUNTPROC_MNT, | 490 | clnt_stat = clnt_call(mclient, MOUNTPROC_MNT, |
498 | (xdrproc_t) xdr_dirpath, (caddr_t) &dirname, | 491 | (xdrproc_t) xdr_dirpath, |
499 | (xdrproc_t) xdr_fhstatus, (caddr_t) &status, | 492 | (caddr_t) & dirname, |
500 | total_timeout); | 493 | (xdrproc_t) xdr_fhstatus, |
494 | (caddr_t) & status, total_timeout); | ||
501 | if (clnt_stat == RPC_SUCCESS) | 495 | if (clnt_stat == RPC_SUCCESS) |
502 | break; /* we're done */ | 496 | break; /* we're done */ |
503 | if (errno != ECONNREFUSED) { | 497 | if (errno != ECONNREFUSED) { |
@@ -517,7 +511,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
517 | prevt = t; | 511 | prevt = t; |
518 | } | 512 | } |
519 | if (!bg) | 513 | if (!bg) |
520 | goto fail; | 514 | goto fail; |
521 | if (!running_bg) { | 515 | if (!running_bg) { |
522 | prev_bg_host = xstrdup(hostname); | 516 | prev_bg_host = xstrdup(hostname); |
523 | if (retry > 0) | 517 | if (retry > 0) |
@@ -531,18 +525,18 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
531 | 525 | ||
532 | if (status.fhs_status != 0) { | 526 | if (status.fhs_status != 0) { |
533 | fprintf(stderr, | 527 | fprintf(stderr, |
534 | _("mount: %s:%s failed, reason given by server: %s\n"), | 528 | _("mount: %s:%s failed, reason given by server: %s\n"), |
535 | hostname, dirname, nfs_strerror(status.fhs_status)); | 529 | hostname, dirname, nfs_strerror(status.fhs_status)); |
536 | goto fail; | 530 | goto fail; |
537 | } | 531 | } |
538 | memcpy((char *) &root_fhandle, (char *) status.fhstatus_u.fhs_fhandle, | 532 | memcpy((char *) &root_fhandle, (char *) status.fhstatus_u.fhs_fhandle, |
539 | sizeof (root_fhandle)); | 533 | sizeof(root_fhandle)); |
540 | 534 | ||
541 | /* create nfs socket for kernel */ | 535 | /* create nfs socket for kernel */ |
542 | 536 | ||
543 | if (tcp) { | 537 | if (tcp) { |
544 | if (nfs_mount_version < 3) { | 538 | if (nfs_mount_version < 3) { |
545 | printf(_("NFS over TCP is not supported.\n")); | 539 | printf(_("NFS over TCP is not supported.\n")); |
546 | goto fail; | 540 | goto fail; |
547 | } | 541 | } |
548 | fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); | 542 | fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
@@ -559,7 +553,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
559 | if (port == 0) { | 553 | if (port == 0) { |
560 | server_addr.sin_port = PMAPPORT; | 554 | server_addr.sin_port = PMAPPORT; |
561 | port = pmap_getport(&server_addr, nfsprog, nfsvers, | 555 | port = pmap_getport(&server_addr, nfsprog, nfsvers, |
562 | tcp ? IPPROTO_TCP : IPPROTO_UDP); | 556 | tcp ? IPPROTO_TCP : IPPROTO_UDP); |
563 | if (port == 0) | 557 | if (port == 0) |
564 | port = NFS_PORT; | 558 | port = NFS_PORT; |
565 | #ifdef NFS_MOUNT_DEBUG | 559 | #ifdef NFS_MOUNT_DEBUG |
@@ -571,14 +565,14 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
571 | printf(_("using port %d for nfs deamon\n"), port); | 565 | printf(_("using port %d for nfs deamon\n"), port); |
572 | #endif | 566 | #endif |
573 | server_addr.sin_port = htons(port); | 567 | server_addr.sin_port = htons(port); |
574 | /* | 568 | /* |
575 | * connect() the socket for kernels 1.3.10 and below only, | 569 | * connect() the socket for kernels 1.3.10 and below only, |
576 | * to avoid problems with multihomed hosts. | 570 | * to avoid problems with multihomed hosts. |
577 | * --Swen | 571 | * --Swen |
578 | */ | 572 | */ |
579 | if (linux_version_code() <= 66314 | 573 | if (linux_version_code() <= 66314 |
580 | && connect(fsock, (struct sockaddr *) &server_addr, | 574 | && connect(fsock, (struct sockaddr *) &server_addr, |
581 | sizeof (server_addr)) < 0) { | 575 | sizeof(server_addr)) < 0) { |
582 | perror(_("nfs connect")); | 576 | perror(_("nfs connect")); |
583 | goto fail; | 577 | goto fail; |
584 | } | 578 | } |
@@ -587,7 +581,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
587 | 581 | ||
588 | data.fd = fsock; | 582 | data.fd = fsock; |
589 | memcpy((char *) &data.root, (char *) &root_fhandle, | 583 | memcpy((char *) &data.root, (char *) &root_fhandle, |
590 | sizeof (root_fhandle)); | 584 | sizeof(root_fhandle)); |
591 | memcpy((char *) &data.addr, (char *) &server_addr, sizeof(data.addr)); | 585 | memcpy((char *) &data.addr, (char *) &server_addr, sizeof(data.addr)); |
592 | strncpy(data.hostname, hostname, sizeof(data.hostname)); | 586 | strncpy(data.hostname, hostname, sizeof(data.hostname)); |
593 | 587 | ||
@@ -600,7 +594,7 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
600 | 594 | ||
601 | /* abort */ | 595 | /* abort */ |
602 | 596 | ||
603 | fail: | 597 | fail: |
604 | if (msock != -1) { | 598 | if (msock != -1) { |
605 | if (mclient) { | 599 | if (mclient) { |
606 | auth_destroy(mclient->cl_auth); | 600 | auth_destroy(mclient->cl_auth); |
@@ -611,7 +605,7 @@ fail: | |||
611 | if (fsock != -1) | 605 | if (fsock != -1) |
612 | close(fsock); | 606 | close(fsock); |
613 | return retval; | 607 | return retval; |
614 | } | 608 | } |
615 | 609 | ||
616 | /* | 610 | /* |
617 | * We need to translate between nfs status return values and | 611 | * We need to translate between nfs status return values and |
@@ -630,33 +624,37 @@ static struct { | |||
630 | enum nfs_stat stat; | 624 | enum nfs_stat stat; |
631 | int errnum; | 625 | int errnum; |
632 | } nfs_errtbl[] = { | 626 | } nfs_errtbl[] = { |
633 | { NFS_OK, 0 }, | 627 | { |
634 | { NFSERR_PERM, EPERM }, | 628 | NFS_OK, 0}, { |
635 | { NFSERR_NOENT, ENOENT }, | 629 | NFSERR_PERM, EPERM}, { |
636 | { NFSERR_IO, EIO }, | 630 | NFSERR_NOENT, ENOENT}, { |
637 | { NFSERR_NXIO, ENXIO }, | 631 | NFSERR_IO, EIO}, { |
638 | { NFSERR_ACCES, EACCES }, | 632 | NFSERR_NXIO, ENXIO}, { |
639 | { NFSERR_EXIST, EEXIST }, | 633 | NFSERR_ACCES, EACCES}, { |
640 | { NFSERR_NODEV, ENODEV }, | 634 | NFSERR_EXIST, EEXIST}, { |
641 | { NFSERR_NOTDIR, ENOTDIR }, | 635 | NFSERR_NODEV, ENODEV}, { |
642 | { NFSERR_ISDIR, EISDIR }, | 636 | NFSERR_NOTDIR, ENOTDIR}, { |
637 | NFSERR_ISDIR, EISDIR}, | ||
643 | #ifdef NFSERR_INVAL | 638 | #ifdef NFSERR_INVAL |
644 | { NFSERR_INVAL, EINVAL }, /* that Sun forgot */ | 639 | { |
640 | NFSERR_INVAL, EINVAL}, /* that Sun forgot */ | ||
645 | #endif | 641 | #endif |
646 | { NFSERR_FBIG, EFBIG }, | 642 | { |
647 | { NFSERR_NOSPC, ENOSPC }, | 643 | NFSERR_FBIG, EFBIG}, { |
648 | { NFSERR_ROFS, EROFS }, | 644 | NFSERR_NOSPC, ENOSPC}, { |
649 | { NFSERR_NAMETOOLONG, ENAMETOOLONG }, | 645 | NFSERR_ROFS, EROFS}, { |
650 | { NFSERR_NOTEMPTY, ENOTEMPTY }, | 646 | NFSERR_NAMETOOLONG, ENAMETOOLONG}, { |
651 | { NFSERR_DQUOT, EDQUOT }, | 647 | NFSERR_NOTEMPTY, ENOTEMPTY}, { |
652 | { NFSERR_STALE, ESTALE }, | 648 | NFSERR_DQUOT, EDQUOT}, { |
649 | NFSERR_STALE, ESTALE}, | ||
653 | #ifdef EWFLUSH | 650 | #ifdef EWFLUSH |
654 | { NFSERR_WFLUSH, EWFLUSH }, | 651 | { |
652 | NFSERR_WFLUSH, EWFLUSH}, | ||
655 | #endif | 653 | #endif |
656 | /* Throw in some NFSv3 values for even more fun (HP returns these) */ | 654 | /* Throw in some NFSv3 values for even more fun (HP returns these) */ |
657 | { 71, EREMOTE }, | 655 | { |
658 | 656 | 71, EREMOTE}, { | |
659 | { -1, EIO } | 657 | -1, EIO} |
660 | }; | 658 | }; |
661 | 659 | ||
662 | static char *nfs_strerror(int stat) | 660 | static char *nfs_strerror(int stat) |
@@ -673,33 +671,32 @@ static char *nfs_strerror(int stat) | |||
673 | } | 671 | } |
674 | 672 | ||
675 | #if 0 | 673 | #if 0 |
676 | int | 674 | int my_getport(struct in_addr server, struct timeval *timeo, ...) |
677 | my_getport(struct in_addr server, struct timeval *timeo, ...) | ||
678 | { | 675 | { |
679 | struct sockaddr_in sin; | 676 | struct sockaddr_in sin; |
680 | struct pmap pmap; | 677 | struct pmap pmap; |
681 | CLIENT *clnt; | 678 | CLIENT *clnt; |
682 | int sock = RPC_ANYSOCK, port; | 679 | int sock = RPC_ANYSOCK, port; |
683 | 680 | ||
684 | pmap.pm_prog = prog; | 681 | pmap.pm_prog = prog; |
685 | pmap.pm_vers = vers; | 682 | pmap.pm_vers = vers; |
686 | pmap.pm_prot = prot; | 683 | pmap.pm_prot = prot; |
687 | pmap.pm_port = 0; | 684 | pmap.pm_port = 0; |
688 | sin.sin_family = AF_INET; | 685 | sin.sin_family = AF_INET; |
689 | sin.sin_addr = server; | 686 | sin.sin_addr = server; |
690 | sin.sin_port = htons(111); | 687 | sin.sin_port = htons(111); |
691 | clnt = clntudp_create(&sin, 100000, 2, *timeo, &sock); | 688 | clnt = clntudp_create(&sin, 100000, 2, *timeo, &sock); |
692 | status = clnt_call(clnt, PMAP_GETPORT, | 689 | status = clnt_call(clnt, PMAP_GETPORT, |
693 | &pmap, (xdrproc_t) xdr_pmap, | 690 | &pmap, (xdrproc_t) xdr_pmap, |
694 | &port, (xdrproc_t) xdr_uint); | 691 | &port, (xdrproc_t) xdr_uint); |
695 | if (status != SUCCESS) { | 692 | if (status != SUCCESS) { |
696 | /* natter */ | 693 | /* natter */ |
697 | port = 0; | 694 | port = 0; |
698 | } | 695 | } |
699 | 696 | ||
700 | clnt_destroy(clnt); | 697 | clnt_destroy(clnt); |
701 | close(sock); | 698 | close(sock); |
702 | return port; | 699 | return port; |
703 | } | 700 | } |
704 | #endif | 701 | #endif |
705 | 702 | ||
@@ -756,28 +753,26 @@ my_getport(struct in_addr server, struct timeval *timeo, ...) | |||
756 | 753 | ||
757 | /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ | 754 | /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ |
758 | 755 | ||
759 | bool_t | 756 | bool_t xdr_fhandle(XDR * xdrs, fhandle objp) |
760 | xdr_fhandle(XDR *xdrs, fhandle objp) | ||
761 | { | 757 | { |
762 | 758 | ||
763 | if (!xdr_opaque(xdrs, objp, FHSIZE)) { | 759 | if (!xdr_opaque(xdrs, objp, FHSIZE)) { |
764 | return (FALSE); | 760 | return (FALSE); |
765 | } | 761 | } |
766 | return (TRUE); | 762 | return (TRUE); |
767 | } | 763 | } |
768 | 764 | ||
769 | bool_t | 765 | bool_t xdr_fhstatus(XDR * xdrs, fhstatus * objp) |
770 | xdr_fhstatus(XDR *xdrs, fhstatus *objp) | ||
771 | { | 766 | { |
772 | 767 | ||
773 | if (!xdr_u_int(xdrs, &objp->fhs_status)) { | 768 | if (!xdr_u_int(xdrs, &objp->fhs_status)) { |
774 | return (FALSE); | 769 | return (FALSE); |
775 | } | 770 | } |
776 | switch (objp->fhs_status) { | 771 | switch (objp->fhs_status) { |
777 | case 0: | 772 | case 0: |
778 | if (!xdr_fhandle(xdrs, objp->fhstatus_u.fhs_fhandle)) { | 773 | if (!xdr_fhandle(xdrs, objp->fhstatus_u.fhs_fhandle)) { |
779 | return (FALSE); | 774 | return (FALSE); |
780 | } | 775 | } |
781 | break; | 776 | break; |
782 | default: | 777 | default: |
783 | break; | 778 | break; |
@@ -785,245 +780,246 @@ xdr_fhstatus(XDR *xdrs, fhstatus *objp) | |||
785 | return (TRUE); | 780 | return (TRUE); |
786 | } | 781 | } |
787 | 782 | ||
788 | bool_t | 783 | bool_t xdr_dirpath(XDR * xdrs, dirpath * objp) |
789 | xdr_dirpath(XDR *xdrs, dirpath *objp) | ||
790 | { | 784 | { |
791 | 785 | ||
792 | if (!xdr_string(xdrs, objp, MNTPATHLEN)) { | 786 | if (!xdr_string(xdrs, objp, MNTPATHLEN)) { |
793 | return (FALSE); | 787 | return (FALSE); |
794 | } | 788 | } |
795 | return (TRUE); | 789 | return (TRUE); |
796 | } | 790 | } |
797 | 791 | ||
798 | bool_t | 792 | bool_t xdr_name(XDR * xdrs, name * objp) |
799 | xdr_name(XDR *xdrs, name *objp) | ||
800 | { | 793 | { |
801 | 794 | ||
802 | if (!xdr_string(xdrs, objp, MNTNAMLEN)) { | 795 | if (!xdr_string(xdrs, objp, MNTNAMLEN)) { |
803 | return (FALSE); | 796 | return (FALSE); |
804 | } | 797 | } |
805 | return (TRUE); | 798 | return (TRUE); |
806 | } | 799 | } |
807 | 800 | ||
808 | bool_t | 801 | bool_t xdr_mountlist(XDR * xdrs, mountlist * objp) |
809 | xdr_mountlist(XDR *xdrs, mountlist *objp) | ||
810 | { | 802 | { |
811 | 803 | ||
812 | if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct mountbody), (xdrproc_t)xdr_mountbody)) { | 804 | if (!xdr_pointer |
813 | return (FALSE); | 805 | (xdrs, (char **) objp, sizeof(struct mountbody), |
814 | } | 806 | (xdrproc_t) xdr_mountbody)) { |
807 | return (FALSE); | ||
808 | } | ||
815 | return (TRUE); | 809 | return (TRUE); |
816 | } | 810 | } |
817 | 811 | ||
818 | bool_t | 812 | bool_t xdr_mountbody(XDR * xdrs, mountbody * objp) |
819 | xdr_mountbody(XDR *xdrs, mountbody *objp) | ||
820 | { | 813 | { |
821 | 814 | ||
822 | if (!xdr_name(xdrs, &objp->ml_hostname)) { | 815 | if (!xdr_name(xdrs, &objp->ml_hostname)) { |
823 | return (FALSE); | 816 | return (FALSE); |
824 | } | 817 | } |
825 | if (!xdr_dirpath(xdrs, &objp->ml_directory)) { | 818 | if (!xdr_dirpath(xdrs, &objp->ml_directory)) { |
826 | return (FALSE); | 819 | return (FALSE); |
827 | } | 820 | } |
828 | if (!xdr_mountlist(xdrs, &objp->ml_next)) { | 821 | if (!xdr_mountlist(xdrs, &objp->ml_next)) { |
829 | return (FALSE); | 822 | return (FALSE); |
830 | } | 823 | } |
831 | return (TRUE); | 824 | return (TRUE); |
832 | } | 825 | } |
833 | 826 | ||
834 | bool_t | 827 | bool_t xdr_groups(XDR * xdrs, groups * objp) |
835 | xdr_groups(XDR *xdrs, groups *objp) | ||
836 | { | 828 | { |
837 | 829 | ||
838 | if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct groupnode), (xdrproc_t)xdr_groupnode)) { | 830 | if (!xdr_pointer |
839 | return (FALSE); | 831 | (xdrs, (char **) objp, sizeof(struct groupnode), |
840 | } | 832 | (xdrproc_t) xdr_groupnode)) { |
833 | return (FALSE); | ||
834 | } | ||
841 | return (TRUE); | 835 | return (TRUE); |
842 | } | 836 | } |
843 | 837 | ||
844 | bool_t | 838 | bool_t xdr_groupnode(XDR * xdrs, groupnode * objp) |
845 | xdr_groupnode(XDR *xdrs, groupnode *objp) | ||
846 | { | 839 | { |
847 | 840 | ||
848 | if (!xdr_name(xdrs, &objp->gr_name)) { | 841 | if (!xdr_name(xdrs, &objp->gr_name)) { |
849 | return (FALSE); | 842 | return (FALSE); |
850 | } | 843 | } |
851 | if (!xdr_groups(xdrs, &objp->gr_next)) { | 844 | if (!xdr_groups(xdrs, &objp->gr_next)) { |
852 | return (FALSE); | 845 | return (FALSE); |
853 | } | 846 | } |
854 | return (TRUE); | 847 | return (TRUE); |
855 | } | 848 | } |
856 | 849 | ||
857 | bool_t | 850 | bool_t xdr_exports(XDR * xdrs, exports * objp) |
858 | xdr_exports(XDR *xdrs, exports *objp) | ||
859 | { | 851 | { |
860 | 852 | ||
861 | if (!xdr_pointer(xdrs, (char **)objp, sizeof(struct exportnode), (xdrproc_t)xdr_exportnode)) { | 853 | if (!xdr_pointer |
862 | return (FALSE); | 854 | (xdrs, (char **) objp, sizeof(struct exportnode), |
863 | } | 855 | (xdrproc_t) xdr_exportnode)) { |
856 | return (FALSE); | ||
857 | } | ||
864 | return (TRUE); | 858 | return (TRUE); |
865 | } | 859 | } |
866 | 860 | ||
867 | bool_t | 861 | bool_t xdr_exportnode(XDR * xdrs, exportnode * objp) |
868 | xdr_exportnode(XDR *xdrs, exportnode *objp) | ||
869 | { | 862 | { |
870 | 863 | ||
871 | if (!xdr_dirpath(xdrs, &objp->ex_dir)) { | 864 | if (!xdr_dirpath(xdrs, &objp->ex_dir)) { |
872 | return (FALSE); | 865 | return (FALSE); |
873 | } | 866 | } |
874 | if (!xdr_groups(xdrs, &objp->ex_groups)) { | 867 | if (!xdr_groups(xdrs, &objp->ex_groups)) { |
875 | return (FALSE); | 868 | return (FALSE); |
876 | } | 869 | } |
877 | if (!xdr_exports(xdrs, &objp->ex_next)) { | 870 | if (!xdr_exports(xdrs, &objp->ex_next)) { |
878 | return (FALSE); | 871 | return (FALSE); |
879 | } | 872 | } |
880 | return (TRUE); | 873 | return (TRUE); |
881 | } | 874 | } |
882 | 875 | ||
883 | bool_t | 876 | bool_t xdr_ppathcnf(XDR * xdrs, ppathcnf * objp) |
884 | xdr_ppathcnf(XDR *xdrs, ppathcnf *objp) | ||
885 | { | 877 | { |
886 | 878 | ||
887 | register long *buf; | 879 | register long *buf; |
888 | 880 | ||
889 | int i; | 881 | int i; |
890 | 882 | ||
891 | if (xdrs->x_op == XDR_ENCODE) { | 883 | if (xdrs->x_op == XDR_ENCODE) { |
892 | buf = (long*)XDR_INLINE(xdrs,6 * BYTES_PER_XDR_UNIT); | 884 | buf = (long *) XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT); |
893 | if (buf == NULL) { | ||
894 | if (!xdr_int(xdrs, &objp->pc_link_max)) { | ||
895 | return (FALSE); | ||
896 | } | ||
897 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { | ||
898 | return (FALSE); | ||
899 | } | ||
900 | if (!xdr_short(xdrs, &objp->pc_max_input)) { | ||
901 | return (FALSE); | ||
902 | } | ||
903 | if (!xdr_short(xdrs, &objp->pc_name_max)) { | ||
904 | return (FALSE); | ||
905 | } | ||
906 | if (!xdr_short(xdrs, &objp->pc_path_max)) { | ||
907 | return (FALSE); | ||
908 | } | ||
909 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { | ||
910 | return (FALSE); | ||
911 | } | ||
912 | |||
913 | } | ||
914 | else { | ||
915 | IXDR_PUT_LONG(buf,objp->pc_link_max); | ||
916 | IXDR_PUT_SHORT(buf,objp->pc_max_canon); | ||
917 | IXDR_PUT_SHORT(buf,objp->pc_max_input); | ||
918 | IXDR_PUT_SHORT(buf,objp->pc_name_max); | ||
919 | IXDR_PUT_SHORT(buf,objp->pc_path_max); | ||
920 | IXDR_PUT_SHORT(buf,objp->pc_pipe_buf); | ||
921 | } | ||
922 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { | ||
923 | return (FALSE); | ||
924 | } | ||
925 | if (!xdr_char(xdrs, &objp->pc_xxx)) { | ||
926 | return (FALSE); | ||
927 | } | ||
928 | buf = (long*)XDR_INLINE(xdrs, 2 * BYTES_PER_XDR_UNIT); | ||
929 | if (buf == NULL) { | 885 | if (buf == NULL) { |
930 | if (!xdr_vector(xdrs, (char *)objp->pc_mask, 2, sizeof(short), (xdrproc_t)xdr_short)) { | 886 | if (!xdr_int(xdrs, &objp->pc_link_max)) { |
931 | return (FALSE); | 887 | return (FALSE); |
932 | } | 888 | } |
933 | 889 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { | |
934 | } | 890 | return (FALSE); |
935 | else { | 891 | } |
936 | { register short *genp; | 892 | if (!xdr_short(xdrs, &objp->pc_max_input)) { |
937 | for ( i = 0,genp=objp->pc_mask; | 893 | return (FALSE); |
938 | i < 2; i++){ | 894 | } |
939 | IXDR_PUT_SHORT(buf,*genp++); | 895 | if (!xdr_short(xdrs, &objp->pc_name_max)) { |
940 | } | 896 | return (FALSE); |
941 | }; | 897 | } |
942 | } | 898 | if (!xdr_short(xdrs, &objp->pc_path_max)) { |
943 | 899 | return (FALSE); | |
944 | return (TRUE); | 900 | } |
901 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { | ||
902 | return (FALSE); | ||
903 | } | ||
904 | |||
905 | } else { | ||
906 | IXDR_PUT_LONG(buf, objp->pc_link_max); | ||
907 | IXDR_PUT_SHORT(buf, objp->pc_max_canon); | ||
908 | IXDR_PUT_SHORT(buf, objp->pc_max_input); | ||
909 | IXDR_PUT_SHORT(buf, objp->pc_name_max); | ||
910 | IXDR_PUT_SHORT(buf, objp->pc_path_max); | ||
911 | IXDR_PUT_SHORT(buf, objp->pc_pipe_buf); | ||
912 | } | ||
913 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { | ||
914 | return (FALSE); | ||
915 | } | ||
916 | if (!xdr_char(xdrs, &objp->pc_xxx)) { | ||
917 | return (FALSE); | ||
918 | } | ||
919 | buf = (long *) XDR_INLINE(xdrs, 2 * BYTES_PER_XDR_UNIT); | ||
920 | if (buf == NULL) { | ||
921 | if (!xdr_vector | ||
922 | (xdrs, (char *) objp->pc_mask, 2, sizeof(short), | ||
923 | (xdrproc_t) xdr_short)) { | ||
924 | return (FALSE); | ||
925 | } | ||
926 | |||
927 | } else { | ||
928 | { | ||
929 | register short *genp; | ||
930 | |||
931 | for (i = 0, genp = objp->pc_mask; i < 2; i++) { | ||
932 | IXDR_PUT_SHORT(buf, *genp++); | ||
933 | } | ||
934 | }; | ||
935 | } | ||
936 | |||
937 | return (TRUE); | ||
945 | } else if (xdrs->x_op == XDR_DECODE) { | 938 | } else if (xdrs->x_op == XDR_DECODE) { |
946 | buf = (long*)XDR_INLINE(xdrs,6 * BYTES_PER_XDR_UNIT); | 939 | buf = (long *) XDR_INLINE(xdrs, 6 * BYTES_PER_XDR_UNIT); |
947 | if (buf == NULL) { | 940 | if (buf == NULL) { |
948 | if (!xdr_int(xdrs, &objp->pc_link_max)) { | 941 | if (!xdr_int(xdrs, &objp->pc_link_max)) { |
949 | return (FALSE); | 942 | return (FALSE); |
950 | } | 943 | } |
951 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { | 944 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { |
952 | return (FALSE); | 945 | return (FALSE); |
953 | } | 946 | } |
954 | if (!xdr_short(xdrs, &objp->pc_max_input)) { | 947 | if (!xdr_short(xdrs, &objp->pc_max_input)) { |
955 | return (FALSE); | 948 | return (FALSE); |
956 | } | 949 | } |
957 | if (!xdr_short(xdrs, &objp->pc_name_max)) { | 950 | if (!xdr_short(xdrs, &objp->pc_name_max)) { |
958 | return (FALSE); | 951 | return (FALSE); |
959 | } | 952 | } |
960 | if (!xdr_short(xdrs, &objp->pc_path_max)) { | 953 | if (!xdr_short(xdrs, &objp->pc_path_max)) { |
961 | return (FALSE); | 954 | return (FALSE); |
962 | } | 955 | } |
963 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { | 956 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { |
964 | return (FALSE); | 957 | return (FALSE); |
965 | } | 958 | } |
966 | 959 | ||
967 | } | 960 | } else { |
968 | else { | 961 | objp->pc_link_max = IXDR_GET_LONG(buf); |
969 | objp->pc_link_max = IXDR_GET_LONG(buf); | 962 | objp->pc_max_canon = IXDR_GET_SHORT(buf); |
970 | objp->pc_max_canon = IXDR_GET_SHORT(buf); | 963 | objp->pc_max_input = IXDR_GET_SHORT(buf); |
971 | objp->pc_max_input = IXDR_GET_SHORT(buf); | 964 | objp->pc_name_max = IXDR_GET_SHORT(buf); |
972 | objp->pc_name_max = IXDR_GET_SHORT(buf); | 965 | objp->pc_path_max = IXDR_GET_SHORT(buf); |
973 | objp->pc_path_max = IXDR_GET_SHORT(buf); | 966 | objp->pc_pipe_buf = IXDR_GET_SHORT(buf); |
974 | objp->pc_pipe_buf = IXDR_GET_SHORT(buf); | 967 | } |
975 | } | 968 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { |
976 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { | 969 | return (FALSE); |
977 | return (FALSE); | 970 | } |
978 | } | 971 | if (!xdr_char(xdrs, &objp->pc_xxx)) { |
979 | if (!xdr_char(xdrs, &objp->pc_xxx)) { | 972 | return (FALSE); |
980 | return (FALSE); | 973 | } |
981 | } | 974 | buf = (long *) XDR_INLINE(xdrs, 2 * BYTES_PER_XDR_UNIT); |
982 | buf = (long*)XDR_INLINE(xdrs, 2 * BYTES_PER_XDR_UNIT); | ||
983 | if (buf == NULL) { | 975 | if (buf == NULL) { |
984 | if (!xdr_vector(xdrs, (char *)objp->pc_mask, 2, sizeof(short), (xdrproc_t)xdr_short)) { | 976 | if (!xdr_vector |
985 | return (FALSE); | 977 | (xdrs, (char *) objp->pc_mask, 2, sizeof(short), |
986 | } | 978 | (xdrproc_t) xdr_short)) { |
987 | 979 | return (FALSE); | |
988 | } | 980 | } |
989 | else { | 981 | |
990 | { register short *genp; | 982 | } else { |
991 | for ( i = 0,genp=objp->pc_mask; | 983 | { |
992 | i < 2; i++){ | 984 | register short *genp; |
993 | *genp++ = IXDR_GET_SHORT(buf); | 985 | |
994 | } | 986 | for (i = 0, genp = objp->pc_mask; i < 2; i++) { |
995 | }; | 987 | *genp++ = IXDR_GET_SHORT(buf); |
996 | } | 988 | } |
997 | return(TRUE); | 989 | }; |
990 | } | ||
991 | return (TRUE); | ||
998 | } | 992 | } |
999 | 993 | ||
1000 | if (!xdr_int(xdrs, &objp->pc_link_max)) { | 994 | if (!xdr_int(xdrs, &objp->pc_link_max)) { |
1001 | return (FALSE); | 995 | return (FALSE); |
1002 | } | 996 | } |
1003 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { | 997 | if (!xdr_short(xdrs, &objp->pc_max_canon)) { |
1004 | return (FALSE); | 998 | return (FALSE); |
1005 | } | 999 | } |
1006 | if (!xdr_short(xdrs, &objp->pc_max_input)) { | 1000 | if (!xdr_short(xdrs, &objp->pc_max_input)) { |
1007 | return (FALSE); | 1001 | return (FALSE); |
1008 | } | 1002 | } |
1009 | if (!xdr_short(xdrs, &objp->pc_name_max)) { | 1003 | if (!xdr_short(xdrs, &objp->pc_name_max)) { |
1010 | return (FALSE); | 1004 | return (FALSE); |
1011 | } | 1005 | } |
1012 | if (!xdr_short(xdrs, &objp->pc_path_max)) { | 1006 | if (!xdr_short(xdrs, &objp->pc_path_max)) { |
1013 | return (FALSE); | 1007 | return (FALSE); |
1014 | } | 1008 | } |
1015 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { | 1009 | if (!xdr_short(xdrs, &objp->pc_pipe_buf)) { |
1016 | return (FALSE); | 1010 | return (FALSE); |
1017 | } | 1011 | } |
1018 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { | 1012 | if (!xdr_u_char(xdrs, &objp->pc_vdisable)) { |
1019 | return (FALSE); | 1013 | return (FALSE); |
1020 | } | 1014 | } |
1021 | if (!xdr_char(xdrs, &objp->pc_xxx)) { | 1015 | if (!xdr_char(xdrs, &objp->pc_xxx)) { |
1022 | return (FALSE); | 1016 | return (FALSE); |
1023 | } | 1017 | } |
1024 | if (!xdr_vector(xdrs, (char *)objp->pc_mask, 2, sizeof(short), (xdrproc_t)xdr_short)) { | 1018 | if (!xdr_vector |
1025 | return (FALSE); | 1019 | (xdrs, (char *) objp->pc_mask, 2, sizeof(short), |
1026 | } | 1020 | (xdrproc_t) xdr_short)) { |
1021 | return (FALSE); | ||
1022 | } | ||
1027 | return (TRUE); | 1023 | return (TRUE); |
1028 | } | 1024 | } |
1029 | 1025 | ||
@@ -1063,247 +1059,232 @@ xdr_ppathcnf(XDR *xdrs, ppathcnf *objp) | |||
1063 | 1059 | ||
1064 | /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ | 1060 | /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ |
1065 | 1061 | ||
1066 | #include <string.h> /* for memset() */ | 1062 | #include <string.h> /* for memset() */ |
1067 | 1063 | ||
1068 | /* Default timeout can be changed using clnt_control() */ | 1064 | /* Default timeout can be changed using clnt_control() */ |
1069 | static struct timeval TIMEOUT = { 25, 0 }; | 1065 | static struct timeval TIMEOUT = { 25, 0 }; |
1070 | 1066 | ||
1071 | void * | 1067 | void *mountproc_null_1(argp, clnt) |
1072 | mountproc_null_1(argp, clnt) | 1068 | void *argp; |
1073 | void *argp; | 1069 | CLIENT *clnt; |
1074 | CLIENT *clnt; | ||
1075 | { | 1070 | { |
1076 | static char clnt_res; | 1071 | static char clnt_res; |
1077 | 1072 | ||
1078 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1073 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1079 | if (clnt_call(clnt, MOUNTPROC_NULL, (xdrproc_t) xdr_void, argp, (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1074 | if (clnt_call |
1075 | (clnt, MOUNTPROC_NULL, (xdrproc_t) xdr_void, argp, | ||
1076 | (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) != RPC_SUCCESS) { | ||
1080 | return (NULL); | 1077 | return (NULL); |
1081 | } | 1078 | } |
1082 | return ((void *)&clnt_res); | 1079 | return ((void *) &clnt_res); |
1083 | } | 1080 | } |
1084 | 1081 | ||
1085 | fhstatus * | 1082 | fhstatus *mountproc_mnt_1(argp, clnt) |
1086 | mountproc_mnt_1(argp, clnt) | 1083 | dirpath *argp; |
1087 | dirpath *argp; | 1084 | CLIENT *clnt; |
1088 | CLIENT *clnt; | ||
1089 | { | 1085 | { |
1090 | static fhstatus clnt_res; | 1086 | static fhstatus clnt_res; |
1091 | 1087 | ||
1092 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1088 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1093 | if (clnt_call(clnt, MOUNTPROC_MNT, (xdrproc_t) xdr_dirpath, | 1089 | if (clnt_call(clnt, MOUNTPROC_MNT, (xdrproc_t) xdr_dirpath, |
1094 | (caddr_t) argp, (xdrproc_t) xdr_fhstatus, | 1090 | (caddr_t) argp, (xdrproc_t) xdr_fhstatus, |
1095 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1091 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1096 | return (NULL); | 1092 | return (NULL); |
1097 | } | 1093 | } |
1098 | return (&clnt_res); | 1094 | return (&clnt_res); |
1099 | } | 1095 | } |
1100 | 1096 | ||
1101 | mountlist * | 1097 | mountlist *mountproc_dump_1(argp, clnt) |
1102 | mountproc_dump_1(argp, clnt) | 1098 | void *argp; |
1103 | void *argp; | 1099 | CLIENT *clnt; |
1104 | CLIENT *clnt; | ||
1105 | { | 1100 | { |
1106 | static mountlist clnt_res; | 1101 | static mountlist clnt_res; |
1107 | 1102 | ||
1108 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1103 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1109 | if (clnt_call(clnt, MOUNTPROC_DUMP, (xdrproc_t) xdr_void, | 1104 | if (clnt_call(clnt, MOUNTPROC_DUMP, (xdrproc_t) xdr_void, |
1110 | (caddr_t) argp, (xdrproc_t) xdr_mountlist, | 1105 | (caddr_t) argp, (xdrproc_t) xdr_mountlist, |
1111 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1106 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1112 | return (NULL); | 1107 | return (NULL); |
1113 | } | 1108 | } |
1114 | return (&clnt_res); | 1109 | return (&clnt_res); |
1115 | } | 1110 | } |
1116 | 1111 | ||
1117 | void * | 1112 | void *mountproc_umnt_1(argp, clnt) |
1118 | mountproc_umnt_1(argp, clnt) | 1113 | dirpath *argp; |
1119 | dirpath *argp; | 1114 | CLIENT *clnt; |
1120 | CLIENT *clnt; | ||
1121 | { | 1115 | { |
1122 | static char clnt_res; | 1116 | static char clnt_res; |
1123 | 1117 | ||
1124 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1118 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1125 | if (clnt_call(clnt, MOUNTPROC_UMNT, (xdrproc_t) xdr_dirpath, | 1119 | if (clnt_call(clnt, MOUNTPROC_UMNT, (xdrproc_t) xdr_dirpath, |
1126 | (caddr_t) argp, (xdrproc_t) xdr_void, | 1120 | (caddr_t) argp, (xdrproc_t) xdr_void, |
1127 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1121 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1128 | return (NULL); | 1122 | return (NULL); |
1129 | } | 1123 | } |
1130 | return ((void *)&clnt_res); | 1124 | return ((void *) &clnt_res); |
1131 | } | 1125 | } |
1132 | 1126 | ||
1133 | void * | 1127 | void *mountproc_umntall_1(argp, clnt) |
1134 | mountproc_umntall_1(argp, clnt) | 1128 | void *argp; |
1135 | void *argp; | 1129 | CLIENT *clnt; |
1136 | CLIENT *clnt; | ||
1137 | { | 1130 | { |
1138 | static char clnt_res; | 1131 | static char clnt_res; |
1139 | 1132 | ||
1140 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1133 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1141 | if (clnt_call(clnt, MOUNTPROC_UMNTALL, (xdrproc_t) xdr_void, | 1134 | if (clnt_call(clnt, MOUNTPROC_UMNTALL, (xdrproc_t) xdr_void, |
1142 | (caddr_t) argp, (xdrproc_t) xdr_void, | 1135 | (caddr_t) argp, (xdrproc_t) xdr_void, |
1143 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1136 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1144 | return (NULL); | 1137 | return (NULL); |
1145 | } | 1138 | } |
1146 | return ((void *)&clnt_res); | 1139 | return ((void *) &clnt_res); |
1147 | } | 1140 | } |
1148 | 1141 | ||
1149 | exports * | 1142 | exports *mountproc_export_1(argp, clnt) |
1150 | mountproc_export_1(argp, clnt) | 1143 | void *argp; |
1151 | void *argp; | 1144 | CLIENT *clnt; |
1152 | CLIENT *clnt; | ||
1153 | { | 1145 | { |
1154 | static exports clnt_res; | 1146 | static exports clnt_res; |
1155 | 1147 | ||
1156 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1148 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1157 | if (clnt_call(clnt, MOUNTPROC_EXPORT, (xdrproc_t) xdr_void, | 1149 | if (clnt_call(clnt, MOUNTPROC_EXPORT, (xdrproc_t) xdr_void, |
1158 | (caddr_t) argp, (xdrproc_t) xdr_exports, | 1150 | (caddr_t) argp, (xdrproc_t) xdr_exports, |
1159 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1151 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1160 | return (NULL); | 1152 | return (NULL); |
1161 | } | 1153 | } |
1162 | return (&clnt_res); | 1154 | return (&clnt_res); |
1163 | } | 1155 | } |
1164 | 1156 | ||
1165 | exports * | 1157 | exports *mountproc_exportall_1(argp, clnt) |
1166 | mountproc_exportall_1(argp, clnt) | 1158 | void *argp; |
1167 | void *argp; | 1159 | CLIENT *clnt; |
1168 | CLIENT *clnt; | ||
1169 | { | 1160 | { |
1170 | static exports clnt_res; | 1161 | static exports clnt_res; |
1171 | 1162 | ||
1172 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1163 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1173 | if (clnt_call(clnt, MOUNTPROC_EXPORTALL, (xdrproc_t) xdr_void, | 1164 | if (clnt_call(clnt, MOUNTPROC_EXPORTALL, (xdrproc_t) xdr_void, |
1174 | (caddr_t) argp, (xdrproc_t) xdr_exports, | 1165 | (caddr_t) argp, (xdrproc_t) xdr_exports, |
1175 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1166 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1176 | return (NULL); | 1167 | return (NULL); |
1177 | } | 1168 | } |
1178 | return (&clnt_res); | 1169 | return (&clnt_res); |
1179 | } | 1170 | } |
1180 | 1171 | ||
1181 | void * | 1172 | void *mountproc_null_2(argp, clnt) |
1182 | mountproc_null_2(argp, clnt) | 1173 | void *argp; |
1183 | void *argp; | 1174 | CLIENT *clnt; |
1184 | CLIENT *clnt; | ||
1185 | { | 1175 | { |
1186 | static char clnt_res; | 1176 | static char clnt_res; |
1187 | 1177 | ||
1188 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1178 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1189 | if (clnt_call(clnt, MOUNTPROC_NULL, (xdrproc_t) xdr_void, argp, (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1179 | if (clnt_call |
1180 | (clnt, MOUNTPROC_NULL, (xdrproc_t) xdr_void, argp, | ||
1181 | (xdrproc_t) xdr_void, &clnt_res, TIMEOUT) != RPC_SUCCESS) { | ||
1190 | return (NULL); | 1182 | return (NULL); |
1191 | } | 1183 | } |
1192 | return ((void *)&clnt_res); | 1184 | return ((void *) &clnt_res); |
1193 | } | 1185 | } |
1194 | 1186 | ||
1195 | fhstatus * | 1187 | fhstatus *mountproc_mnt_2(argp, clnt) |
1196 | mountproc_mnt_2(argp, clnt) | 1188 | dirpath *argp; |
1197 | dirpath *argp; | 1189 | CLIENT *clnt; |
1198 | CLIENT *clnt; | ||
1199 | { | 1190 | { |
1200 | static fhstatus clnt_res; | 1191 | static fhstatus clnt_res; |
1201 | 1192 | ||
1202 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1193 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1203 | if (clnt_call(clnt, MOUNTPROC_MNT, (xdrproc_t) xdr_dirpath, | 1194 | if (clnt_call(clnt, MOUNTPROC_MNT, (xdrproc_t) xdr_dirpath, |
1204 | (caddr_t) argp, (xdrproc_t) xdr_fhstatus, | 1195 | (caddr_t) argp, (xdrproc_t) xdr_fhstatus, |
1205 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1196 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1206 | return (NULL); | 1197 | return (NULL); |
1207 | } | 1198 | } |
1208 | return (&clnt_res); | 1199 | return (&clnt_res); |
1209 | } | 1200 | } |
1210 | 1201 | ||
1211 | mountlist * | 1202 | mountlist *mountproc_dump_2(argp, clnt) |
1212 | mountproc_dump_2(argp, clnt) | 1203 | void *argp; |
1213 | void *argp; | 1204 | CLIENT *clnt; |
1214 | CLIENT *clnt; | ||
1215 | { | 1205 | { |
1216 | static mountlist clnt_res; | 1206 | static mountlist clnt_res; |
1217 | 1207 | ||
1218 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1208 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1219 | if (clnt_call(clnt, MOUNTPROC_DUMP, (xdrproc_t) xdr_void, argp, | 1209 | if (clnt_call(clnt, MOUNTPROC_DUMP, (xdrproc_t) xdr_void, argp, |
1220 | (xdrproc_t) xdr_mountlist, (caddr_t) &clnt_res, | 1210 | (xdrproc_t) xdr_mountlist, (caddr_t) & clnt_res, |
1221 | TIMEOUT) != RPC_SUCCESS) { | 1211 | TIMEOUT) != RPC_SUCCESS) { |
1222 | return (NULL); | 1212 | return (NULL); |
1223 | } | 1213 | } |
1224 | return (&clnt_res); | 1214 | return (&clnt_res); |
1225 | } | 1215 | } |
1226 | 1216 | ||
1227 | void * | 1217 | void *mountproc_umnt_2(argp, clnt) |
1228 | mountproc_umnt_2(argp, clnt) | 1218 | dirpath *argp; |
1229 | dirpath *argp; | 1219 | CLIENT *clnt; |
1230 | CLIENT *clnt; | ||
1231 | { | 1220 | { |
1232 | static char clnt_res; | 1221 | static char clnt_res; |
1233 | 1222 | ||
1234 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1223 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1235 | if (clnt_call(clnt, MOUNTPROC_UMNT, (xdrproc_t) xdr_dirpath, | 1224 | if (clnt_call(clnt, MOUNTPROC_UMNT, (xdrproc_t) xdr_dirpath, |
1236 | (caddr_t) argp, (xdrproc_t) xdr_void, | 1225 | (caddr_t) argp, (xdrproc_t) xdr_void, |
1237 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1226 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1238 | return (NULL); | 1227 | return (NULL); |
1239 | } | 1228 | } |
1240 | return ((void *)&clnt_res); | 1229 | return ((void *) &clnt_res); |
1241 | } | 1230 | } |
1242 | 1231 | ||
1243 | void * | 1232 | void *mountproc_umntall_2(argp, clnt) |
1244 | mountproc_umntall_2(argp, clnt) | 1233 | void *argp; |
1245 | void *argp; | 1234 | CLIENT *clnt; |
1246 | CLIENT *clnt; | ||
1247 | { | 1235 | { |
1248 | static char clnt_res; | 1236 | static char clnt_res; |
1249 | 1237 | ||
1250 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1238 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1251 | if (clnt_call(clnt, MOUNTPROC_UMNTALL, (xdrproc_t) xdr_void, | 1239 | if (clnt_call(clnt, MOUNTPROC_UMNTALL, (xdrproc_t) xdr_void, |
1252 | (caddr_t) argp, (xdrproc_t) xdr_void, | 1240 | (caddr_t) argp, (xdrproc_t) xdr_void, |
1253 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1241 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1254 | return (NULL); | 1242 | return (NULL); |
1255 | } | 1243 | } |
1256 | return ((void *)&clnt_res); | 1244 | return ((void *) &clnt_res); |
1257 | } | 1245 | } |
1258 | 1246 | ||
1259 | exports * | 1247 | exports *mountproc_export_2(argp, clnt) |
1260 | mountproc_export_2(argp, clnt) | 1248 | void *argp; |
1261 | void *argp; | 1249 | CLIENT *clnt; |
1262 | CLIENT *clnt; | ||
1263 | { | 1250 | { |
1264 | static exports clnt_res; | 1251 | static exports clnt_res; |
1265 | 1252 | ||
1266 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1253 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1267 | if (clnt_call(clnt, MOUNTPROC_EXPORT, (xdrproc_t) xdr_void, | 1254 | if (clnt_call(clnt, MOUNTPROC_EXPORT, (xdrproc_t) xdr_void, |
1268 | argp, (xdrproc_t) xdr_exports, (caddr_t) &clnt_res, | 1255 | argp, (xdrproc_t) xdr_exports, (caddr_t) & clnt_res, |
1269 | TIMEOUT) != RPC_SUCCESS) { | 1256 | TIMEOUT) != RPC_SUCCESS) { |
1270 | return (NULL); | 1257 | return (NULL); |
1271 | } | 1258 | } |
1272 | return (&clnt_res); | 1259 | return (&clnt_res); |
1273 | } | 1260 | } |
1274 | 1261 | ||
1275 | exports * | 1262 | exports *mountproc_exportall_2(argp, clnt) |
1276 | mountproc_exportall_2(argp, clnt) | 1263 | void *argp; |
1277 | void *argp; | 1264 | CLIENT *clnt; |
1278 | CLIENT *clnt; | ||
1279 | { | 1265 | { |
1280 | static exports clnt_res; | 1266 | static exports clnt_res; |
1281 | 1267 | ||
1282 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1268 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1283 | if (clnt_call(clnt, MOUNTPROC_EXPORTALL, (xdrproc_t) xdr_void, argp, | 1269 | if (clnt_call(clnt, MOUNTPROC_EXPORTALL, (xdrproc_t) xdr_void, argp, |
1284 | (xdrproc_t) xdr_exports, (caddr_t) &clnt_res, | 1270 | (xdrproc_t) xdr_exports, (caddr_t) & clnt_res, |
1285 | TIMEOUT) != RPC_SUCCESS) { | 1271 | TIMEOUT) != RPC_SUCCESS) { |
1286 | return (NULL); | 1272 | return (NULL); |
1287 | } | 1273 | } |
1288 | return (&clnt_res); | 1274 | return (&clnt_res); |
1289 | } | 1275 | } |
1290 | 1276 | ||
1291 | ppathcnf * | 1277 | ppathcnf *mountproc_pathconf_2(argp, clnt) |
1292 | mountproc_pathconf_2(argp, clnt) | 1278 | dirpath *argp; |
1293 | dirpath *argp; | 1279 | CLIENT *clnt; |
1294 | CLIENT *clnt; | ||
1295 | { | 1280 | { |
1296 | static ppathcnf clnt_res; | 1281 | static ppathcnf clnt_res; |
1297 | 1282 | ||
1298 | memset((char *)&clnt_res, 0, sizeof(clnt_res)); | 1283 | memset((char *) &clnt_res, 0, sizeof(clnt_res)); |
1299 | if (clnt_call(clnt, MOUNTPROC_PATHCONF, (xdrproc_t) xdr_dirpath, | 1284 | if (clnt_call(clnt, MOUNTPROC_PATHCONF, (xdrproc_t) xdr_dirpath, |
1300 | (caddr_t) argp, (xdrproc_t) xdr_ppathcnf, | 1285 | (caddr_t) argp, (xdrproc_t) xdr_ppathcnf, |
1301 | (caddr_t) &clnt_res, TIMEOUT) != RPC_SUCCESS) { | 1286 | (caddr_t) & clnt_res, TIMEOUT) != RPC_SUCCESS) { |
1302 | return (NULL); | 1287 | return (NULL); |
1303 | } | 1288 | } |
1304 | return (&clnt_res); | 1289 | return (&clnt_res); |
1305 | } | 1290 | } |
1306 | |||
1307 | |||
1308 | |||
1309 | |||
diff --git a/util-linux/nfsmount.h b/util-linux/nfsmount.h index 73c71fc68..64ac617c0 100644 --- a/util-linux/nfsmount.h +++ b/util-linux/nfsmount.h | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Please do not edit this file. | 3 | * Please do not edit this file. |
3 | * It was generated using rpcgen. | 4 | * It was generated using rpcgen. |
diff --git a/util-linux/swaponoff.c b/util-linux/swaponoff.c index 3c02bdd42..6bda22277 100644 --- a/util-linux/swaponoff.c +++ b/util-linux/swaponoff.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini swapon/swapoff implementation for busybox | 3 | * Mini swapon/swapoff implementation for busybox |
3 | * | 4 | * |
@@ -32,91 +33,93 @@ | |||
32 | 33 | ||
33 | 34 | ||
34 | static int whichApp; | 35 | static int whichApp; |
35 | static const char* appName; | 36 | static const char *appName; |
36 | 37 | ||
37 | static const char swapoff_usage[] = | 38 | static const char swapoff_usage[] = |
38 | "swapoff device\n" | 39 | |
39 | "\nStop swapping virtual memory pages on the given device.\n"; | 40 | "swapoff device\n" |
40 | static const char swapon_usage[] = | 41 | "\nStop swapping virtual memory pages on the given device.\n"; |
41 | "swapon device\n" | 42 | static const char swapon_usage[] = |
42 | "\nStart swapping virtual memory pages on the given device.\n"; | 43 | |
44 | "swapon device\n" | ||
45 | "\nStart swapping virtual memory pages on the given device.\n"; | ||
43 | 46 | ||
44 | 47 | ||
45 | #define SWAPON_APP 1 | 48 | #define SWAPON_APP 1 |
46 | #define SWAPOFF_APP 2 | 49 | #define SWAPOFF_APP 2 |
47 | 50 | ||
48 | 51 | ||
49 | static void | 52 | static void swap_enable_disable(char *device) |
50 | swap_enable_disable( char *device) | ||
51 | { | 53 | { |
52 | int status; | 54 | int status; |
53 | if ( whichApp == SWAPON_APP ) | 55 | |
54 | status = swapon(device, 0); | 56 | if (whichApp == SWAPON_APP) |
55 | else | 57 | status = swapon(device, 0); |
56 | status = swapoff(device); | 58 | else |
57 | 59 | status = swapoff(device); | |
58 | if ( status != 0 ) { | 60 | |
59 | perror(appName); | 61 | if (status != 0) { |
60 | exit( FALSE); | 62 | perror(appName); |
61 | } | 63 | exit(FALSE); |
64 | } | ||
62 | } | 65 | } |
63 | 66 | ||
64 | static void | 67 | static void do_em_all() |
65 | do_em_all() | ||
66 | { | 68 | { |
67 | struct mntent *m; | 69 | struct mntent *m; |
68 | FILE *f = setmntent ("/etc/fstab", "r"); | 70 | FILE *f = setmntent("/etc/fstab", "r"); |
69 | 71 | ||
70 | if (f == NULL) { | 72 | if (f == NULL) { |
71 | perror("/etc/fstab"); | 73 | perror("/etc/fstab"); |
72 | exit( FALSE); | 74 | exit(FALSE); |
73 | } | 75 | } |
74 | while ((m = getmntent (f)) != NULL) { | 76 | while ((m = getmntent(f)) != NULL) { |
75 | if (!strstr (m->mnt_type, MNTTYPE_SWAP)) { | 77 | if (!strstr(m->mnt_type, MNTTYPE_SWAP)) { |
76 | swap_enable_disable( m->mnt_fsname); | 78 | swap_enable_disable(m->mnt_fsname); |
77 | } | 79 | } |
78 | } | 80 | } |
79 | endmntent (f); | 81 | endmntent(f); |
80 | exit( TRUE); | 82 | exit(TRUE); |
81 | } | 83 | } |
82 | 84 | ||
83 | 85 | ||
84 | extern int | 86 | extern int swap_on_off_main(int argc, char **argv) |
85 | swap_on_off_main(int argc, char * * argv) | ||
86 | { | 87 | { |
87 | struct stat statBuf; | 88 | struct stat statBuf; |
88 | if (stat("/etc/fstab", &statBuf) < 0) | 89 | |
89 | fprintf(stderr, "/etc/fstab file missing -- Please install one.\n\n"); | 90 | if (stat("/etc/fstab", &statBuf) < 0) |
90 | 91 | fprintf(stderr, | |
91 | if (strcmp(*argv, "swapon")==0) { | 92 | "/etc/fstab file missing -- Please install one.\n\n"); |
92 | appName = *argv; | 93 | |
93 | whichApp = SWAPON_APP; | 94 | if (strcmp(*argv, "swapon") == 0) { |
94 | 95 | appName = *argv; | |
95 | } else { | 96 | whichApp = SWAPON_APP; |
96 | appName = *argv; | 97 | |
97 | whichApp = SWAPOFF_APP; | 98 | } else { |
98 | } | 99 | appName = *argv; |
99 | 100 | whichApp = SWAPOFF_APP; | |
100 | if (argc < 2) | 101 | } |
101 | goto usage_and_exit; | 102 | |
102 | argc--; | 103 | if (argc < 2) |
103 | argv++; | ||
104 | |||
105 | /* Parse any options */ | ||
106 | while (**argv == '-') { | ||
107 | while (*++(*argv)) switch (**argv) { | ||
108 | case 'a': | ||
109 | do_em_all(); | ||
110 | break; | ||
111 | default: | ||
112 | goto usage_and_exit; | 104 | goto usage_and_exit; |
105 | argc--; | ||
106 | argv++; | ||
107 | |||
108 | /* Parse any options */ | ||
109 | while (**argv == '-') { | ||
110 | while (*++(*argv)) | ||
111 | switch (**argv) { | ||
112 | case 'a': | ||
113 | do_em_all(); | ||
114 | break; | ||
115 | default: | ||
116 | goto usage_and_exit; | ||
117 | } | ||
113 | } | 118 | } |
114 | } | 119 | swap_enable_disable(*argv); |
115 | swap_enable_disable(*argv); | 120 | exit(TRUE); |
116 | exit( TRUE); | ||
117 | 121 | ||
118 | usage_and_exit: | 122 | usage_and_exit: |
119 | usage( (whichApp==SWAPON_APP)? swapon_usage : swapoff_usage); | 123 | usage((whichApp == SWAPON_APP) ? swapon_usage : swapoff_usage); |
120 | exit( FALSE); | 124 | exit(FALSE); |
121 | } | 125 | } |
122 | |||
diff --git a/util-linux/umount.c b/util-linux/umount.c index b65caf76e..a2ca8c74a 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c | |||
@@ -1,3 +1,4 @@ | |||
1 | /* vi: set sw=4 ts=4: */ | ||
1 | /* | 2 | /* |
2 | * Mini umount implementation for busybox | 3 | * Mini umount implementation for busybox |
3 | * | 4 | * |
@@ -28,24 +29,23 @@ | |||
28 | #include <fstab.h> | 29 | #include <fstab.h> |
29 | #include <errno.h> | 30 | #include <errno.h> |
30 | 31 | ||
31 | static const char umount_usage[] = | 32 | static const char umount_usage[] = |
32 | "umount [flags] filesystem|directory\n\n" | 33 | "umount [flags] filesystem|directory\n\n" |
33 | "Flags:\n" | 34 | "Flags:\n" "\t-a:\tUnmount all file systems" |
34 | "\t-a:\tUnmount all file systems" | ||
35 | #ifdef BB_MTAB | 35 | #ifdef BB_MTAB |
36 | " in /etc/mtab\n\t-n:\tDon't erase /etc/mtab entries\n" | 36 | " in /etc/mtab\n\t-n:\tDon't erase /etc/mtab entries\n" |
37 | #else | 37 | #else |
38 | "\n" | 38 | "\n" |
39 | #endif | 39 | #endif |
40 | #ifdef BB_FEATURE_REMOUNT | 40 | #ifdef BB_FEATURE_REMOUNT |
41 | "\t-r:\tTry to remount devices as read-only if mount is busy\n" | 41 | "\t-r:\tTry to remount devices as read-only if mount is busy\n" |
42 | #endif | 42 | #endif |
43 | ; | 43 | ; |
44 | 44 | ||
45 | struct _mtab_entry_t { | 45 | struct _mtab_entry_t { |
46 | char *device; | 46 | char *device; |
47 | char *mountpt; | 47 | char *mountpt; |
48 | struct _mtab_entry_t *next; | 48 | struct _mtab_entry_t *next; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | static struct _mtab_entry_t *mtab_cache = NULL; | 51 | static struct _mtab_entry_t *mtab_cache = NULL; |
@@ -55,113 +55,112 @@ static struct _mtab_entry_t *mtab_cache = NULL; | |||
55 | static int useMtab = TRUE; | 55 | static int useMtab = TRUE; |
56 | static int umountAll = FALSE; | 56 | static int umountAll = FALSE; |
57 | static int doRemount = FALSE; | 57 | static int doRemount = FALSE; |
58 | extern const char mtab_file[]; /* Defined in utility.c */ | 58 | extern const char mtab_file[]; /* Defined in utility.c */ |
59 | 59 | ||
60 | #define MIN(x,y) (x > y ? x : y) | 60 | #define MIN(x,y) (x > y ? x : y) |
61 | 61 | ||
62 | static int | 62 | static int do_umount(const char *name, int useMtab) |
63 | do_umount(const char* name, int useMtab) | ||
64 | { | 63 | { |
65 | int status; | 64 | int status; |
66 | char *blockDevice = mtab_getinfo(name, MTAB_GETDEVICE); | 65 | char *blockDevice = mtab_getinfo(name, MTAB_GETDEVICE); |
67 | 66 | ||
68 | if (blockDevice && strcmp(blockDevice, name) == 0) | 67 | if (blockDevice && strcmp(blockDevice, name) == 0) |
69 | name = mtab_getinfo(blockDevice, MTAB_GETMOUNTPT); | 68 | name = mtab_getinfo(blockDevice, MTAB_GETMOUNTPT); |
70 | 69 | ||
71 | status = umount(name); | 70 | status = umount(name); |
72 | 71 | ||
73 | #if defined BB_FEATURE_MOUNT_LOOP | 72 | #if defined BB_FEATURE_MOUNT_LOOP |
74 | if (blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9)) | 73 | if (blockDevice != NULL && !strncmp("/dev/loop", blockDevice, 9)) |
75 | /* this was a loop device, delete it */ | 74 | /* this was a loop device, delete it */ |
76 | del_loop(blockDevice); | 75 | del_loop(blockDevice); |
77 | #endif | 76 | #endif |
78 | #if defined BB_FEATURE_REMOUNT | 77 | #if defined BB_FEATURE_REMOUNT |
79 | if ( status != 0 && doRemount == TRUE && errno == EBUSY ) { | 78 | if (status != 0 && doRemount == TRUE && errno == EBUSY) { |
80 | status = mount(blockDevice, name, NULL, | 79 | status = mount(blockDevice, name, NULL, |
81 | MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL); | 80 | MS_MGC_VAL | MS_REMOUNT | MS_RDONLY, NULL); |
82 | if (status == 0) { | 81 | if (status == 0) { |
83 | fprintf(stderr, "umount: %s busy - remounted read-only\n", | 82 | fprintf(stderr, "umount: %s busy - remounted read-only\n", |
84 | blockDevice); | 83 | blockDevice); |
85 | /* TODO: update mtab if BB_MTAB is defined */ | 84 | /* TODO: update mtab if BB_MTAB is defined */ |
86 | } else { | 85 | } else { |
87 | fprintf(stderr, "umount: Cannot remount %s read-only\n", | 86 | fprintf(stderr, "umount: Cannot remount %s read-only\n", |
88 | blockDevice); | 87 | blockDevice); |
88 | } | ||
89 | } | 89 | } |
90 | } | ||
91 | #endif | 90 | #endif |
92 | if ( status == 0 ) { | 91 | if (status == 0) { |
93 | #if defined BB_MTAB | 92 | #if defined BB_MTAB |
94 | if ( useMtab==TRUE ) | 93 | if (useMtab == TRUE) |
95 | erase_mtab(name); | 94 | erase_mtab(name); |
96 | #endif | 95 | #endif |
97 | return( TRUE); | 96 | return (TRUE); |
98 | } | 97 | } |
99 | return(FALSE); | 98 | return (FALSE); |
100 | } | 99 | } |
101 | 100 | ||
102 | static int | 101 | static int umount_all(int useMtab) |
103 | umount_all(int useMtab) | ||
104 | { | 102 | { |
105 | int status = TRUE; | 103 | int status = TRUE; |
106 | char *mountpt; | 104 | char *mountpt; |
107 | void *iter; | 105 | void *iter; |
108 | 106 | ||
109 | for (mountpt = mtab_first(&iter); mountpt; mountpt = mtab_next(&iter)) { | 107 | for (mountpt = mtab_first(&iter); mountpt; mountpt = mtab_next(&iter)) { |
110 | status=do_umount (mountpt, useMtab); | 108 | status = do_umount(mountpt, useMtab); |
111 | if (status != 0) { | ||
112 | /* Don't bother retrying the umount on busy devices */ | ||
113 | if (errno == EBUSY) { | ||
114 | perror(mountpt); | ||
115 | continue; | ||
116 | } | ||
117 | status = do_umount (mountpt, useMtab); | ||
118 | if (status != 0) { | 109 | if (status != 0) { |
119 | printf ("Couldn't umount %s on %s: %s\n", | 110 | /* Don't bother retrying the umount on busy devices */ |
120 | mountpt, mtab_getinfo(mountpt, MTAB_GETDEVICE), strerror(errno)); | 111 | if (errno == EBUSY) { |
112 | perror(mountpt); | ||
113 | continue; | ||
114 | } | ||
115 | status = do_umount(mountpt, useMtab); | ||
116 | if (status != 0) { | ||
117 | printf("Couldn't umount %s on %s: %s\n", | ||
118 | mountpt, mtab_getinfo(mountpt, MTAB_GETDEVICE), | ||
119 | strerror(errno)); | ||
120 | } | ||
121 | } | 121 | } |
122 | } | 122 | } |
123 | } | 123 | return (status); |
124 | return (status); | ||
125 | } | 124 | } |
126 | 125 | ||
127 | extern int | 126 | extern int umount_main(int argc, char **argv) |
128 | umount_main(int argc, char** argv) | ||
129 | { | 127 | { |
130 | if (argc < 2) { | 128 | if (argc < 2) { |
131 | usage( umount_usage); | 129 | usage(umount_usage); |
132 | } | 130 | } |
133 | 131 | ||
134 | /* Parse any options */ | 132 | /* Parse any options */ |
135 | while (--argc > 0 && **(++argv) == '-') { | 133 | while (--argc > 0 && **(++argv) == '-') { |
136 | while (*++(*argv)) switch (**argv) { | 134 | while (*++(*argv)) |
137 | case 'a': | 135 | switch (**argv) { |
138 | umountAll = TRUE; | 136 | case 'a': |
139 | break; | 137 | umountAll = TRUE; |
138 | break; | ||
140 | #ifdef BB_MTAB | 139 | #ifdef BB_MTAB |
141 | case 'n': | 140 | case 'n': |
142 | useMtab = FALSE; | 141 | useMtab = FALSE; |
143 | break; | 142 | break; |
144 | #endif | 143 | #endif |
145 | #ifdef BB_FEATURE_REMOUNT | 144 | #ifdef BB_FEATURE_REMOUNT |
146 | case 'r': | 145 | case 'r': |
147 | doRemount = TRUE; | 146 | doRemount = TRUE; |
148 | break; | 147 | break; |
149 | #endif | 148 | #endif |
150 | default: | 149 | default: |
151 | usage( umount_usage); | 150 | usage(umount_usage); |
151 | } | ||
152 | } | ||
153 | |||
154 | mtab_read(); | ||
155 | if (umountAll == TRUE) { | ||
156 | exit(umount_all(useMtab)); | ||
157 | } | ||
158 | if (do_umount(*argv, useMtab) == 0) | ||
159 | exit(TRUE); | ||
160 | else { | ||
161 | perror("umount"); | ||
162 | exit(FALSE); | ||
152 | } | 163 | } |
153 | } | ||
154 | |||
155 | mtab_read(); | ||
156 | if (umountAll==TRUE) { | ||
157 | exit(umount_all(useMtab)); | ||
158 | } | ||
159 | if ( do_umount(*argv,useMtab) == 0 ) | ||
160 | exit (TRUE); | ||
161 | else { | ||
162 | perror("umount"); | ||
163 | exit(FALSE); | ||
164 | } | ||
165 | } | 164 | } |
166 | 165 | ||
167 | 166 | ||
@@ -172,79 +171,89 @@ umount_main(int argc, char** argv) | |||
172 | */ | 171 | */ |
173 | void mtab_read(void) | 172 | void mtab_read(void) |
174 | { | 173 | { |
175 | struct _mtab_entry_t *entry = NULL; | 174 | struct _mtab_entry_t *entry = NULL; |
176 | struct mntent *e; | 175 | struct mntent *e; |
177 | FILE *fp; | 176 | FILE *fp; |
178 | 177 | ||
179 | if (mtab_cache != NULL) return; | 178 | if (mtab_cache != NULL) |
180 | 179 | return; | |
181 | if ((fp = setmntent(mtab_file, "r")) == NULL) { | 180 | |
182 | fprintf(stderr, "Cannot open %s\n", mtab_file); | 181 | if ((fp = setmntent(mtab_file, "r")) == NULL) { |
183 | return; | 182 | fprintf(stderr, "Cannot open %s\n", mtab_file); |
184 | } | 183 | return; |
185 | while ((e = getmntent(fp))) { | 184 | } |
186 | entry = malloc(sizeof(struct _mtab_entry_t)); | 185 | while ((e = getmntent(fp))) { |
187 | entry->device = strdup(e->mnt_fsname); | 186 | entry = malloc(sizeof(struct _mtab_entry_t)); |
188 | entry->mountpt = strdup(e->mnt_dir); | 187 | |
189 | entry->next = mtab_cache; | 188 | entry->device = strdup(e->mnt_fsname); |
190 | mtab_cache = entry; | 189 | entry->mountpt = strdup(e->mnt_dir); |
191 | } | 190 | entry->next = mtab_cache; |
192 | endmntent(fp); | 191 | mtab_cache = entry; |
192 | } | ||
193 | endmntent(fp); | ||
193 | } | 194 | } |
194 | 195 | ||
195 | char *mtab_getinfo(const char *match, const char which) | 196 | char *mtab_getinfo(const char *match, const char which) |
196 | { | 197 | { |
197 | struct _mtab_entry_t *cur = mtab_cache; | 198 | struct _mtab_entry_t *cur = mtab_cache; |
198 | while (cur) { | 199 | |
199 | if (strcmp(cur->mountpt, match) == 0 || | 200 | while (cur) { |
200 | strcmp(cur->device, match) == 0) { | 201 | if (strcmp(cur->mountpt, match) == 0 || |
201 | if (which == MTAB_GETMOUNTPT) { | 202 | strcmp(cur->device, match) == 0) { |
202 | return cur->mountpt; | 203 | if (which == MTAB_GETMOUNTPT) { |
203 | } else { | 204 | return cur->mountpt; |
205 | } else { | ||
204 | #if !defined BB_MTAB | 206 | #if !defined BB_MTAB |
205 | if (strcmp(cur->device, "/dev/root") == 0) { | 207 | if (strcmp(cur->device, "/dev/root") == 0) { |
206 | struct fstab* fstabItem; | 208 | struct fstab *fstabItem; |
207 | fstabItem = getfsfile ("/"); | 209 | |
208 | if (fstabItem != NULL) return fstabItem->fs_spec; | 210 | fstabItem = getfsfile("/"); |
209 | } | 211 | if (fstabItem != NULL) |
212 | return fstabItem->fs_spec; | ||
213 | } | ||
210 | #endif | 214 | #endif |
211 | return cur->device; | 215 | return cur->device; |
212 | } | 216 | } |
217 | } | ||
218 | cur = cur->next; | ||
213 | } | 219 | } |
214 | cur = cur->next; | 220 | return NULL; |
215 | } | ||
216 | return NULL; | ||
217 | } | 221 | } |
218 | 222 | ||
219 | char *mtab_first(void **iter) | 223 | char *mtab_first(void **iter) |
220 | { | 224 | { |
221 | struct _mtab_entry_t *mtab_iter; | 225 | struct _mtab_entry_t *mtab_iter; |
222 | if (!iter) return NULL; | 226 | |
223 | mtab_iter = mtab_cache; | 227 | if (!iter) |
224 | *iter = (void *)mtab_iter; | 228 | return NULL; |
225 | return mtab_next(iter); | 229 | mtab_iter = mtab_cache; |
230 | *iter = (void *) mtab_iter; | ||
231 | return mtab_next(iter); | ||
226 | } | 232 | } |
227 | 233 | ||
228 | char *mtab_next(void **iter) | 234 | char *mtab_next(void **iter) |
229 | { | 235 | { |
230 | char *mp; | 236 | char *mp; |
231 | if (iter == NULL || *iter == NULL) return NULL; | 237 | |
232 | mp = ((struct _mtab_entry_t *)(*iter))->mountpt; | 238 | if (iter == NULL || *iter == NULL) |
233 | *iter = (void *)((struct _mtab_entry_t *)(*iter))->next; | 239 | return NULL; |
234 | return mp; | 240 | mp = ((struct _mtab_entry_t *) (*iter))->mountpt; |
241 | *iter = (void *) ((struct _mtab_entry_t *) (*iter))->next; | ||
242 | return mp; | ||
235 | } | 243 | } |
236 | 244 | ||
237 | void mtab_free(void) | 245 | void mtab_free(void) |
238 | { | 246 | { |
239 | struct _mtab_entry_t *this, *next; | 247 | struct _mtab_entry_t *this, *next; |
240 | |||
241 | this = mtab_cache; | ||
242 | while (this) { | ||
243 | next = this->next; | ||
244 | if (this->device) free(this->device); | ||
245 | if (this->mountpt) free(this->mountpt); | ||
246 | free(this); | ||
247 | this = next; | ||
248 | } | ||
249 | } | ||
250 | 248 | ||
249 | this = mtab_cache; | ||
250 | while (this) { | ||
251 | next = this->next; | ||
252 | if (this->device) | ||
253 | free(this->device); | ||
254 | if (this->mountpt) | ||
255 | free(this->mountpt); | ||
256 | free(this); | ||
257 | this = next; | ||
258 | } | ||
259 | } | ||