Source-Changes-HG archive

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

[src/trunk]: src/lib/libcurses Move calls to __restore_termios() into the fai...



details:   https://anonhg.NetBSD.org/src/rev/81ec28e5bae6
branches:  trunk
changeset: 748692:81ec28e5bae6
user:      dsl <dsl%NetBSD.org@localhost>
date:      Sun Nov 01 22:11:27 2009 +0000

description:
Move calls to __restore_termios() into the failing path of the functions
that fail - instead of in most of the callers.
All rather pointless if tcsetattr() fails to set the mode we want we
are very unlikely to be able to restore any later on.

diffstat:

 lib/libcurses/get_wch.c |  20 ++++++--------------
 lib/libcurses/getch.c   |  24 +++++++-----------------
 lib/libcurses/tty.c     |  31 +++++++++++++++++++++++--------
 3 files changed, 36 insertions(+), 39 deletions(-)

diffs (196 lines):

diff -r e234d83529fd -r 81ec28e5bae6 lib/libcurses/get_wch.c
--- a/lib/libcurses/get_wch.c   Sun Nov 01 22:08:14 2009 +0000
+++ b/lib/libcurses/get_wch.c   Sun Nov 01 22:11:27 2009 +0000
@@ -1,4 +1,4 @@
-/*   $NetBSD: get_wch.c,v 1.6 2008/04/14 20:33:59 jdc Exp $ */
+/*   $NetBSD: get_wch.c,v 1.7 2009/11/01 22:11:27 dsl Exp $ */
 
 /*
  * Copyright (c) 2005 The NetBSD Foundation Inc.
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: get_wch.c,v 1.6 2008/04/14 20:33:59 jdc Exp $");
+__RCSID("$NetBSD: get_wch.c,v 1.7 2009/11/01 22:11:27 dsl Exp $");
 #endif                                           /* not lint */
 
 #include <string.h>
@@ -557,10 +557,8 @@
                                        win->flags & __NOTIMEOUT ? 0 : 1, 0);
                                break;
                        case 0:
-                               if (__nodelay() == ERR) {
-                                       __restore_termios();
+                               if (__nodelay() == ERR)
                                        return ERR;
-                               }
                                ret = inkey(&inp, 0, 0);
                                break;
                        default:
@@ -576,16 +574,12 @@
                        case -1:
                                break;
                        case 0:
-                               if (__nodelay() == ERR) {
-                                       __restore_termios();
+                               if (__nodelay() == ERR)
                                        return ERR;
-                               }
                                break;
                        default:
-                               if (__timeout(win->delay) == ERR) {
-                                       __restore_termios();
+                               if (__timeout(win->delay) == ERR)
                                        return ERR;
-                               }
                                break;
                }
 
@@ -616,10 +610,8 @@
                __CTRACE(__CTRACE_INPUT, "wget_wch got '%s'\n", unctrl(inp));
 #endif
        if (win->delay > -1) {
-               if (__delay() == ERR) {
-                       __restore_termios();
+               if (__delay() == ERR)
                        return ERR;
-               }
        }
 
        __restore_termios();
diff -r e234d83529fd -r 81ec28e5bae6 lib/libcurses/getch.c
--- a/lib/libcurses/getch.c     Sun Nov 01 22:08:14 2009 +0000
+++ b/lib/libcurses/getch.c     Sun Nov 01 22:11:27 2009 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: getch.c,v 1.52 2009/02/09 12:45:59 jdc Exp $   */
+/*     $NetBSD: getch.c,v 1.53 2009/11/01 22:11:27 dsl Exp $   */
 
 /*
  * Copyright (c) 1981, 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)getch.c    8.2 (Berkeley) 5/4/94";
 #else
-__RCSID("$NetBSD: getch.c,v 1.52 2009/02/09 12:45:59 jdc Exp $");
+__RCSID("$NetBSD: getch.c,v 1.53 2009/11/01 22:11:27 dsl Exp $");
 #endif
 #endif                                 /* not lint */
 
@@ -844,10 +844,8 @@
                        inp = inkey (win->flags & __NOTIMEOUT ? 0 : 1, 0);
                        break;
                case 0:
