Don't close uninitialized fd, check forkpty error.

This commit is contained in:
Kristian Høgsberg 2008-12-12 13:39:03 -05:00
parent c492b482d0
commit f0c7b2083a
1 changed files with 6 additions and 3 deletions

View File

@ -561,7 +561,7 @@ io_handler(GIOChannel *source,
static int static int
terminal_run(struct terminal *terminal, const char *path) terminal_run(struct terminal *terminal, const char *path)
{ {
int master, slave; int master;
pid_t pid; pid_t pid;
pid = forkpty(&master, NULL, NULL, NULL); pid = forkpty(&master, NULL, NULL, NULL);
@ -571,9 +571,11 @@ terminal_run(struct terminal *terminal, const char *path)
printf("exec failed: %m\n"); printf("exec failed: %m\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} else if (pid < 0) {
fprintf(stderr, "failed to fork and create pty (%m).\n");
return -1;
} }
close(slave);
terminal->master = master; terminal->master = master;
terminal->channel = g_io_channel_unix_new(master); terminal->channel = g_io_channel_unix_new(master);
fcntl(master, F_SETFL, O_NONBLOCK); fcntl(master, F_SETFL, O_NONBLOCK);
@ -608,7 +610,8 @@ int main(int argc, char *argv[])
g_source_attach(source, NULL); g_source_attach(source, NULL);
terminal = terminal_create(display, fd); terminal = terminal_create(display, fd);
terminal_run(terminal, "/bin/bash"); if (terminal_run(terminal, "/bin/bash"))
exit(EXIT_FAILURE);
g_main_loop_run(loop); g_main_loop_run(loop);