summaryrefslogtreecommitdiff
path: root/Parser
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-12-16 12:29:37 +0100
committerAntoine Pitrou <solipsis@pitrou.net>2011-12-16 12:29:37 +0100
commitb0d3a6b35e22df2aeaaa210f10078a42e0063f60 (patch)
treeb0e455c34accbfa95ddab7883640488fd3668db8 /Parser
parent6e84b342987329083f45dfc6c50a0b3b88ef67d9 (diff)
parent732f2346b552418351e9c1f9ac60f78e4b6282a8 (diff)
downloadcpython-b0d3a6b35e22df2aeaaa210f10078a42e0063f60.tar.gz
Issue #10350: Read and save errno before calling a function which might overwrite it.
Original patch by Hallvard B Furuseth.
Diffstat (limited to 'Parser')
-rw-r--r--Parser/myreadline.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index fb4b805e20..33d5b3d4cc 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -36,6 +36,7 @@ static int
my_fgets(char *buf, int len, FILE *fp)
{
char *p;
+ int err;
while (1) {
if (PyOS_InputHook != NULL)
(void)(PyOS_InputHook)();
@@ -44,6 +45,7 @@ my_fgets(char *buf, int len, FILE *fp)
p = fgets(buf, len, fp);
if (p != NULL)
return 0; /* No error */
+ err = errno;
#ifdef MS_WINDOWS
/* In the case of a Ctrl+C or some other external event
interrupting the operation:
@@ -78,7 +80,7 @@ my_fgets(char *buf, int len, FILE *fp)
return -1; /* EOF */
}
#ifdef EINTR
- if (errno == EINTR) {
+ if (err == EINTR) {
int s;
#ifdef WITH_THREAD
PyEval_RestoreThread(_PyOS_ReadlineTState);