diff Python/getargs.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 0feac45ee662
children 608735dd2ebc 0d3bb68e3a28
line wrap: on
line diff
--- a/Python/getargs.c	Mon Dec 03 00:37:28 2001 +0000
+++ b/Python/getargs.c	Mon Dec 03 00:43:33 2001 +0000
@@ -231,7 +231,7 @@
 			p += strlen(p);
 		}
 		if (iarg != 0) {
-			PyOS_snprintf(p, sizeof(buf) - (buf - p),
+			PyOS_snprintf(p, sizeof(buf) - (p - buf),
 				      "argument %d", iarg);
 			i = 0;
 			p += strlen(p);
@@ -243,10 +243,10 @@
 			}
 		}
 		else {
-			PyOS_snprintf(p, sizeof(buf) - (buf - p), "argument");
+			PyOS_snprintf(p, sizeof(buf) - (p - buf), "argument");
 			p += strlen(p);
 		}
-		PyOS_snprintf(p, sizeof(buf) - (buf - p), " %.256s", msg);
+		PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg);
 		message = buf;
 	}
 	PyErr_SetString(PyExc_TypeError, message);