summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>1999-11-05 00:31:46 +0000
committerEric Andersen <andersen@codepoet.org>1999-11-05 00:31:46 +0000
commitcf8c9cf7b9792e9cef3d790c46763712c390c7ed (patch)
tree980d8b0e71170aeb61c1e7ea871c7233ca31cbb6
parentd0246fb72b40320a74376af1bb944fef2c9b734f (diff)
downloadbusybox-w32-0_32.tar.gz
busybox-w32-0_32.tar.bz2
busybox-w32-0_32.zip
More stuff -- ready for release.0_32
-Erik
-rw-r--r--Changelog8
-rw-r--r--busybox.def.h2
-rw-r--r--init.c64
-rw-r--r--init/init.c64
-rw-r--r--umount.c9
-rw-r--r--util-linux/umount.c9
-rw-r--r--utility.c8
7 files changed, 53 insertions, 111 deletions
diff --git a/Changelog b/Changelog
index cd0ca0a35..1161f8bb3 100644
--- a/Changelog
+++ b/Changelog
@@ -9,10 +9,18 @@
9 * Wrote sed -- weighs only 1.8k (5.8k with full regular expressions!). 9 * Wrote sed -- weighs only 1.8k (5.8k with full regular expressions!).
10 * Fixed a stupid seg-fault in sync 10 * Fixed a stupid seg-fault in sync
11 * Fixed mount -- mount -a failed to parse and apply mount options 11 * Fixed mount -- mount -a failed to parse and apply mount options
12 * Fixed umount -n (patch thanks to Matthew Grant <grantma@anathoth.gen.nz>)
13 * umount -a no longer umounts /proc
12 * Added BB_MTAB, allowing (at the cost of ~1.5k and the need for a rw /etc) 14 * Added BB_MTAB, allowing (at the cost of ~1.5k and the need for a rw /etc)
13 folks to use a real /etc/mtab file instead of a symlink to /proc/mounts. 15 folks to use a real /etc/mtab file instead of a symlink to /proc/mounts.
14 mount, and umount will add/remove entries and df will now use /etc/mtab 16 mount, and umount will add/remove entries and df will now use /etc/mtab
15 if BB_MTAB is defined. 17 if BB_MTAB is defined.
18 * Fixed a nice bug in recursiveAction() which caused it to infinitely
19 hunt through /proc/../fd/* creating new file descriptors if it
20 followed the /dev/fd link over to /proc. recursiveAction() now
21 lstat's the file when followLinks==FALSE so it won't follow links
22 as the name suggests. Fix thanks to Matt Porter <porter@debian.org>.
23
16 24
17 -Erik Andersen 25 -Erik Andersen
18 26
diff --git a/busybox.def.h b/busybox.def.h
index 880046318..59c1df188 100644
--- a/busybox.def.h
+++ b/busybox.def.h
@@ -38,7 +38,7 @@
38#define BB_MORE 38#define BB_MORE
39#define BB_MOUNT 39#define BB_MOUNT
40//#define BB_MT 40//#define BB_MT
41#define BB_MTAB 41//#define BB_MTAB
42#define BB_MV 42#define BB_MV
43//#define BB_PRINTF 43//#define BB_PRINTF
44#define BB_PS 44#define BB_PS
diff --git a/init.c b/init.c
index 55c5c7318..87746ef86 100644
--- a/init.c
+++ b/init.c
@@ -123,13 +123,6 @@ void message(int device, char *fmt, ...)
123void set_term( int fd) 123void set_term( int fd)
124{ 124{
125 struct termios tty; 125 struct termios tty;
126#if 0
127 static const char control_characters[] = {
128 '\003', '\034', '\177', '\025', '\004', '\0',
129 '\1', '\0', '\021', '\023', '\032', '\0', '\022',
130 '\017', '\027', '\026', '\0'
131 };
132#endif
133 static const char control_characters[] = { 126 static const char control_characters[] = {
134 '\003', '\034', '\177', '\030', '\004', '\0', 127 '\003', '\034', '\177', '\030', '\004', '\0',
135 '\1', '\0', '\021', '\023', '\032', '\0', '\022', 128 '\1', '\0', '\021', '\023', '\032', '\0', '\022',
@@ -160,44 +153,6 @@ void set_term( int fd)
160 tcsetattr(fd, TCSANOW, &tty); 153 tcsetattr(fd, TCSANOW, &tty);
161} 154}
162 155
163/* Set terminal settings to reasonable defaults */
164void set_term_old( int fd)
165{
166 struct termios tty;
167
168 ioctl(fd, TCGETA, &tty);
169
170 tty.c_cflag &= CBAUD|CBAUDEX|CSIZE|CSTOPB|PARENB|PARODD;
171 tty.c_cflag |= HUPCL|CLOCAL;
172
173 tty.c_cc[VINTR] = 3;
174 tty.c_cc[VQUIT] = 28;
175 tty.c_cc[VERASE] = 127;
176 //tty.c_cc[VKILL] = 21;
177 tty.c_cc[VKILL] = 24;
178 tty.c_cc[VEOF] = 4;
179 tty.c_cc[VTIME] = 0;
180 tty.c_cc[VMIN] = 1;
181 tty.c_cc[VSWTC] = 0;
182 tty.c_cc[VSTART] = 17;
183 tty.c_cc[VSTOP] = 19;
184 tty.c_cc[VSUSP] = 26;
185 tty.c_cc[VEOL] = 0;
186 tty.c_cc[VREPRINT] = 18;
187 tty.c_cc[VDISCARD] = 15;
188 tty.c_cc[VWERASE] = 23;
189 tty.c_cc[VLNEXT] = 22;
190 tty.c_cc[VEOL2] = 0;
191
192
193 tty.c_line = 0;
194 tty.c_iflag = IGNPAR|ICRNL|IXON|IXOFF|IXANY;
195 tty.c_oflag = OPOST|ONLCR;
196 tty.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK|ECHOCTL|ECHOPRT|ECHOKE|IEXTEN;
197
198 ioctl(fd, TCSETA, &tty);
199}
200
201/* How much memory does this machine have? */ 156/* How much memory does this machine have? */
202static int mem_total() 157static int mem_total()
203{ 158{
@@ -395,7 +350,12 @@ static void shutdown_system(void)
395 waitfor(run( swap_off_cmd, console, FALSE)); 350 waitfor(run( swap_off_cmd, console, FALSE));
396 waitfor(run( umount_cmd, console, FALSE)); 351 waitfor(run( umount_cmd, console, FALSE));
397 sync(); 352 sync();
398 bdflush(1, 0); 353 message(CONSOLE, "Skipping bdflush\r\n");
354 if (get_kernel_revision() <= 2 * 65536 + 2 * 256 + 11) {
355 /* bdflush, kupdate not needed for kernels >2.2.11 */
356 bdflush(1, 0);
357 sync();
358 }
399} 359}
400 360
401static void halt_signal(int sig) 361static void halt_signal(int sig)
@@ -518,15 +478,19 @@ extern int init_main(int argc, char **argv)
518 if (wpid > 0 ) { 478 if (wpid > 0 ) {
519 message(LOG, "pid %d exited, status=%x.\n", wpid, status); 479 message(LOG, "pid %d exited, status=%x.\n", wpid, status);
520 } 480 }
481 /* Don't respawn init script if it exits */
521 if (wpid == pid1) { 482 if (wpid == pid1) {
522 pid1 = 0; 483 if (run_rc == FALSE) {
523 if (run_rc == TRUE) { 484 pid1 = 0;
524 /* Don't respawn init script if it exits, 485 }
525 * Start a shell instead. */ 486#if 0
487/* Turn this on to start a shell on the console if the init script exits.... */
488 else {
526 run_rc=FALSE; 489 run_rc=FALSE;
527 wait_for_enter=TRUE; 490 wait_for_enter=TRUE;
528 tty0_commands=shell_commands; 491 tty0_commands=shell_commands;
529 } 492 }
493#endif
530 } 494 }
531 if (wpid == pid2) { 495 if (wpid == pid2) {
532 pid2 = 0; 496 pid2 = 0;
diff --git a/init/init.c b/init/init.c
index 55c5c7318..87746ef86 100644
--- a/init/init.c
+++ b/init/init.c
@@ -123,13 +123,6 @@ void message(int device, char *fmt, ...)
123void set_term( int fd) 123void set_term( int fd)
124{ 124{
125 struct termios tty; 125 struct termios tty;
126#if 0
127 static const char control_characters[] = {
128 '\003', '\034', '\177', '\025', '\004', '\0',
129 '\1', '\0', '\021', '\023', '\032', '\0', '\022',
130 '\017', '\027', '\026', '\0'
131 };
132#endif
133 static const char control_characters[] = { 126 static const char control_characters[] = {
134 '\003', '\034', '\177', '\030', '\004', '\0', 127 '\003', '\034', '\177', '\030', '\004', '\0',
135 '\1', '\0', '\021', '\023', '\032', '\0', '\022', 128 '\1', '\0', '\021', '\023', '\032', '\0', '\022',
@@ -160,44 +153,6 @@ void set_term( int fd)
160 tcsetattr(fd, TCSANOW, &tty); 153 tcsetattr(fd, TCSANOW, &tty);
161} 154}
162 155
163/* Set terminal settings to reasonable defaults */
164void set_term_old( int fd)
165{
166 struct termios tty;
167
168 ioctl(fd, TCGETA, &tty);
169
170 tty.c_cflag &= CBAUD|CBAUDEX|CSIZE|CSTOPB|PARENB|PARODD;
171 tty.c_cflag |= HUPCL|CLOCAL;
172
173 tty.c_cc[VINTR] = 3;
174 tty.c_cc[VQUIT] = 28;
175 tty.c_cc[VERASE] = 127;
176 //tty.c_cc[VKILL] = 21;
177 tty.c_cc[VKILL] = 24;
178 tty.c_cc[VEOF] = 4;
179 tty.c_cc[VTIME] = 0;
180 tty.c_cc[VMIN] = 1;
181 tty.c_cc[VSWTC] = 0;
182 tty.c_cc[VSTART] = 17;
183 tty.c_cc[VSTOP] = 19;
184 tty.c_cc[VSUSP] = 26;
185 tty.c_cc[VEOL] = 0;
186 tty.c_cc[VREPRINT] = 18;
187 tty.c_cc[VDISCARD] = 15;
188 tty.c_cc[VWERASE] = 23;
189 tty.c_cc[VLNEXT] = 22;
190 tty.c_cc[VEOL2] = 0;
191
192
193 tty.c_line = 0;
194 tty.c_iflag = IGNPAR|ICRNL|IXON|IXOFF|IXANY;
195 tty.c_oflag = OPOST|ONLCR;
196 tty.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK|ECHOCTL|ECHOPRT|ECHOKE|IEXTEN;
197
198 ioctl(fd, TCSETA, &tty);
199}
200
201/* How much memory does this machine have? */ 156/* How much memory does this machine have? */
202static int mem_total() 157static int mem_total()
203{ 158{
@@ -395,7 +350,12 @@ static void shutdown_system(void)
395 waitfor(run( swap_off_cmd, console, FALSE)); 350 waitfor(run( swap_off_cmd, console, FALSE));
396 waitfor(run( umount_cmd, console, FALSE)); 351 waitfor(run( umount_cmd, console, FALSE));
397 sync(); 352 sync();
398 bdflush(1, 0); 353 message(CONSOLE, "Skipping bdflush\r\n");
354 if (get_kernel_revision() <= 2 * 65536 + 2 * 256 + 11) {
355 /* bdflush, kupdate not needed for kernels >2.2.11 */
356 bdflush(1, 0);
357 sync();
358 }
399} 359}
400 360
401static void halt_signal(int sig) 361static void halt_signal(int sig)
@@ -518,15 +478,19 @@ extern int init_main(int argc, char **argv)
518 if (wpid > 0 ) { 478 if (wpid > 0 ) {
519 message(LOG, "pid %d exited, status=%x.\n", wpid, status); 479 message(LOG, "pid %d exited, status=%x.\n", wpid, status);
520 } 480 }
481 /* Don't respawn init script if it exits */
521 if (wpid == pid1) { 482 if (wpid == pid1) {
522 pid1 = 0; 483 if (run_rc == FALSE) {
523 if (run_rc == TRUE) { 484 pid1 = 0;
524 /* Don't respawn init script if it exits, 485 }
525 * Start a shell instead. */ 486#if 0
487/* Turn this on to start a shell on the console if the init script exits.... */
488 else {
526 run_rc=FALSE; 489 run_rc=FALSE;
527 wait_for_enter=TRUE; 490 wait_for_enter=TRUE;
528 tty0_commands=shell_commands; 491 tty0_commands=shell_commands;
529 } 492 }
493#endif
530 } 494 }
531 if (wpid == pid2) { 495 if (wpid == pid2) {
532 pid2 = 0; 496 pid2 = 0;
diff --git a/umount.c b/umount.c
index e749c5f0f..89c59f9ee 100644
--- a/umount.c
+++ b/umount.c
@@ -76,6 +76,10 @@ umount_all(int useMtab)
76 if (strcmp (blockDevice, "/dev/root") == 0) 76 if (strcmp (blockDevice, "/dev/root") == 0)
77 blockDevice = (getfsfile ("/"))->fs_spec; 77 blockDevice = (getfsfile ("/"))->fs_spec;
78#endif 78#endif
79 /* Don't umount /proc when doing umount -a */
80 if (strcmp (blockDevice, "proc") == 0)
81 continue;
82
79 status=do_umount (m->mnt_dir, useMtab); 83 status=do_umount (m->mnt_dir, useMtab);
80 if (status!=0) { 84 if (status!=0) {
81 /* Don't bother retrying the umount on busy devices */ 85 /* Don't bother retrying the umount on busy devices */
@@ -83,9 +87,6 @@ umount_all(int useMtab)
83 perror(m->mnt_dir); 87 perror(m->mnt_dir);
84 continue; 88 continue;
85 } 89 }
86 printf ("Trying to umount %s failed: %s\n",
87 m->mnt_dir, strerror(errno));
88 printf ("Instead trying to umount %s\n", blockDevice);
89 status=do_umount (blockDevice, useMtab); 90 status=do_umount (blockDevice, useMtab);
90 if (status!=0) { 91 if (status!=0) {
91 printf ("Couldn't umount %s on %s (type %s): %s\n", 92 printf ("Couldn't umount %s on %s (type %s): %s\n",
@@ -107,7 +108,7 @@ umount_main(int argc, char** argv)
107 } 108 }
108 109
109 /* Parse any options */ 110 /* Parse any options */
110 while (argc-- > 0 && **(++argv) == '-') { 111 while (argc-- > 0 && **(argv++) == '-') {
111 while (*++(*argv)) switch (**argv) { 112 while (*++(*argv)) switch (**argv) {
112 case 'a': 113 case 'a':
113 umountAll = TRUE; 114 umountAll = TRUE;
diff --git a/util-linux/umount.c b/util-linux/umount.c
index e749c5f0f..89c59f9ee 100644
--- a/util-linux/umount.c
+++ b/util-linux/umount.c
@@ -76,6 +76,10 @@ umount_all(int useMtab)
76 if (strcmp (blockDevice, "/dev/root") == 0) 76 if (strcmp (blockDevice, "/dev/root") == 0)
77 blockDevice = (getfsfile ("/"))->fs_spec; 77 blockDevice = (getfsfile ("/"))->fs_spec;
78#endif 78#endif
79 /* Don't umount /proc when doing umount -a */
80 if (strcmp (blockDevice, "proc") == 0)
81 continue;
82
79 status=do_umount (m->mnt_dir, useMtab); 83 status=do_umount (m->mnt_dir, useMtab);
80 if (status!=0) { 84 if (status!=0) {
81 /* Don't bother retrying the umount on busy devices */ 85 /* Don't bother retrying the umount on busy devices */
@@ -83,9 +87,6 @@ umount_all(int useMtab)
83 perror(m->mnt_dir); 87 perror(m->mnt_dir);
84 continue; 88 continue;
85 } 89 }
86 printf ("Trying to umount %s failed: %s\n",
87 m->mnt_dir, strerror(errno));
88 printf ("Instead trying to umount %s\n", blockDevice);
89 status=do_umount (blockDevice, useMtab); 90 status=do_umount (blockDevice, useMtab);
90 if (status!=0) { 91 if (status!=0) {
91 printf ("Couldn't umount %s on %s (type %s): %s\n", 92 printf ("Couldn't umount %s on %s (type %s): %s\n",
@@ -107,7 +108,7 @@ umount_main(int argc, char** argv)
107 } 108 }
108 109
109 /* Parse any options */ 110 /* Parse any options */
110 while (argc-- > 0 && **(++argv) == '-') { 111 while (argc-- > 0 && **(argv++) == '-') {
111 while (*++(*argv)) switch (**argv) { 112 while (*++(*argv)) switch (**argv) {
112 case 'a': 113 case 'a':
113 umountAll = TRUE; 114 umountAll = TRUE;
diff --git a/utility.c b/utility.c
index 125e819ed..50d019254 100644
--- a/utility.c
+++ b/utility.c
@@ -393,7 +393,8 @@ int fullRead(int fd, char *buf, int len)
393 * 393 *
394 * Unfortunatly, while nftw(3) could replace this and reduce 394 * Unfortunatly, while nftw(3) could replace this and reduce
395 * code size a bit, nftw() wasn't supported before GNU libc 2.1, 395 * code size a bit, nftw() wasn't supported before GNU libc 2.1,
396 * and so isn't sufficiently portable to take over... 396 * and so isn't sufficiently portable to take over since glibc2.1
397 * is so stinking huge.
397 */ 398 */
398int 399int
399recursiveAction(const char *fileName, int recurse, int followLinks, int depthFirst, 400recursiveAction(const char *fileName, int recurse, int followLinks, int depthFirst,
@@ -404,7 +405,7 @@ recursiveAction(const char *fileName, int recurse, int followLinks, int depthFir
404 struct stat statbuf; 405 struct stat statbuf;
405 struct dirent *next; 406 struct dirent *next;
406 407
407 if (followLinks == FALSE) 408 if (followLinks == TRUE)
408 status = stat(fileName, &statbuf); 409 status = stat(fileName, &statbuf);
409 else 410 else
410 status = lstat(fileName, &statbuf); 411 status = lstat(fileName, &statbuf);
@@ -414,6 +415,9 @@ recursiveAction(const char *fileName, int recurse, int followLinks, int depthFir
414 return (FALSE); 415 return (FALSE);
415 } 416 }
416 417
418 if ( (followLinks == FALSE) && (S_ISLNK(statbuf.st_mode)) )
419 return (TRUE);
420
417 if (recurse == FALSE) { 421 if (recurse == FALSE) {
418 if (S_ISDIR(statbuf.st_mode)) { 422 if (S_ISDIR(statbuf.st_mode)) {
419 if (dirAction != NULL) 423 if (dirAction != NULL)