diff options
author | John Crispin <blogic@openwrt.org> | 2015-03-28 15:41:58 +0100 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2015-03-28 18:35:21 +0100 |
commit | 91da63d3d3fd680c805dd1a1b78df5b8731a8173 (patch) | |
tree | ec9a568a398ae536ccf7ac89a23942a60ef25c98 /state.c | |
parent | 74d835463e05e5761f6f5271e487f299f29d3f07 (diff) | |
download | procd-91da63d3d3fd680c805dd1a1b78df5b8731a8173.tar.gz |
properly handle return codes
Signed-off-by: John Crispin <blogic@openwrt.org>
Diffstat (limited to 'state.c')
-rw-r--r-- | state.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -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); |