diff options
author | Eric Andersen <andersen@codepoet.org> | 2000-06-26 10:45:52 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2000-06-26 10:45:52 +0000 |
commit | 10dc9d4d17e6880bfdfd253716ce72ec1243227f (patch) | |
tree | f3c2aa6ab3dadf1b4bf710c7957e72faddebd75f | |
parent | 8a24a6783af7a0d54b1f2ebcda5b07757bd19c99 (diff) | |
download | busybox-w32-10dc9d4d17e6880bfdfd253716ce72ec1243227f.tar.gz busybox-w32-10dc9d4d17e6880bfdfd253716ce72ec1243227f.tar.bz2 busybox-w32-10dc9d4d17e6880bfdfd253716ce72ec1243227f.zip |
Updates to handle Linux 2.4.0 kernels (kludged around the "none" entries in
/proc/mounts, added a hack to make sysinfo work with both old and new kernels).
-Erik
-rw-r--r-- | Changelog | 10 | ||||
-rw-r--r-- | TODO | 23 | ||||
-rw-r--r-- | coreutils/df.c | 3 | ||||
-rw-r--r-- | df.c | 3 | ||||
-rw-r--r-- | free.c | 36 | ||||
-rw-r--r-- | init.c | 20 | ||||
-rw-r--r-- | init/init.c | 20 | ||||
-rw-r--r-- | internal.h | 21 | ||||
-rw-r--r-- | mount.c | 8 | ||||
-rw-r--r-- | procps/free.c | 36 | ||||
-rw-r--r-- | procps/uptime.c | 3 | ||||
-rw-r--r-- | uptime.c | 3 | ||||
-rw-r--r-- | util-linux/mount.c | 8 | ||||
-rw-r--r-- | utility.c | 12 |
14 files changed, 159 insertions, 47 deletions
@@ -1,3 +1,13 @@ | |||
1 | 0.46 | ||
2 | |||
3 | * Updates to handle Linux 2.4.0 kernels (kludged around the | ||
4 | "none" entries in /proc/mounts, added a hack to make sysinfo | ||
5 | work with both old and new kernels). | ||
6 | * Fixed a nasty bug in tar when could mess up saved symlinks. | ||
7 | |||
8 | -Erik Andersen | ||
9 | |||
10 | |||
1 | 0.45 | 11 | 0.45 |
2 | * Now compiles vs libc5 (which can save lots of space for | 12 | * Now compiles vs libc5 (which can save lots of space for |
3 | embedded systems). | 13 | embedded systems). |
@@ -39,31 +39,14 @@ list discussion): | |||
39 | 39 | ||
40 | Linux 2.4.x kernels | 40 | Linux 2.4.x kernels |
41 | 41 | ||
42 | BusyBox 0.45 currently will not work with the Linux 2.4.x kernels. | 42 | BusyBox 0.46 currently will not work with the Linux 2.4.x kernels. |
43 | I know of the following problems: | 43 | I know of the following problems: |
44 | 44 | ||
45 | 1) The sysinfo syscall has changed what it does (binary incompatable), breaking | 45 | 1) BusyBox NFS support is broken with 2.4.x (needs to be adjusted for NFSv3 and |
46 | init and free. | ||
47 | 2) BusyBox NFS support is broken with 2.4.x (needs to be adjusted for NFSv3 and | ||
48 | kernel header changes). | 46 | kernel header changes). |
49 | 3) mount,umount,and df are all broken by the "none" entries for fake filesystems | ||
50 | such as the shared mem one. Al Viro claims these will be disappearing soon... | ||
51 | |||
52 | I made a kernel patch that reverts the sysinfo changes | ||
53 | http://kernelnotes.org/lnxlists/linux-kernel/lk_0006_01/msg00619.html | ||
54 | |||
55 | and I have been fighting with Alan Cox to get these changes fixed in a binary | ||
56 | compatable way, but Alan has so far not been very receptive. I am planning on | ||
57 | appealing to Linus (when he gets back from vacation) and then going with | ||
58 | whatever he decides... | ||
59 | |||
60 | So my thought is, 2.4.x just isn't ready for BusyBox to target it, and even if | ||
61 | it was, BusyBox isn't ready yet either. Seems to me like this will not be | ||
62 | ready for a while, and we should just not worry about it yet. | ||
63 | 47 | ||
64 | As long as I have BB_FEATURE_NFSMOUNT turned off, everything compiles cleanly | 48 | As long as I have BB_FEATURE_NFSMOUNT turned off, everything compiles cleanly |
65 | for me with linux2.4.0test1-ac22-riel (i.e. I don't see the freeramdisk.c | 49 | for me with linux2.4.0test2. I use Debian potato (gcc 2.95.2, GNU libc 2.1.3). |
66 | problem you reported). I use Debian potato (gcc 2.95.2, GNU libc 2.1.3). | ||
67 | Of course, as noted above, compiling != working. | 50 | Of course, as noted above, compiling != working. |
68 | 51 | ||
69 | ----------- | 52 | ----------- |
diff --git a/coreutils/df.c b/coreutils/df.c index ba3227f30..8d457ec37 100644 --- a/coreutils/df.c +++ b/coreutils/df.c | |||
@@ -103,6 +103,9 @@ extern int df_main(int argc, char **argv) | |||
103 | } | 103 | } |
104 | 104 | ||
105 | while ((mountEntry = getmntent(mountTable))) { | 105 | while ((mountEntry = getmntent(mountTable))) { |
106 | if (strcmp(mountEntry->mnt_fsname, "none") == 0) { | ||
107 | continue; | ||
108 | } | ||
106 | df(mountEntry->mnt_fsname, mountEntry->mnt_dir); | 109 | df(mountEntry->mnt_fsname, mountEntry->mnt_dir); |
107 | } | 110 | } |
108 | endmntent(mountTable); | 111 | endmntent(mountTable); |
@@ -103,6 +103,9 @@ extern int df_main(int argc, char **argv) | |||
103 | } | 103 | } |
104 | 104 | ||
105 | while ((mountEntry = getmntent(mountTable))) { | 105 | while ((mountEntry = getmntent(mountTable))) { |
106 | if (strcmp(mountEntry->mnt_fsname, "none") == 0) { | ||
107 | continue; | ||
108 | } | ||
106 | df(mountEntry->mnt_fsname, mountEntry->mnt_dir); | 109 | df(mountEntry->mnt_fsname, mountEntry->mnt_dir); |
107 | } | 110 | } |
108 | endmntent(mountTable); | 111 | endmntent(mountTable); |
@@ -23,20 +23,36 @@ | |||
23 | 23 | ||
24 | #include "internal.h" | 24 | #include "internal.h" |
25 | #include <stdio.h> | 25 | #include <stdio.h> |
26 | #include <sys/sysinfo.h> | 26 | #include <errno.h> |
27 | |||
27 | 28 | ||
28 | #define DIVISOR 1024 | ||
29 | extern int free_main(int argc, char **argv) | 29 | extern int free_main(int argc, char **argv) |
30 | { | 30 | { |
31 | struct sysinfo info; | 31 | struct sysinfo info; |
32 | sysinfo(&info); | 32 | sysinfo(&info); |
33 | info.totalram/=DIVISOR; | 33 | /* Kernels prior to 2.4.x will return info.mem_unit==0. Kernels after |
34 | info.freeram/=DIVISOR; | 34 | * 2.4.x actually fill this value in */ |
35 | info.totalswap/=DIVISOR; | 35 | if (info.mem_unit==0) { |
36 | info.freeswap/=DIVISOR; | 36 | /* Looks like we have a kernel prior to Linux 2.4.x */ |
37 | info.sharedram/=DIVISOR; | 37 | info.mem_unit=1024; |
38 | info.bufferram/=DIVISOR; | 38 | info.totalram/=info.mem_unit; |
39 | 39 | info.freeram/=info.mem_unit; | |
40 | info.totalswap/=info.mem_unit; | ||
41 | info.freeswap/=info.mem_unit; | ||
42 | info.sharedram/=info.mem_unit; | ||
43 | info.bufferram/=info.mem_unit; | ||
44 | } else { | ||
45 | /* Bah. Linux 2.4.x completely changed sysinfo. This can in theory | ||
46 | overflow a 32 bit unsigned long, but who puts more then 4GiB ram+swap | ||
47 | on an embedded system? */ | ||
48 | info.mem_unit/=1024; | ||
49 | info.totalram*=info.mem_unit; | ||
50 | info.freeram*=info.mem_unit; | ||
51 | info.totalswap*=info.mem_unit; | ||
52 | info.freeswap*=info.mem_unit; | ||
53 | info.sharedram*=info.mem_unit; | ||
54 | info.bufferram*=info.mem_unit; | ||
55 | } | ||
40 | if (argc > 1 && **(argv + 1) == '-') { | 56 | if (argc > 1 && **(argv + 1) == '-') { |
41 | usage("free\n" | 57 | usage("free\n" |
42 | #ifndef BB_FEATURE_TRIVIAL_HELP | 58 | #ifndef BB_FEATURE_TRIVIAL_HELP |
@@ -61,3 +77,5 @@ extern int free_main(int argc, char **argv) | |||
61 | info.freeram+info.freeswap); | 77 | info.freeram+info.freeswap); |
62 | return(TRUE); | 78 | return(TRUE); |
63 | } | 79 | } |
80 | |||
81 | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/version.h> | 42 | #include <linux/version.h> |
43 | #include <linux/reboot.h> | 43 | #include <linux/reboot.h> |
44 | #include <linux/unistd.h> | 44 | #include <linux/unistd.h> |
45 | #include <sys/sysinfo.h> /* For check_free_memory() */ | ||
46 | #include <sys/fcntl.h> | 45 | #include <sys/fcntl.h> |
47 | #include <sys/ioctl.h> | 46 | #include <sys/ioctl.h> |
48 | #include <sys/mount.h> | 47 | #include <sys/mount.h> |
@@ -270,13 +269,28 @@ static int check_free_memory() | |||
270 | { | 269 | { |
271 | struct sysinfo info; | 270 | struct sysinfo info; |
272 | 271 | ||
272 | /* Pre initialize mem_unit in case this kernel is something prior to | ||
273 | * the linux 2.4 kernel (which will actually fill in mem_unit... */ | ||
273 | sysinfo(&info); | 274 | sysinfo(&info); |
274 | if (sysinfo(&info) != 0) { | 275 | if (sysinfo(&info) != 0) { |
275 | message(LOG, "Error checking free memory: %s\n", strerror(errno)); | 276 | printf("Error checking free memory: %s\n", strerror(errno)); |
276 | return -1; | 277 | return -1; |
277 | } | 278 | } |
279 | if (info.mem_unit==0) { | ||
280 | /* Looks like we have a kernel prior to Linux 2.4.x */ | ||
281 | info.mem_unit=1024; | ||
282 | info.totalram/=info.mem_unit; | ||
283 | info.totalswap/=info.mem_unit; | ||
284 | } else { | ||
285 | /* Bah. Linux 2.4.x completely changed sysinfo. This can in theory | ||
286 | overflow a 32 bit unsigned long, but who puts more then 4GiB ram+swap | ||
287 | on an embedded system? */ | ||
288 | info.mem_unit/=1024; | ||
289 | info.totalram*=info.mem_unit; | ||
290 | info.totalswap*=info.mem_unit; | ||
291 | } | ||
278 | 292 | ||
279 | return((info.totalram+info.totalswap)/1024); | 293 | return(info.totalram+info.totalswap); |
280 | } | 294 | } |
281 | 295 | ||
282 | static void console_init() | 296 | static void console_init() |
diff --git a/init/init.c b/init/init.c index 98a58f275..9289b86a6 100644 --- a/init/init.c +++ b/init/init.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/version.h> | 42 | #include <linux/version.h> |
43 | #include <linux/reboot.h> | 43 | #include <linux/reboot.h> |
44 | #include <linux/unistd.h> | 44 | #include <linux/unistd.h> |
45 | #include <sys/sysinfo.h> /* For check_free_memory() */ | ||
46 | #include <sys/fcntl.h> | 45 | #include <sys/fcntl.h> |
47 | #include <sys/ioctl.h> | 46 | #include <sys/ioctl.h> |
48 | #include <sys/mount.h> | 47 | #include <sys/mount.h> |
@@ -270,13 +269,28 @@ static int check_free_memory() | |||
270 | { | 269 | { |
271 | struct sysinfo info; | 270 | struct sysinfo info; |
272 | 271 | ||
272 | /* Pre initialize mem_unit in case this kernel is something prior to | ||
273 | * the linux 2.4 kernel (which will actually fill in mem_unit... */ | ||
273 | sysinfo(&info); | 274 | sysinfo(&info); |
274 | if (sysinfo(&info) != 0) { | 275 | if (sysinfo(&info) != 0) { |
275 | message(LOG, "Error checking free memory: %s\n", strerror(errno)); | 276 | printf("Error checking free memory: %s\n", strerror(errno)); |
276 | return -1; | 277 | return -1; |
277 | } | 278 | } |
279 | if (info.mem_unit==0) { | ||
280 | /* Looks like we have a kernel prior to Linux 2.4.x */ | ||
281 | info.mem_unit=1024; | ||
282 | info.totalram/=info.mem_unit; | ||
283 | info.totalswap/=info.mem_unit; | ||
284 | } else { | ||
285 | /* Bah. Linux 2.4.x completely changed sysinfo. This can in theory | ||
286 | overflow a 32 bit unsigned long, but who puts more then 4GiB ram+swap | ||
287 | on an embedded system? */ | ||
288 | info.mem_unit/=1024; | ||
289 | info.totalram*=info.mem_unit; | ||
290 | info.totalswap*=info.mem_unit; | ||
291 | } | ||
278 | 292 | ||
279 | return((info.totalram+info.totalswap)/1024); | 293 | return(info.totalram+info.totalswap); |
280 | } | 294 | } |
281 | 295 | ||
282 | static void console_init() | 296 | static void console_init() |
diff --git a/internal.h b/internal.h index 127460fc6..c39dfde62 100644 --- a/internal.h +++ b/internal.h | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <stdarg.h> | 30 | #include <stdarg.h> |
31 | #include <string.h> | 31 | #include <string.h> |
32 | #include <unistd.h> | 32 | #include <unistd.h> |
33 | #include <errno.h> | ||
33 | #include <sys/stat.h> | 34 | #include <sys/stat.h> |
34 | #include <sys/param.h> | 35 | #include <sys/param.h> |
35 | #include <mntent.h> | 36 | #include <mntent.h> |
@@ -296,9 +297,27 @@ int nfsmount(const char *spec, const char *node, unsigned long *flags, | |||
296 | #define RB_POWER_OFF 0x4321fedc | 297 | #define RB_POWER_OFF 0x4321fedc |
297 | #endif | 298 | #endif |
298 | 299 | ||
300 | /* Include our own copy of struct sysinfo to avoid binary compatability | ||
301 | * problems with Linux 2.4, which changed things. Grumble, grumble. */ | ||
302 | struct sysinfo { | ||
303 | long uptime; /* Seconds since boot */ | ||
304 | unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ | ||
305 | unsigned long totalram; /* Total usable main memory size */ | ||
306 | unsigned long freeram; /* Available memory size */ | ||
307 | unsigned long sharedram; /* Amount of shared memory */ | ||
308 | unsigned long bufferram; /* Memory used by buffers */ | ||
309 | unsigned long totalswap; /* Total swap space size */ | ||
310 | unsigned long freeswap; /* swap space still available */ | ||
311 | unsigned short procs; /* Number of current processes */ | ||
312 | unsigned long totalhigh; /* Total high memory size */ | ||
313 | unsigned long freehigh; /* Available high memory size */ | ||
314 | unsigned int mem_unit; /* Memory unit size in bytes */ | ||
315 | char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */ | ||
316 | }; | ||
317 | extern int sysinfo (struct sysinfo* info); | ||
299 | 318 | ||
300 | #ifndef setbit | ||
301 | /* Bit map related macros -- libc5 doens't provide these... sigh. */ | 319 | /* Bit map related macros -- libc5 doens't provide these... sigh. */ |
320 | #ifndef setbit | ||
302 | #define NBBY CHAR_BIT | 321 | #define NBBY CHAR_BIT |
303 | #define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) | 322 | #define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY)) |
304 | #define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) | 323 | #define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY))) |
@@ -358,6 +358,10 @@ extern int mount_main(int argc, char **argv) | |||
358 | fatalError( "\nDEVMTAB_GET_MOUNTS: %s\n", strerror (errno)); | 358 | fatalError( "\nDEVMTAB_GET_MOUNTS: %s\n", strerror (errno)); |
359 | 359 | ||
360 | for( i = 0 ; i < numfilesystems ; i++) { | 360 | for( i = 0 ; i < numfilesystems ; i++) { |
361 | /* klude around Linux 2.4.x stupidity */ | ||
362 | if (strcmp(mntentlist[i].mnt_fsname, "none") == 0) { | ||
363 | continue; | ||
364 | } | ||
361 | fprintf( stdout, "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, | 365 | fprintf( stdout, "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, |
362 | mntentlist[i].mnt_dir, mntentlist[i].mnt_type, | 366 | mntentlist[i].mnt_dir, mntentlist[i].mnt_type, |
363 | mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, | 367 | mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, |
@@ -380,6 +384,10 @@ extern int mount_main(int argc, char **argv) | |||
380 | 384 | ||
381 | while ((m = getmntent(mountTable)) != 0) { | 385 | while ((m = getmntent(mountTable)) != 0) { |
382 | char *blockDevice = m->mnt_fsname; | 386 | char *blockDevice = m->mnt_fsname; |
387 | /* klude around Linux 2.4.x stupidity */ | ||
388 | if (strcmp(blockDevice, "none") == 0) { | ||
389 | continue; | ||
390 | } | ||
383 | if (strcmp(blockDevice, "/dev/root") == 0) { | 391 | if (strcmp(blockDevice, "/dev/root") == 0) { |
384 | find_real_root_device_name( blockDevice); | 392 | find_real_root_device_name( blockDevice); |
385 | } | 393 | } |
diff --git a/procps/free.c b/procps/free.c index a81189be9..997430b39 100644 --- a/procps/free.c +++ b/procps/free.c | |||
@@ -23,20 +23,36 @@ | |||
23 | 23 | ||
24 | #include "internal.h" | 24 | #include "internal.h" |
25 | #include <stdio.h> | 25 | #include <stdio.h> |
26 | #include <sys/sysinfo.h> | 26 | #include <errno.h> |
27 | |||
27 | 28 | ||
28 | #define DIVISOR 1024 | ||
29 | extern int free_main(int argc, char **argv) | 29 | extern int free_main(int argc, char **argv) |
30 | { | 30 | { |
31 | struct sysinfo info; | 31 | struct sysinfo info; |
32 | sysinfo(&info); | 32 | sysinfo(&info); |
33 | info.totalram/=DIVISOR; | 33 | /* Kernels prior to 2.4.x will return info.mem_unit==0. Kernels after |
34 | info.freeram/=DIVISOR; | 34 | * 2.4.x actually fill this value in */ |
35 | info.totalswap/=DIVISOR; | 35 | if (info.mem_unit==0) { |
36 | info.freeswap/=DIVISOR; | 36 | /* Looks like we have a kernel prior to Linux 2.4.x */ |
37 | info.sharedram/=DIVISOR; | 37 | info.mem_unit=1024; |
38 | info.bufferram/=DIVISOR; | 38 | info.totalram/=info.mem_unit; |
39 | 39 | info.freeram/=info.mem_unit; | |
40 | info.totalswap/=info.mem_unit; | ||
41 | info.freeswap/=info.mem_unit; | ||
42 | info.sharedram/=info.mem_unit; | ||
43 | info.bufferram/=info.mem_unit; | ||
44 | } else { | ||
45 | /* Bah. Linux 2.4.x completely changed sysinfo. This can in theory | ||
46 | overflow a 32 bit unsigned long, but who puts more then 4GiB ram+swap | ||
47 | on an embedded system? */ | ||
48 | info.mem_unit/=1024; | ||
49 | info.totalram*=info.mem_unit; | ||
50 | info.freeram*=info.mem_unit; | ||
51 | info.totalswap*=info.mem_unit; | ||
52 | info.freeswap*=info.mem_unit; | ||
53 | info.sharedram*=info.mem_unit; | ||
54 | info.bufferram*=info.mem_unit; | ||
55 | } | ||
40 | if (argc > 1 && **(argv + 1) == '-') { | 56 | if (argc > 1 && **(argv + 1) == '-') { |
41 | usage("free\n" | 57 | usage("free\n" |
42 | #ifndef BB_FEATURE_TRIVIAL_HELP | 58 | #ifndef BB_FEATURE_TRIVIAL_HELP |
@@ -61,3 +77,5 @@ extern int free_main(int argc, char **argv) | |||
61 | info.freeram+info.freeswap); | 77 | info.freeram+info.freeswap); |
62 | return(TRUE); | 78 | return(TRUE); |
63 | } | 79 | } |
80 | |||
81 | |||
diff --git a/procps/uptime.c b/procps/uptime.c index 67ca34d75..efdbccf00 100644 --- a/procps/uptime.c +++ b/procps/uptime.c | |||
@@ -31,13 +31,14 @@ | |||
31 | #include "internal.h" | 31 | #include "internal.h" |
32 | #include <stdio.h> | 32 | #include <stdio.h> |
33 | #include <time.h> | 33 | #include <time.h> |
34 | #include <sys/sysinfo.h> | 34 | #include <errno.h> |
35 | 35 | ||
36 | #define FSHIFT 16 /* nr of bits of precision */ | 36 | #define FSHIFT 16 /* nr of bits of precision */ |
37 | #define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ | 37 | #define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ |
38 | #define LOAD_INT(x) ((x) >> FSHIFT) | 38 | #define LOAD_INT(x) ((x) >> FSHIFT) |
39 | #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) | 39 | #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) |
40 | 40 | ||
41 | |||
41 | extern int uptime_main(int argc, char **argv) | 42 | extern int uptime_main(int argc, char **argv) |
42 | { | 43 | { |
43 | int updays, uphours, upminutes; | 44 | int updays, uphours, upminutes; |
@@ -31,13 +31,14 @@ | |||
31 | #include "internal.h" | 31 | #include "internal.h" |
32 | #include <stdio.h> | 32 | #include <stdio.h> |
33 | #include <time.h> | 33 | #include <time.h> |
34 | #include <sys/sysinfo.h> | 34 | #include <errno.h> |
35 | 35 | ||
36 | #define FSHIFT 16 /* nr of bits of precision */ | 36 | #define FSHIFT 16 /* nr of bits of precision */ |
37 | #define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ | 37 | #define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */ |
38 | #define LOAD_INT(x) ((x) >> FSHIFT) | 38 | #define LOAD_INT(x) ((x) >> FSHIFT) |
39 | #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) | 39 | #define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) |
40 | 40 | ||
41 | |||
41 | extern int uptime_main(int argc, char **argv) | 42 | extern int uptime_main(int argc, char **argv) |
42 | { | 43 | { |
43 | int updays, uphours, upminutes; | 44 | int updays, uphours, upminutes; |
diff --git a/util-linux/mount.c b/util-linux/mount.c index 76f048b1c..292be0c43 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c | |||
@@ -358,6 +358,10 @@ extern int mount_main(int argc, char **argv) | |||
358 | fatalError( "\nDEVMTAB_GET_MOUNTS: %s\n", strerror (errno)); | 358 | fatalError( "\nDEVMTAB_GET_MOUNTS: %s\n", strerror (errno)); |
359 | 359 | ||
360 | for( i = 0 ; i < numfilesystems ; i++) { | 360 | for( i = 0 ; i < numfilesystems ; i++) { |
361 | /* klude around Linux 2.4.x stupidity */ | ||
362 | if (strcmp(mntentlist[i].mnt_fsname, "none") == 0) { | ||
363 | continue; | ||
364 | } | ||
361 | fprintf( stdout, "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, | 365 | fprintf( stdout, "%s %s %s %s %d %d\n", mntentlist[i].mnt_fsname, |
362 | mntentlist[i].mnt_dir, mntentlist[i].mnt_type, | 366 | mntentlist[i].mnt_dir, mntentlist[i].mnt_type, |
363 | mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, | 367 | mntentlist[i].mnt_opts, mntentlist[i].mnt_freq, |
@@ -380,6 +384,10 @@ extern int mount_main(int argc, char **argv) | |||
380 | 384 | ||
381 | while ((m = getmntent(mountTable)) != 0) { | 385 | while ((m = getmntent(mountTable)) != 0) { |
382 | char *blockDevice = m->mnt_fsname; | 386 | char *blockDevice = m->mnt_fsname; |
387 | /* klude around Linux 2.4.x stupidity */ | ||
388 | if (strcmp(blockDevice, "none") == 0) { | ||
389 | continue; | ||
390 | } | ||
383 | if (strcmp(blockDevice, "/dev/root") == 0) { | 391 | if (strcmp(blockDevice, "/dev/root") == 0) { |
384 | find_real_root_device_name( blockDevice); | 392 | find_real_root_device_name( blockDevice); |
385 | } | 393 | } |
@@ -131,6 +131,15 @@ extern int get_kernel_revision(void) | |||
131 | } | 131 | } |
132 | #endif /* BB_INIT */ | 132 | #endif /* BB_INIT */ |
133 | 133 | ||
134 | |||
135 | |||
136 | #if defined BB_FREE || defined BB_INIT || defined BB_UNAME || defined BB_UPTIME | ||
137 | #include <sys/syscall.h> | ||
138 | _syscall1(int, sysinfo, struct sysinfo *, info); | ||
139 | #endif /* BB_INIT */ | ||
140 | |||
141 | |||
142 | |||
134 | #if defined (BB_CP_MV) || defined (BB_DU) | 143 | #if defined (BB_CP_MV) || defined (BB_DU) |
135 | 144 | ||
136 | #define HASH_SIZE 311 /* Should be prime */ | 145 | #define HASH_SIZE 311 /* Should be prime */ |
@@ -1189,6 +1198,9 @@ extern struct mntent *findMountPoint(const char *name, const char *table) | |||
1189 | return 0; | 1198 | return 0; |
1190 | 1199 | ||
1191 | while ((mountEntry = getmntent(mountTable)) != 0) { | 1200 | while ((mountEntry = getmntent(mountTable)) != 0) { |
1201 | if (strcmp(mountEntry->mnt_fsname, "none") == 0) { | ||
1202 | continue; | ||
1203 | } | ||
1192 | if (strcmp(name, mountEntry->mnt_dir) == 0 | 1204 | if (strcmp(name, mountEntry->mnt_dir) == 0 |
1193 | || strcmp(name, mountEntry->mnt_fsname) == 0) /* String match. */ | 1205 | || strcmp(name, mountEntry->mnt_fsname) == 0) /* String match. */ |
1194 | break; | 1206 | break; |