# HG changeset patch # User jbe # Date 1434919252 -7200 # Node ID 56efa825bfc7e89b2936875b4f7bf3f2dbfd1cfa # Parent 5601a486e68a831652af163b503dbd67ca6c07e6 Code cleanup regarding SOCK_CLOEXEC in moonbridge_io.c diff -r 5601a486e68a -r 56efa825bfc7 moonbridge_io.c --- a/moonbridge_io.c Sun Jun 21 20:10:21 2015 +0200 +++ b/moonbridge_io.c Sun Jun 21 22:40:52 2015 +0200 @@ -1242,13 +1242,13 @@ argv = lua_newuserdata(L, (argc + 1) * sizeof(char *)); for (i=0; ipid) { - if (dup2(sockin[1], 0) == -1) { - errorcond = 1; - strerror_r(errno, (char *)errmsgbuf, MOONBR_IO_MAXSTRERRORLEN); - _exit(0); - } - if (dup2(sockout[1], 1) == -1) { - errorcond = 1; - strerror_r(errno, (char *)errmsgbuf, MOONBR_IO_MAXSTRERRORLEN); - _exit(0); - } - if (dup2(sockerr[1], 2) == -1) { - errorcond = 1; - strerror_r(errno, (char *)errmsgbuf, MOONBR_IO_MAXSTRERRORLEN); - _exit(0); - } + if (dup2(sockin[1], 0) == -1) goto moonbr_io_exec_error; + if (dup2(sockout[1], 1) == -1) goto moonbr_io_exec_error; + if (dup2(sockerr[1], 2) == -1) goto moonbr_io_exec_error; closefrom(4); + if (fcntl(0, F_SETFD, 0) == -1) goto moonbr_io_exec_error; + if (fcntl(1, F_SETFD, 0) == -1) goto moonbr_io_exec_error; + if (fcntl(2, F_SETFD, 0) == -1) goto moonbr_io_exec_error; if (execvp(argv[0], argv)) { errorcond = 2; strerror_r(errno, (char *)errmsgbuf, MOONBR_IO_MAXSTRERRORLEN); _exit(0); } + moonbr_io_exec_error: + errorcond = 1; + strerror_r(errno, (char *)errmsgbuf, MOONBR_IO_MAXSTRERRORLEN); + _exit(0); } close(sockin[1]); close(sockout[1]); @@ -1322,27 +1317,6 @@ else lua_pushfstring(L, "Error in fork: %s", errmsgbuf); return 2; } - if (fcntl(sockin[0], F_SETFD, FD_CLOEXEC) == -1) { - moonbr_io_errmsg(); - close(sockin[0]); - close(sockout[0]); - close(sockerr[0]); - luaL_error(L, "Error in fcntl call: %s", errmsg); - } - if (fcntl(sockout[0], F_SETFD, FD_CLOEXEC) == -1) { - moonbr_io_errmsg(); - close(sockin[0]); - close(sockout[0]); - close(sockerr[0]); - luaL_error(L, "Error in fcntl call: %s", errmsg); - } - if (fcntl(sockerr[0], F_SETFD, FD_CLOEXEC) == -1) { - moonbr_io_errmsg(); - close(sockin[0]); - close(sockout[0]); - close(sockerr[0]); - luaL_error(L, "Error in fcntl call: %s", errmsg); - } /* close sockets during garbage collection in case a Lua error is raised */ child->uninitialized_in = sockin[0]; child->uninitialized_out = sockout[0];