]> granicus.if.org Git - vim/commitdiff
patch 8.1.1118: a couple of conditions are hard to understand v8.1.1118
authorBram Moolenaar <Bram@vim.org>
Thu, 4 Apr 2019 18:13:09 +0000 (20:13 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 4 Apr 2019 18:13:09 +0000 (20:13 +0200)
Problem:    A couple of conditions are hard to understand.
Solution:   Split the conditions into pieces. (Ozaki Kiichi, closes #3879)

src/getchar.c
src/os_unix.c
src/version.c

index e8926d4296940a868872653e73ce9ede4cff2fe8..4011db14861f324246737d72e550903fd473dab3 100644 (file)
@@ -2030,6 +2030,8 @@ vgetorpeek(int advance)
             */
            for (;;)
            {
+               long        wait_time;
+
                /*
                 * ui_breakcheck() is slow, don't use it too often when
                 * inside a mapping.  But call it each time for typed
@@ -2828,18 +2830,25 @@ vgetorpeek(int advance)
                    // that has a <Nop> RHS.
                    timedout = FALSE;
 
+               if (advance)
+               {
+                   if (typebuf.tb_len == 0
+                           || !(p_timeout
+                                || (p_ttimeout && keylen == KEYLEN_PART_KEY)))
+                       // blocking wait
+                       wait_time = -1L;
+                   else if (keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+                       wait_time = p_ttm;
+                   else
+                       wait_time = p_tm;
+               }
+               else
+                   wait_time = 0;
+
                wait_tb_len = typebuf.tb_len;
                c = inchar(typebuf.tb_buf + typebuf.tb_off + typebuf.tb_len,
                        typebuf.tb_buflen - typebuf.tb_off - typebuf.tb_len - 1,
-                       !advance
-                           ? 0
-                           : ((typebuf.tb_len == 0
-                                   || !(p_timeout || (p_ttimeout
-                                              && keylen == KEYLEN_PART_KEY)))
-                                   ? -1L
-                                   : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
-                                           ? p_ttm
-                                           : p_tm)));
+                       wait_time);
 
 #ifdef FEAT_CMDL_INFO
                if (i != 0)
index 8618499ea0e6d670700e258dad746443e5a2839f..b5255bba1dd2c4233c3d1be4d8ca67728347dd3d 100644 (file)
@@ -5607,19 +5607,25 @@ mch_job_start(char **argv, job_T *job, jobopt_T *options, int is_terminal)
        close(fd_err[1]);
     if (channel != NULL)
     {
-       int in_fd = use_file_for_in || use_null_for_in
-                       ? INVALID_FD : fd_in[1] < 0 ? pty_master_fd : fd_in[1];
-       int out_fd = use_file_for_out || use_null_for_out
-                     ? INVALID_FD : fd_out[0] < 0 ? pty_master_fd : fd_out[0];
-       /* When using pty_master_fd only set it for stdout, do not duplicate it
-        * for stderr, it only needs to be read once. */
-       int err_fd = use_out_for_err || use_file_for_err || use_null_for_err
-                     ? INVALID_FD
-                     : fd_err[0] >= 0
-                        ? fd_err[0]
-                        : (out_fd == pty_master_fd
-                                ? INVALID_FD
-                                : pty_master_fd);
+       int in_fd = INVALID_FD;
+       int out_fd = INVALID_FD;
+       int err_fd = INVALID_FD;
+
+       if (!(use_file_for_in || use_null_for_in))
+           in_fd = fd_in[1] >= 0 ? fd_in[1] : pty_master_fd;
+
+       if (!(use_file_for_out || use_null_for_out))
+           out_fd = fd_out[0] >= 0 ? fd_out[0] : pty_master_fd;
+
+       // When using pty_master_fd only set it for stdout, do not duplicate
+       // it for stderr, it only needs to be read once.
+       if (!(use_out_for_err || use_file_for_err || use_null_for_err))
+       {
+           if (fd_err[0] >= 0)
+               err_fd = fd_err[0];
+           else if (out_fd != pty_master_fd)
+               err_fd = pty_master_fd;
+       }
 
        channel_set_pipes(channel, in_fd, out_fd, err_fd);
        channel_set_job(channel, job, options);
index 11849d92a5e32ad7707c055cb61a503a7e89e902..14512b82ef872e2fdca4167687435d1dea52b788 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1118,
 /**/
     1117,
 /**/