When ICS Console open EOF from keyboard is no error
authorH.G. Muller <h.g.muller@hccnet.nl>
Fri, 7 Feb 2014 08:48:31 +0000 (09:48 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sun, 2 Mar 2014 18:04:46 +0000 (19:04 +0100)
In case the user started without a terminal, we just close the input source,
and suppress future writing to the xterm.

gtk/xboard.c
usystem.c
usystem.h

index aff56cc..8537eaf 100644 (file)
@@ -1970,6 +1970,11 @@ DoInputCallback(io, cond, data)
        count = read(is->fd, is->unused,
                     INPUT_SOURCE_BUF_SIZE - (is->unused - is->buf));
        if (count <= 0) {
+           if(count == 0 && is->kind == CPReal && shells[ChatDlg]) { // [HGM] absence of terminal is no error if ICS Console present
+               RemoveInputSource(is); // cease reading stdin
+               stdoutClosed = TRUE;   // suppress future output
+               return True;
+           } 
            (is->func)(is, is->closure, is->buf, count, count ? errno : 0);
            return True;
        }
index 4a08e57..9223480 100644 (file)
--- a/usystem.c
+++ b/usystem.c
@@ -650,6 +650,8 @@ OpenRcmd (char *host, char *user, char *cmd, ProcRef *pr)
     return -1;
 }
 
+Boolean stdoutClosed = FALSE;
+
 int
 OutputToProcess (ProcRef pr, char *message, int count, int *outError)
 {
@@ -659,9 +661,9 @@ OutputToProcess (ProcRef pr, char *message, int count, int *outError)
 
     if (pr == NoProc)
     {
-        if (appData.noJoin || !appData.useInternalWrap)
-            outCount = fwrite(message, 1, count, stdout);
-        else
+        if (appData.noJoin || !appData.useInternalWrap) {
+            if(!stdoutClosed) outCount = fwrite(message, 1, count, stdout);
+        } else
         {
             int width = get_term_width();
             int len = wrap(NULL, message, count, width, &line);
index b776652..a0acd30 100644 (file)
--- a/usystem.h
+++ b/usystem.h
@@ -68,6 +68,7 @@ typedef struct {
 } ChildProc;
 
 extern char *oldICSInteractionTitle;
+extern Boolean stdoutClosed;
 
 char *ExpandPathName P((char *path));
 int  MySearchPath P((char *installDir, char *name, char *fullname));