summaryrefslogtreecommitdiff
path: root/state.c
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2015-03-28 15:41:58 +0100
committerJohn Crispin <blogic@openwrt.org>2015-03-28 18:35:21 +0100
commit91da63d3d3fd680c805dd1a1b78df5b8731a8173 (patch)
treeec9a568a398ae536ccf7ac89a23942a60ef25c98 /state.c
parent74d835463e05e5761f6f5271e487f299f29d3f07 (diff)
downloadprocd-91da63d3d3fd680c805dd1a1b78df5b8731a8173.tar.gz
properly handle return codes
Signed-off-by: John Crispin <blogic@openwrt.org>
Diffstat (limited to 'state.c')
-rw-r--r--state.c22
1 files changed, 14 insertions, 8 deletions
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);