summaryrefslogtreecommitdiffstats
path: root/lem/io/stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'lem/io/stream.c')
-rw-r--r--lem/io/stream.c60
1 files changed, 0 insertions, 60 deletions
diff --git a/lem/io/stream.c b/lem/io/stream.c
index 204df81..0056233 100644
--- a/lem/io/stream.c
+++ b/lem/io/stream.c
@@ -530,63 +530,3 @@ stream_sendfile(lua_State *T)
lua_settop(T, 2);
return lua_yield(T, 2);
}
-
-static int
-stream_popen(lua_State *T)
-{
- const char *cmd = luaL_checkstring(T, 1);
- const char *mode = luaL_optstring(T, 2, "r");
- int fd[2];
- int err;
-
- if (mode[0] != 'r' && mode[0] != 'w')
- return luaL_error(T, "invalid mode string");
-
- if (pipe(fd))
- return io_strerror(T, errno);
-
- switch (fork()) {
- case -1: /* error */
- err = errno;
- close(fd[0]);
- close(fd[1]);
- return io_strerror(T, err);
-
- case 0: /* child */
- if (mode[0] == 'r') {
- close(fd[0]);
- dup2(fd[1], 1);
- } else {
- close(fd[1]);
- dup2(fd[0], 0);
- }
-
- execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
- exit(EXIT_FAILURE);
- }
-
- if (mode[0] == 'r') {
- if (close(fd[1])) {
- err = errno;
- close(fd[0]);
- return io_strerror(T, err);
- }
- } else {
- if (close(fd[0])) {
- err = errno;
- close(fd[1]);
- return io_strerror(T, err);
- }
- fd[0] = fd[1];
- }
-
- /* make the pipe non-blocking */
- if (fcntl(fd[0], F_SETFL, O_NONBLOCK) == -1) {
- err = errno;
- close(fd[0]);
- return io_strerror(T, err);
- }
-
- stream_new(T, fd[0], lua_upvalueindex(1));
- return 1;
-}