Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libedit Fix numeric variable handling in settc (lyzliyuz...



details:   https://anonhg.NetBSD.org/src/rev/3203549f2caa
branches:  trunk
changeset: 935851:3203549f2caa
user:      christos <christos%NetBSD.org@localhost>
date:      Fri Jul 10 20:34:24 2020 +0000

description:
Fix numeric variable handling in settc (lyzliyuzhi at 163 dot com)

diffstat:

 lib/libedit/terminal.c |  56 +++++++++++++++++++++++++++++--------------------
 1 files changed, 33 insertions(+), 23 deletions(-)

diffs (97 lines):

diff -r ec75edfa777a -r 3203549f2caa lib/libedit/terminal.c
--- a/lib/libedit/terminal.c    Fri Jul 10 16:02:00 2020 +0000
+++ b/lib/libedit/terminal.c    Fri Jul 10 20:34:24 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: terminal.c,v 1.42 2020/05/31 23:24:23 christos Exp $   */
+/*     $NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $   */
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)term.c     8.2 (Berkeley) 4/30/95";
 #else
-__RCSID("$NetBSD: terminal.c,v 1.42 2020/05/31 23:24:23 christos Exp $");
+__RCSID("$NetBSD: terminal.c,v 1.43 2020/07/10 20:34:24 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -1315,6 +1315,8 @@
        const struct termcapstr *ts;
        const struct termcapval *tv;
        char what[8], how[8];
+       long i;
+       char *ep;
 
        if (argv == NULL || argv[1] == NULL || argv[2] == NULL)
                return -1;
@@ -1341,11 +1343,17 @@
                if (strcmp(tv->name, what) == 0)
                        break;
 
-       if (tv->name != NULL)
+       if (tv->name == NULL) {
+               (void) fprintf(el->el_errfile,
+                   "%ls: Bad capability `%s'.\n", argv[0], what);
                return -1;
+       }
 
        if (tv == &tval[T_pt] || tv == &tval[T_km] ||
            tv == &tval[T_am] || tv == &tval[T_xn]) {
+               /*
+                * Booleans
+                */
                if (strcmp(how, "yes") == 0)
                        el->el_terminal.t_val[tv - tval] = 1;
                else if (strcmp(how, "no") == 0)
@@ -1356,28 +1364,30 @@
                        return -1;
                }
                terminal_setflags(el);
-               if (terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
-                       return -1;
-               return 0;
-       } else {
-               long i;
-               char *ep;
-
-               i = strtol(how, &ep, 10);
-               if (*ep != '\0') {
-                       (void) fprintf(el->el_errfile,
-                           "%ls: Bad value `%s'.\n", argv[0], how);
-                       return -1;
-               }
-               el->el_terminal.t_val[tv - tval] = (int) i;
-               el->el_terminal.t_size.v = Val(T_co);
-               el->el_terminal.t_size.h = Val(T_li);
-               if (tv == &tval[T_co] || tv == &tval[T_li])
-                       if (terminal_change_size(el, Val(T_li), Val(T_co))
-                           == -1)
-                               return -1;
                return 0;
        }
+
+       /*
+        * Numerics
+        */
+       i = strtol(how, &ep, 10);
+       if (*ep != '\0') {
+               (void) fprintf(el->el_errfile,
+                   "%ls: Bad value `%s'.\n", argv[0], how);
+               return -1;
+       }
+       el->el_terminal.t_val[tv - tval] = (int) i;
+       i = 0;
+       if (tv == &tval[T_co]) {
+               el->el_terminal.t_size.v = Val(T_co);
+               i++;
+       } else if (tv == &tval[T_li]) {
+               el->el_terminal.t_size.h = Val(T_li);
+               i++;
+       }
+       if (i && terminal_change_size(el, Val(T_li), Val(T_co)) == -1)
+               return -1;
+       return 0;
 }
 
 



Home | Main Index | Thread Index | Old Index