-                       if (__nodelay() == ERR) {
-                               __restore_termios();
+                       if (__nodelay() == ERR)
                                return ERR;
-                       }
                        inp = inkey(0, 0);
                        break;
                default:
@@ -858,22 +856,16 @@
                switch (win->delay)
                {
                case -1:
-                       if (__delay() == ERR) {
-                               __restore_termios();
+                       if (__delay() == ERR)
                                return ERR;
-                       }
                        break;
                case 0:
-                       if (__nodelay() == ERR) {
-                               __restore_termios();
+                       if (__nodelay() == ERR)
                                return ERR;
-                       }
                        break;
                default:
-                       if (__timeout(win->delay) == ERR) {
-                               __restore_termios();
+                       if (__timeout(win->delay) == ERR)
                                return ERR;
-                       }
                        break;
                }
 
@@ -902,10 +894,8 @@
                __CTRACE(__CTRACE_INPUT, "wgetch got '%s'\n", unctrl(inp));
 #endif
        if (win->delay > -1) {
-               if (__delay() == ERR) {
-                       __restore_termios();
+               if (__delay() == ERR)
                        return ERR;
-               }
        }
 
        __restore_termios();
diff -r e234d83529fd -r 81ec28e5bae6 lib/libcurses/tty.c
--- a/lib/libcurses/tty.c       Sun Nov 01 22:08:14 2009 +0000
+++ b/lib/libcurses/tty.c       Sun Nov 01 22:11:27 2009 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tty.c,v 1.40 2007/05/28 15:01:58 blymn Exp $   */
+/*     $NetBSD: tty.c,v 1.41 2009/11/01 22:11:27 dsl Exp $     */
 
 /*-
  * Copyright (c) 1992, 1993, 1994
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)tty.c      8.6 (Berkeley) 1/10/95";
 #else
-__RCSID("$NetBSD: tty.c,v 1.40 2007/05/28 15:01:58 blymn Exp $");
+__RCSID("$NetBSD: tty.c,v 1.41 2009/11/01 22:11:27 dsl Exp $");
 #endif
 #endif                         /* not lint */
 
@@ -302,8 +302,13 @@
        _cursesi_screen->baset.c_cc[VMIN] = 1;
        _cursesi_screen->baset.c_cc[VTIME] = 0;
 
-       return (tcsetattr(fileno(_cursesi_screen->infd), __tcaction ?
-               TCSASOFT : TCSANOW, _cursesi_screen->curt) ? ERR : OK);
+       if (tcsetattr(fileno(_cursesi_screen->infd), __tcaction ?
+           TCSASOFT : TCSANOW, _cursesi_screen->curt)) {
+               __restore_termios();
+               return ERR;
+       }
+
+       return OK;
 }
 
 int
@@ -325,8 +330,13 @@
        _cursesi_screen->baset.c_cc[VMIN] = 0;
        _cursesi_screen->baset.c_cc[VTIME] = 0;
 
-       return (tcsetattr(fileno(_cursesi_screen->infd), __tcaction ?
-               TCSASOFT : TCSANOW, _cursesi_screen->curt) ? ERR : OK);
+       if (tcsetattr(fileno(_cursesi_screen->infd), __tcaction ?
+           TCSASOFT : TCSANOW, _cursesi_screen->curt)) {
+               __restore_termios();
+               return ERR;
+       }
+
+       return OK;
 }
 
 void
@@ -380,9 +390,14 @@
        _cursesi_screen->baset.c_cc[VMIN] = 0;
        _cursesi_screen->baset.c_cc[VTIME] = delay;
 
-       return (tcsetattr(fileno(_cursesi_screen->infd),
+       if (tcsetattr(fileno(_cursesi_screen->infd),
                          __tcaction ? TCSASOFT | TCSANOW : TCSANOW,
-                         _cursesi_screen->curt) ? ERR : OK);
+                         _cursesi_screen->curt)) {
+               __restore_termios();
+               return ERR;
+       }
+
+       return OK;
 }
 
 int



Home | Main Index | Thread Index | Old Index