Merged revisions 77952,78030,78102,78104,78107,78206,78216,78296-78297,78328,78331-78332,78336,78339,78343,78378-78379,78415,78559,78717,78791 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r77952 | mark.dickinson | 2010-02-03 10:50:14 -0600 (Wed, 03 Feb 2010) | 1 line

  Fix test_inspect.py data to match recent change to inspect_fodder.py (r77942).
........
  r78030 | benjamin.peterson | 2010-02-06 14:14:10 -0600 (Sat, 06 Feb 2010) | 1 line

  check type_getattro for correctness in a descriptor corner case
........
  r78102 | andrew.kuchling | 2010-02-07 19:35:35 -0600 (Sun, 07 Feb 2010) | 1 line

  Move distutils into its own subsection; add various items
........
  r78104 | andrew.kuchling | 2010-02-08 07:22:24 -0600 (Mon, 08 Feb 2010) | 1 line

  Add two items; move a subsection
........
  r78107 | antoine.pitrou | 2010-02-08 14:25:47 -0600 (Mon, 08 Feb 2010) | 3 lines

  Clarify and correct description for ccbench and iobench.
........
  r78206 | r.david.murray | 2010-02-16 11:55:26 -0600 (Tue, 16 Feb 2010) | 3 lines

  Make the references to Popen in the description of Call
  and check_call into links.
........
  r78216 | andrew.kuchling | 2010-02-18 08:16:48 -0600 (Thu, 18 Feb 2010) | 1 line

  Add various items
........
  r78296 | andrew.kuchling | 2010-02-21 20:08:45 -0600 (Sun, 21 Feb 2010) | 1 line

  Re-word
........
  r78297 | andrew.kuchling | 2010-02-21 20:29:10 -0600 (Sun, 21 Feb 2010) | 1 line

  #7076: mention SystemRandom class near start of the module docs; reword change description for clarity.  Noted by Shawn Ligocki.
........
  r78328 | jack.diederich | 2010-02-22 12:17:16 -0600 (Mon, 22 Feb 2010) | 1 line

  fixes issue #7530, serve_forever()
........
  r78331 | andrew.kuchling | 2010-02-22 12:38:23 -0600 (Mon, 22 Feb 2010) | 1 line

  Fix comment typo
........
  r78332 | andrew.kuchling | 2010-02-22 12:42:07 -0600 (Mon, 22 Feb 2010) | 2 lines

  #7627: MH.remove() would fail if the MH mailbox was locked;
  it would call _unlock_file() and pass it a closed file object.  Noted by Rob Austein.
........
  r78336 | jack.diederich | 2010-02-22 13:55:22 -0600 (Mon, 22 Feb 2010) | 1 line

  fixes issue #1522237, bad init check in _threading_local
........
  r78339 | jack.diederich | 2010-02-22 15:27:38 -0600 (Mon, 22 Feb 2010) | 1 line

  * fix issue#7476
........
  r78343 | andrew.kuchling | 2010-02-22 16:48:41 -0600 (Mon, 22 Feb 2010) | 10 lines

  #2560: remove an unnecessary 'for' loop from my_fgets() in Parser/myreadline.c.
  Noted by Joseph Armbruster; patch by Jessica McKellar.

  The original code was 'for (;;) {...}', where ... ended
  with a 'return -2' statement and did not contain a 'break' or 'continue'
  statement.  Therefore, the body of the loop is always executed once.

  Once upon a time there was a 'continue' in the loop, but it was removed in
  rev36346, committed by mwh on Wed Jul 7 17:44:12 2004.
........
  r78378 | jack.diederich | 2010-02-23 11:23:30 -0600 (Tue, 23 Feb 2010) | 1 line

  fixup markup error
........
  r78379 | jack.diederich | 2010-02-23 13:34:06 -0600 (Tue, 23 Feb 2010) | 1 line

   issue#6442 use in operator instead of has_key
........
  r78415 | dirkjan.ochtman | 2010-02-23 22:00:52 -0600 (Tue, 23 Feb 2010) | 1 line

  Issue #7733: add explicit reference in asyncore docs.
........
  r78559 | andrew.kuchling | 2010-03-01 13:45:21 -0600 (Mon, 01 Mar 2010) | 1 line

  #7637: update discussion of minidom.unlink() and garbage collection
........
  r78717 | benjamin.peterson | 2010-03-05 21:13:33 -0600 (Fri, 05 Mar 2010) | 1 line

  settscdump is definitely an implementation detail
