X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=state.c;h=1ed70f542f13d3ec7b8a3d3cf2fcf8e31cf42cd8;hp=22a06a14f9be2c61714e89494cd82bde97845281;hb=7df968175ffd3bc7df5682d5852fbf20fe454759;hpb=4bccbfa967d756b8c84a62ea4752e936d8545a73 diff --git a/state.c b/state.c index 22a06a1..1ed70f5 100644 --- a/state.c +++ b/state.c @@ -43,12 +43,14 @@ static int reboot_event; static void set_stdio(const char* tty) { - chdir("/dev"); - freopen(tty, "r", stdin); - freopen(tty, "w", stdout); - freopen(tty, "w", stderr); - chdir("/"); - fcntl(STDERR_FILENO, F_SETFL, fcntl(STDERR_FILENO, F_GETFL) | O_NONBLOCK); + if (chdir("/dev") || + !freopen(tty, "r", stdin) || + !freopen(tty, "w", stdout) || + !freopen(tty, "w", stderr) || + chdir("/")) + ERROR("failed to set stdio\n"); + else + fcntl(STDERR_FILENO, F_SETFL, fcntl(STDERR_FILENO, F_GETFL) | O_NONBLOCK); } static void set_console(void) @@ -70,7 +72,10 @@ static void set_console(void) i++; } - chdir("/dev"); + if (chdir("/dev")) { + ERROR("failed to change dir to /dev\n"); + return; + } while (tty!=NULL) { f = open(tty, O_RDONLY); if (f >= 0) { @@ -81,7 +86,8 @@ static void set_console(void) tty=try[i]; i++; } - chdir("/"); + if (chdir("/")) + ERROR("failed to change dir to /\n"); if (tty != NULL) set_stdio(tty);