diff Python/sysmodule.c @ 21145:87fa6e9bd77e legacy-trunk

mysnprintf.c: Massive rewrite of PyOS_snprintf and PyOS_vsnprintf, to use wrappers on all platforms, to make this as consistent as possible x- platform (in particular, make sure there's at least one \0 byte in the output buffer). Also document more of the truth about what these do. getargs.c, seterror(): Three computations of remaining buffer size were backwards, thus telling PyOS_snprintf the buffer is larger than it actually is. This matters a lot now that PyOS_snprintf ensures there's a trailing \0 byte (because it didn't get the truth about the buffer size, it was storing \0 beyond the true end of the buffer). sysmodule.c, mywrite(): Simplify, now that PyOS_vsnprintf guarantees to produce a \0 byte.
author Tim Peters <tim.peters@gmail.com>
date Mon, 03 Dec 2001 00:43:33 +0000
parents dd28a4ecb37f
children c64fc56f6072
line wrap: on
line diff
--- a/Python/sysmodule.c	Mon Dec 03 00:37:28 2001 +0000
+++ b/Python/sysmodule.c	Mon Dec 03 00:43:33 2001 +0000
@@ -1025,18 +1025,11 @@
 		char buffer[1001];
 		const int written = PyOS_vsnprintf(buffer, sizeof(buffer),
 						   format, va);
-		const int trouble = written < 0 || written >= sizeof(buffer);
-		if (trouble) {
-			/* Ensure there's a trailing null byte -- MS
-			   vsnprintf fills the buffer to the very end
-			   if it's not big enough. */
-			buffer[sizeof(buffer) - 1] = '\0';
-		}
 		if (PyFile_WriteString(buffer, file) != 0) {
 			PyErr_Clear();
 			fputs(buffer, fp);
 		}
-		if (trouble) {
+		if (written < 0 || written >= sizeof(buffer)) {
 			const char *truncated = "... truncated";
 			if (PyFile_WriteString(truncated, file) != 0) {
 				PyErr_Clear();