aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2006-05-29 12:54:16 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2006-05-29 12:54:16 +0000
commit0da069d3826568101560920bc2ca1796b1392630 (patch)
tree389334b0f92826239cd37087fcada43ef794e19d
parentbbc225e13d0b4388a095c98c86caff6dd675962b (diff)
downloadbusybox-0da069d3826568101560920bc2ca1796b1392630.tar.gz
- move common code into new open_new_terminal() function;
text data bss dec hex filename 864434 10244 645892 1520570 1733ba busybox_old 864386 10244 645892 1520522 17338a busybox_unstripped add/remove: 1/0 grow/shrink: 0/2 up/down: 92/-143 (-51) function old new delta open_new_terminal - 92 +92 exec_signal 345 276 -69 run 1527 1453 -74 Again, 48 != 51 so let's trust the former..
-rw-r--r--TODO2
-rw-r--r--init/init.c50
2 files changed, 28 insertions, 24 deletions
diff --git a/TODO b/TODO
index 35732e523..b75cec4f8 100644
--- a/TODO
+++ b/TODO
@@ -27,7 +27,7 @@ Rob Landley <rob@landley.net>:
bzip2
Compression-side support.
init
- General cleanup.
+ General cleanup (should use ENABLE_FEATURE_INIT_SYSLOG and ENABLE_FEATURE_INIT_DEBUG).
Unify base64 handling.
There's base64 encoding and decoding going on in:
networking/wget.c:base64enc()
diff --git a/init/init.c b/init/init.c
index ec3c4d7cf..d800480ee 100644
--- a/init/init.c
+++ b/init/init.c
@@ -386,6 +386,23 @@ static void fixup_argv(int argc, char **argv, char *new_argv0)
}
}
+/* Open the new terminal device */
+static void open_new_terminal(const char *device, char fail) {
+ struct stat sb;
+
+ if ((device_open(device, O_RDWR)) < 0) {
+ if (stat(device, &sb) != 0) {
+ message(LOG | CONSOLE, "device '%s' does not exist.", device);
+ } else {
+ message(LOG | CONSOLE, "Bummer, can't open %s", device);
+ }
+ if (fail)
+ _exit(1);
+ /* else */
+ halt_signal(SIGUSR1);
+ }
+}
+
static pid_t run(const struct init_action *a)
{
int i, junk;
@@ -405,7 +422,6 @@ static pid_t run(const struct init_action *a)
sigprocmask(SIG_BLOCK, &nmask, &omask);
if ((pid = fork()) == 0) {
- struct stat sb;
/* Clean up */
close(0);
@@ -429,14 +445,7 @@ static pid_t run(const struct init_action *a)
setsid();
/* Open the new terminal device */
- if ((device_open(a->terminal, O_RDWR)) < 0) {
- if (stat(a->terminal, &sb) != 0) {
- message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal);
- } else {
- message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal);
- }
- _exit(1);
- }
+ open_new_terminal(a->terminal, 1);
/* Make sure the terminal will act fairly normal for us */
set_term(0);
@@ -575,12 +584,15 @@ static pid_t run(const struct init_action *a)
getpid(), a->terminal, cmdpath);
#if defined CONFIG_FEATURE_INIT_COREDUMPS
- if (stat(CORE_ENABLE_FLAG_FILE, &sb) == 0) {
- struct rlimit limit;
+ {
+ struct stat sb;
+ if (stat(CORE_ENABLE_FLAG_FILE, &sb) == 0) {
+ struct rlimit limit;
- limit.rlim_cur = RLIM_INFINITY;
- limit.rlim_max = RLIM_INFINITY;
- setrlimit(RLIMIT_CORE, &limit);
+ limit.rlim_cur = RLIM_INFINITY;
+ limit.rlim_max = RLIM_INFINITY;
+ setrlimit(RLIMIT_CORE, &limit);
+ }
}
#endif
@@ -729,15 +741,7 @@ static void exec_signal(int sig ATTRIBUTE_UNUSED)
close(2);
/* Open the new terminal device */
- if ((device_open(a->terminal, O_RDWR)) < 0) {
- struct stat sb;
- if (stat(a->terminal, &sb) != 0) {
- message(LOG | CONSOLE, "device '%s' does not exist.", a->terminal);
- } else {
- message(LOG | CONSOLE, "Bummer, can't open %s", a->terminal);
- }
- halt_signal(SIGUSR1);
- }
+ open_new_terminal(a->terminal, 0);
/* Make sure the terminal will act fairly normal for us */
set_term(0);