[Python-checkins] python/dist/src/Parser myreadline.c,2.27,2.28 tokenizer.c,2.67,2.68

loewis@users.sourceforge.net loewis@users.sourceforge.net
Sat, 26 Oct 2002 07:39:12 -0700


Update of /cvsroot/python/python/dist/src/Parser
In directory usw-pr-cvs1:/tmp/cvs-serv26440/Parser

Modified Files:
	myreadline.c tokenizer.c 
Log Message:
Patch #512981: Update readline input stream on sys.stdin/out change.


Index: myreadline.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/myreadline.c,v
retrieving revision 2.27
retrieving revision 2.28
diff -C2 -d -r2.27 -r2.28
*** myreadline.c	14 Jul 2002 23:12:29 -0000	2.27
--- myreadline.c	26 Oct 2002 14:39:09 -0000	2.28
***************
*** 88,92 ****
  
  char *
! PyOS_StdioReadline(char *prompt)
  {
  	size_t n;
--- 88,92 ----
  
  char *
! PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
  {
  	size_t n;
***************
*** 95,99 ****
  	if ((p = PyMem_MALLOC(n)) == NULL)
  		return NULL;
! 	fflush(stdout);
  #ifndef RISCOS
  	if (prompt)
--- 95,99 ----
  	if ((p = PyMem_MALLOC(n)) == NULL)
  		return NULL;
! 	fflush(sys_stdout);
  #ifndef RISCOS
  	if (prompt)
***************
*** 108,112 ****
  #endif
  	fflush(stderr);
! 	switch (my_fgets(p, (int)n, stdin)) {
  	case 0: /* Normal case */
  		break;
--- 108,112 ----
  #endif
  	fflush(stderr);
! 	switch (my_fgets(p, (int)n, sys_stdin)) {
  	case 0: /* Normal case */
  		break;
***************
*** 136,140 ****
  			PyErr_SetString(PyExc_OverflowError, "input line too long");
  		}
! 		if (my_fgets(p+n, (int)incr, stdin) != 0)
  			break;
  		n += strlen(p+n);
--- 136,140 ----
  			PyErr_SetString(PyExc_OverflowError, "input line too long");
  		}
! 		if (my_fgets(p+n, (int)incr, sys_stdin) != 0)
  			break;
  		n += strlen(p+n);
***************
*** 149,153 ****
     Note: Python expects in return a buffer allocated with PyMem_Malloc. */
  
! char *(*PyOS_ReadlineFunctionPointer)(char *);
  
  
--- 149,153 ----
     Note: Python expects in return a buffer allocated with PyMem_Malloc. */
  
! char *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
  
  
***************
*** 155,166 ****
  
  char *
! PyOS_Readline(char *prompt)
  {
  	char *rv;
  	if (PyOS_ReadlineFunctionPointer == NULL) {
! 			PyOS_ReadlineFunctionPointer = PyOS_StdioReadline;
  	}
  	Py_BEGIN_ALLOW_THREADS
! 	rv = (*PyOS_ReadlineFunctionPointer)(prompt);
  	Py_END_ALLOW_THREADS
  	return rv;
--- 155,178 ----
  
  char *
! PyOS_Readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
  {
  	char *rv;
+ 
  	if (PyOS_ReadlineFunctionPointer == NULL) {
!                 PyOS_ReadlineFunctionPointer = PyOS_StdioReadline;
  	}
+ 
  	Py_BEGIN_ALLOW_THREADS
! 
!         /* This is needed to handle the unlikely case that the
!          * interpreter is in interactive mode *and* stdin/out are not
!          * a tty.  This can happen, for example if python is run like
!          * this: python -i < test1.py
!          */
!         if (!isatty (fileno (sys_stdin)) || !isatty (fileno (sys_stdout)))
!                 rv = PyOS_StdioReadline (sys_stdin, sys_stdout, prompt);
!         else
!                 rv = (*PyOS_ReadlineFunctionPointer)(sys_stdin, sys_stdout,
!                                                      prompt);
  	Py_END_ALLOW_THREADS
  	return rv;

Index: tokenizer.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Parser/tokenizer.c,v
retrieving revision 2.67
retrieving revision 2.68
diff -C2 -d -r2.67 -r2.68
*** tokenizer.c	3 Sep 2002 15:39:58 -0000	2.67
--- tokenizer.c	26 Oct 2002 14:39:09 -0000	2.68
***************
*** 19,23 ****
  #endif /* PGEN */
  
! extern char *PyOS_Readline(char *);
  /* Return malloc'ed string including trailing \n;
     empty malloc'ed string for EOF;
--- 19,23 ----
  #endif /* PGEN */
  
! extern char *PyOS_Readline(FILE *, FILE *, char *);
  /* Return malloc'ed string including trailing \n;
     empty malloc'ed string for EOF;
***************
*** 672,676 ****
  		}
  		if (tok->prompt != NULL) {
! 			char *new = PyOS_Readline(tok->prompt);
  			if (tok->nextprompt != NULL)
  				tok->prompt = tok->nextprompt;
--- 672,676 ----
  		}
  		if (tok->prompt != NULL) {
! 			char *new = PyOS_Readline(stdin, stdout, tok->prompt);
  			if (tok->nextprompt != NULL)
  				tok->prompt = tok->nextprompt;