play: Convert com_quit() to lopsub.
[paraslash.git] / interactive.c
index b72148c..c34a0f6 100644 (file)
@@ -38,6 +38,7 @@ struct i9e_private {
        bool caught_sigterm;
        Keymap standard_km;
        Keymap bare_km;
+       int fd_flags[2];
 };
 static struct i9e_private i9e_private, *i9ep = &i9e_private;
 
@@ -254,6 +255,8 @@ void i9e_close(void)
        if (hf)
                write_history(hf);
        wipe_bottom_line();
+       fcntl(i9ep->ici->fds[0], F_SETFL, i9ep->fd_flags[0]);
+       fcntl(i9ep->ici->fds[1], F_SETFL, i9ep->fd_flags[1]);
 }
 
 static void clear_bottom_line(void)
@@ -476,6 +479,14 @@ int i9e_open(struct i9e_client_info *ici, struct sched *s)
        memset(i9ep, 0, sizeof(struct i9e_private));
        if (!isatty(ici->fds[0]))
                return -E_I9E_SETUPTERM;
+       ret = fcntl(ici->fds[0], F_GETFL);
+       if (ret < 0)
+               return -E_I9E_SETUPTERM;
+       i9ep->fd_flags[0] = ret;
+       ret = fcntl(ici->fds[1], F_GETFL);
+       if (ret < 0)
+               return -E_I9E_SETUPTERM;
+       i9ep->fd_flags[1] = ret;
        ret = mark_fd_nonblocking(ici->fds[0]);
        if (ret < 0)
                return ret;