Use pid_t more consistently. Should shut up a warning from GCC 4.6, and may
[u/mdw/putty] / unix / uxproxy.c
index 1191a61..792bbdc 100644 (file)
@@ -98,6 +98,8 @@ static void sk_localproxy_close (Socket s)
     del234(localproxy_by_fromfd, ps);
     del234(localproxy_by_tofd, ps);
 
+    uxsel_del(ps->to_cmd);
+    uxsel_del(ps->from_cmd);
     close(ps->to_cmd);
     close(ps->from_cmd);
 
@@ -207,7 +209,7 @@ static int localproxy_select_result(int fd, int event)
        } else if (ret == 0) {
            return plug_closing(s->plug, NULL, 0, 0);
        } else {
-           return plug_receive(s->plug, 1, buf, ret);
+           return plug_receive(s->plug, 0, buf, ret);
        }
     } else if (event == 2) {
        assert(fd == s->to_cmd);
@@ -263,6 +265,8 @@ Socket platform_new_connection(SockAddr addr, char *hostname,
        ret->error = dupprintf("pipe: %s", strerror(errno));
        return (Socket)ret;
     }
+    cloexec(to_cmd_pipe[1]);
+    cloexec(from_cmd_pipe[0]);
 
     pid = fork();
 
@@ -270,19 +274,20 @@ Socket platform_new_connection(SockAddr addr, char *hostname,
        ret->error = dupprintf("fork: %s", strerror(errno));
        return (Socket)ret;
     } else if (pid == 0) {
-       int i;
        close(0);
        close(1);
        dup2(to_cmd_pipe[0], 0);
        dup2(from_cmd_pipe[1], 1);
-       for (i = 3; i < 127; i++)
-           close(i);
+       close(to_cmd_pipe[0]);
+       close(from_cmd_pipe[1]);
        fcntl(0, F_SETFD, 0);
        fcntl(1, F_SETFD, 0);
-       execl("/bin/sh", "sh", "-c", cmd, NULL);
+       execl("/bin/sh", "sh", "-c", cmd, (void *)NULL);
        _exit(255);
     }
 
+    sfree(cmd);
+
     close(to_cmd_pipe[0]);
     close(from_cmd_pipe[1]);