........
  r78791 | andrew.kuchling | 2010-03-08 06:00:39 -0600 (Mon, 08 Mar 2010) | 1 line

  Add various items
........
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
index a144850..0d8394b 100644
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -36,66 +36,63 @@
 my_fgets(char *buf, int len, FILE *fp)
 {
 	char *p;
-	for (;;) {
-		if (PyOS_InputHook != NULL)
-			(void)(PyOS_InputHook)();
-		errno = 0;
-		p = fgets(buf, len, fp);
-		if (p != NULL)
-			return 0; /* No error */
+	if (PyOS_InputHook != NULL)
+		(void)(PyOS_InputHook)();
+	errno = 0;
+	p = fgets(buf, len, fp);
+	if (p != NULL)
+		return 0; /* No error */
 #ifdef MS_WINDOWS
-		/* In the case of a Ctrl+C or some other external event 
-		   interrupting the operation:
-		   Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32 
-		   error code (and feof() returns TRUE).
-		   Win9x: Ctrl+C seems to have no effect on fgets() returning
-		   early - the signal handler is called, but the fgets()
-		   only returns "normally" (ie, when Enter hit or feof())
+	/* In the case of a Ctrl+C or some other external event 
+	   interrupting the operation:
+	   Win2k/NT: ERROR_OPERATION_ABORTED is the most recent Win32 
+	   error code (and feof() returns TRUE).
+	   Win9x: Ctrl+C seems to have no effect on fgets() returning
+	   early - the signal handler is called, but the fgets()
+	   only returns "normally" (ie, when Enter hit or feof())
+	*/
+	if (GetLastError()==ERROR_OPERATION_ABORTED) {
+		/* Signals come asynchronously, so we sleep a brief 
+		   moment before checking if the handler has been 
+		   triggered (we cant just return 1 before the 
+		   signal handler has been called, as the later 
+		   signal may be treated as a separate interrupt).
 		*/
-		if (GetLastError()==ERROR_OPERATION_ABORTED) {
-			/* Signals come asynchronously, so we sleep a brief 
-			   moment before checking if the handler has been 
-			   triggered (we cant just return 1 before the 
-			   signal handler has been called, as the later 
-			   signal may be treated as a separate interrupt).
-			*/
-			Sleep(1);
-			if (PyOS_InterruptOccurred()) {
-				return 1; /* Interrupt */
-			}
-			/* Either the sleep wasn't long enough (need a
-			   short loop retrying?) or not interrupted at all
-			   (in which case we should revisit the whole thing!)
-			   Logging some warning would be nice.  assert is not
-			   viable as under the debugger, the various dialogs
-			   mean the condition is not true.
-			*/
-		}
-#endif /* MS_WINDOWS */
-		if (feof(fp)) {
-			return -1; /* EOF */
-		}
-#ifdef EINTR
-		if (errno == EINTR) {
-			int s;
-#ifdef WITH_THREAD
-			PyEval_RestoreThread(_PyOS_ReadlineTState);
-#endif
-			s = PyErr_CheckSignals();
-#ifdef WITH_THREAD
-			PyEval_SaveThread();
-#endif
-			if (s < 0) {
-				return 1;
-			}
-		}
-#endif
+		Sleep(1);
 		if (PyOS_InterruptOccurred()) {
 			return 1; /* Interrupt */
 		}
-		return -2; /* Error */
+		/* Either the sleep wasn't long enough (need a
+		   short loop retrying?) or not interrupted at all
+		   (in which case we should revisit the whole thing!)
+		   Logging some warning would be nice.  assert is not
+		   viable as under the debugger, the various dialogs
+		   mean the condition is not true.
+		*/
 	}
-	/* NOTREACHED */
+#endif /* MS_WINDOWS */
+	if (feof(fp)) {
+		return -1; /* EOF */
+	}
+#ifdef EINTR
+	if (errno == EINTR) {
+		int s;
+#ifdef WITH_THREAD
+		PyEval_RestoreThread(_PyOS_ReadlineTState);
+#endif
+		s = PyErr_CheckSignals();
+#ifdef WITH_THREAD
+		PyEval_SaveThread();
+#endif
+		if (s < 0) {
+			return 1;
+		}
+	}
+#endif
+	if (PyOS_InterruptOccurred()) {
+		return 1; /* Interrupt */
+	}
+	return -2; /* Error */
 }