summaryrefslogtreecommitdiffstats
path: root/Parser/myreadline.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-12-16 11:28:32 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-12-16 11:28:32 (GMT)
commitc345ce1a69b3c4a46d87ef56d859bc70abfc74b4 (patch)
tree5481a8c3e31ae8a423aed9199a1fe2b22694d1c0 /Parser/myreadline.c
parent87448819abd4900bcb36857c6706d8562c97a099 (diff)
downloadcpython-c345ce1a69b3c4a46d87ef56d859bc70abfc74b4.zip
cpython-c345ce1a69b3c4a46d87ef56d859bc70abfc74b4.tar.gz
cpython-c345ce1a69b3c4a46d87ef56d859bc70abfc74b4.tar.bz2
Issue #10350: Read and save errno before calling a function which might overwrite it.
Original patch by Hallvard B Furuseth.
Diffstat (limited to 'Parser/myreadline.c')
-rw-r--r--Parser/myreadline.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index fb4b805..33d5b3d 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);