bpo-40943: Replace PY_FORMAT_SIZE_T with "z" (GH-20781)
The PEP 353, written in 2005, introduced PY_FORMAT_SIZE_T. Python no
longer supports macOS 10.4 and Visual Studio 2010, but requires more
recent macOS and Visual Studio versions. In 2020 with Python 3.10, it
is now safe to use directly "%zu" to format size_t and "%zi" to
format Py_ssize_t.
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 8d64540..b79c246 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -256,27 +256,29 @@
}
case 'd':
- if (longflag)
+ if (longflag) {
sprintf(buffer, "%ld", va_arg(vargs, long));
- else if (size_tflag)
- sprintf(buffer, "%" PY_FORMAT_SIZE_T "d",
- va_arg(vargs, Py_ssize_t));
- else
+ }
+ else if (size_tflag) {
+ sprintf(buffer, "%zd", va_arg(vargs, Py_ssize_t));
+ }
+ else {
sprintf(buffer, "%d", va_arg(vargs, int));
+ }
assert(strlen(buffer) < sizeof(buffer));
WRITE_BYTES(buffer);
break;
case 'u':
- if (longflag)
- sprintf(buffer, "%lu",
- va_arg(vargs, unsigned long));
- else if (size_tflag)
- sprintf(buffer, "%" PY_FORMAT_SIZE_T "u",
- va_arg(vargs, size_t));
- else
- sprintf(buffer, "%u",
- va_arg(vargs, unsigned int));
+ if (longflag) {
+ sprintf(buffer, "%lu", va_arg(vargs, unsigned long));
+ }
+ else if (size_tflag) {
+ sprintf(buffer, "%zu", va_arg(vargs, size_t));
+ }
+ else {
+ sprintf(buffer, "%u", va_arg(vargs, unsigned int));
+ }
assert(strlen(buffer) < sizeof(buffer));
WRITE_BYTES(buffer);
break;
diff --git a/Objects/object.c b/Objects/object.c
index 623ee52..10cbd1b 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -66,8 +66,7 @@
void
_PyDebug_PrintTotalRefs(void) {
fprintf(stderr,
- "[%" PY_FORMAT_SIZE_T "d refs, "
- "%" PY_FORMAT_SIZE_T "d blocks]\n",
+ "[%zd refs, %zd blocks]\n",
_Py_GetRefTotal(), _Py_GetAllocatedBlocks());
}
#endif /* Py_REF_DEBUG */
@@ -1876,9 +1875,10 @@
PyObject *op;
fprintf(fp, "Remaining objects:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
- fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, Py_REFCNT(op));
- if (PyObject_Print(op, fp, 0) != 0)
+ fprintf(fp, "%p [%zd] ", (void *)op, Py_REFCNT(op));
+ if (PyObject_Print(op, fp, 0) != 0) {
PyErr_Clear();
+ }
putc('\n', fp);
}
}
@@ -1892,7 +1892,7 @@
PyObject *op;
fprintf(fp, "Remaining object addresses:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
- fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,
+ fprintf(fp, "%p [%zd] %s\n", (void *)op,
Py_REFCNT(op), Py_TYPE(op)->tp_name);
}
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index eb34f10..03d0e8e 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -2420,8 +2420,7 @@
fprintf(stderr, " API '%c'\n", id);
nbytes = read_size_t(q - 2*SST);
- fprintf(stderr, " %" PY_FORMAT_SIZE_T "u bytes originally "
- "requested\n", nbytes);
+ fprintf(stderr, " %zu bytes originally requested\n", nbytes);
/* In case this is nuts, check the leading pad bytes first. */
fprintf(stderr, " The %d pad bytes at p-%d are ", SST-1, SST-1);
@@ -2477,8 +2476,9 @@
#ifdef PYMEM_DEBUG_SERIALNO
size_t serial = read_size_t(tail + SST);
- fprintf(stderr, " The block was made by call #%" PY_FORMAT_SIZE_T
- "u to debug malloc/realloc.\n", serial);
+ fprintf(stderr,
+ " The block was made by call #%zu to debug malloc/realloc.\n",
+ serial);
#endif
if (nbytes > 0) {
@@ -2553,7 +2553,7 @@
char buf1[128];
char buf2[128];
PyOS_snprintf(buf1, sizeof(buf1),
- "%d %ss * %" PY_FORMAT_SIZE_T "d bytes each",
+ "%d %ss * %zd bytes each",
num_blocks, block_name, sizeof_block);
PyOS_snprintf(buf2, sizeof(buf2),
"%48s ", buf1);
@@ -2694,10 +2694,7 @@
assert(b == 0 && f == 0);
continue;
}
- fprintf(out, "%5u %6u "
- "%11" PY_FORMAT_SIZE_T "u "
- "%15" PY_FORMAT_SIZE_T "u "
- "%13" PY_FORMAT_SIZE_T "u\n",
+ fprintf(out, "%5u %6u %11zu %15zu %13zu\n",
i, size, p, b, f);
allocated_bytes += b * size;
available_bytes += f * size;
@@ -2716,8 +2713,8 @@
(void)printone(out, "# arenas allocated current", narenas);
PyOS_snprintf(buf, sizeof(buf),
- "%" PY_FORMAT_SIZE_T "u arenas * %d bytes/arena",
- narenas, ARENA_SIZE);
+ "%zu arenas * %d bytes/arena",
+ narenas, ARENA_SIZE);
(void)printone(out, buf, narenas * ARENA_SIZE);
fputc('\n', out);
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index df10888..7ab0c88 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1356,19 +1356,18 @@
}
else
data = unicode->data.any;
- printf("%s: len=%" PY_FORMAT_SIZE_T "u, ",
- unicode_kind_name(op), ascii->length);
+ printf("%s: len=%zu, ", unicode_kind_name(op), ascii->length);
if (ascii->wstr == data)
printf("shared ");
printf("wstr=%p", (void *)ascii->wstr);
if (!(ascii->state.ascii == 1 && ascii->state.compact == 1)) {
- printf(" (%" PY_FORMAT_SIZE_T "u), ", compact->wstr_length);
- if (!ascii->state.compact && compact->utf8 == unicode->data.any)
+ printf(" (%zu), ", compact->wstr_length);
+ if (!ascii->state.compact && compact->utf8 == unicode->data.any) {
printf("shared ");
- printf("utf8=%p (%" PY_FORMAT_SIZE_T "u)",
- (void *)compact->utf8, compact->utf8_length);
+ }
+ printf("utf8=%p (%zu)", (void *)compact->utf8, compact->utf8_length);
}
printf(", data=%p\n", data);
}
@@ -2845,35 +2844,35 @@
Py_ssize_t arglen;
if (*f == 'u') {
- if (longflag)
- len = sprintf(buffer, "%lu",
- va_arg(*vargs, unsigned long));
- else if (longlongflag)
- len = sprintf(buffer, "%llu",
- va_arg(*vargs, unsigned long long));
- else if (size_tflag)
- len = sprintf(buffer, "%" PY_FORMAT_SIZE_T "u",
- va_arg(*vargs, size_t));
- else
- len = sprintf(buffer, "%u",
- va_arg(*vargs, unsigned int));
+ if (longflag) {
+ len = sprintf(buffer, "%lu", va_arg(*vargs, unsigned long));
+ }
+ else if (longlongflag) {
+ len = sprintf(buffer, "%llu", va_arg(*vargs, unsigned long long));
+ }
+ else if (size_tflag) {
+ len = sprintf(buffer, "%zu", va_arg(*vargs, size_t));
+ }
+ else {
+ len = sprintf(buffer, "%u", va_arg(*vargs, unsigned int));
+ }
}
else if (*f == 'x') {
len = sprintf(buffer, "%x", va_arg(*vargs, int));
}
else {
- if (longflag)
- len = sprintf(buffer, "%li",
- va_arg(*vargs, long));
- else if (longlongflag)
- len = sprintf(buffer, "%lli",
- va_arg(*vargs, long long));
- else if (size_tflag)
- len = sprintf(buffer, "%" PY_FORMAT_SIZE_T "i",
- va_arg(*vargs, Py_ssize_t));
- else
- len = sprintf(buffer, "%i",
- va_arg(*vargs, int));
+ if (longflag) {
+ len = sprintf(buffer, "%li", va_arg(*vargs, long));
+ }
+ else if (longlongflag) {
+ len = sprintf(buffer, "%lli", va_arg(*vargs, long long));
+ }
+ else if (size_tflag) {
+ len = sprintf(buffer, "%zi", va_arg(*vargs, Py_ssize_t));
+ }
+ else {
+ len = sprintf(buffer, "%i", va_arg(*vargs, int));
+ }
}
assert(len >= 0);
@@ -15657,8 +15656,7 @@
Py_ssize_t n = PyList_GET_SIZE(keys);
#ifdef INTERNED_STATS
- fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
- n);
+ fprintf(stderr, "releasing %zd interned strings\n", n);
Py_ssize_t immortal_size = 0, mortal_size = 0;
#endif
@@ -15688,9 +15686,9 @@
_PyUnicode_STATE(s).interned = SSTATE_NOT_INTERNED;
}
#ifdef INTERNED_STATS
- fprintf(stderr, "total size of all interned strings: "
- "%" PY_FORMAT_SIZE_T "d/%" PY_FORMAT_SIZE_T "d "
- "mortal/immortal\n", mortal_size, immortal_size);
+ fprintf(stderr,
+ "total size of all interned strings: %zd/%zd mortal/immortal\n",
+ mortal_size, immortal_size);
#endif
Py_DECREF(keys);
PyDict_Clear(interned);