From: Andrew M. Kuchling <amk@amk.ca>
Date: Tue, 27 Jun 2000 00:50:40 +0000 (+0000)
Subject: Drop back to old version of wrapper(); ESR reports that it broke things,
X-Git-Tag: v2.0b1~1404
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f790fe4598e2b9d26ef4323b5acc7479470a4c4;p=python

Drop back to old version of wrapper(); ESR reports that it broke things,
and I lack the time to track down the cause.
---

diff --git a/Lib/curses/wrapper.py b/Lib/curses/wrapper.py
index fd8804d9f2..cd3008616f 100644
--- a/Lib/curses/wrapper.py
+++ b/Lib/curses/wrapper.py
@@ -17,9 +17,11 @@ def wrapper(func, *rest):
     wrapper().
     """
     
+    res = None
     try:
 	# Initialize curses
 	stdscr=curses.initscr()
+        
 	# Turn off echoing of keys, and enter cbreak mode,
 	# where no buffering is performed on keyboard input
 	curses.noecho() ; curses.cbreak()
@@ -29,11 +31,21 @@ def wrapper(func, *rest):
 	# a special value like curses.KEY_LEFT will be returned
         stdscr.keypad(1)
 
-	return apply(func, (stdscr,) + rest)
-
-    finally:
-	# Restore the terminal to a sane state on the way out.
+        res = apply(func, (stdscr,) + rest)
+    except:
+	# In the event of an error, restore the terminal
+	# to a sane state.
 	stdscr.keypad(0)
 	curses.echo() ; curses.nocbreak()
 	curses.endwin()
+        
+        # Pass the exception upwards
+        (exc_type, exc_value, exc_traceback) = sys.exc_info()
+        raise exc_type, exc_value, exc_traceback
+    else:
+	# Set everything back to normal
+	stdscr.keypad(0)
+	curses.echo() ; curses.nocbreak()
+	curses.endwin()		 # Terminate curses
 
+        return res