X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=interactive.c;h=190cdf295130a2d711074e7c5f5927174b312076;hp=bda5a0b8c89093abfccb0c776d368f0f0c3c5854;hb=a1610c2bd6e3097c6473c5403bfd59425b2058ba;hpb=3af6411b482ed8db2243f3e11bb06cf3adba6936 diff --git a/interactive.c b/interactive.c index bda5a0b8..190cdf29 100644 --- a/interactive.c +++ b/interactive.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 2011 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 2011 Andre Noll , see file COPYING. */ /** \file interactive.c Readline abstraction for interactive sessions. */ @@ -38,6 +34,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; @@ -235,6 +232,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) @@ -457,6 +456,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;