py3: bulk-replace bytes format specifier passed to Py_BuildValue()
On Python 3, "s" means a utf-8 string. We have to use "y" for bytes, sigh.
https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue
Substituted using the following pattern with some manual fixes:
'\b(Py_BuildValue)\((\s*)"([^"]+)"'
--- a/mercurial/cext/manifest.c Sat Mar 03 05:58:41 2018 -0500
+++ b/mercurial/cext/manifest.c Sat Mar 03 06:08:22 2018 -0500
@@ -718,7 +718,8 @@
Py_INCREF(self->pydata);
for (i = 0; i < self->numlines; i++) {
PyObject *arglist = NULL, *result = NULL;
- arglist = Py_BuildValue("(s)", self->lines[i].start);
+ arglist = Py_BuildValue(PY23("(s)", "(y)"),
+ self->lines[i].start);
if (!arglist) {
return NULL;
}
--- a/mercurial/cext/osutil.c Sat Mar 03 05:58:41 2018 -0500
+++ b/mercurial/cext/osutil.c Sat Mar 03 06:08:22 2018 -0500
@@ -184,7 +184,7 @@
? _S_IFDIR : _S_IFREG;
if (!wantstat)
- return Py_BuildValue("si", fd->cFileName, kind);
+ return Py_BuildValue(PY23("si", "yi"), fd->cFileName, kind);
py_st = PyObject_CallObject((PyObject *)&listdir_stat_type, NULL);
if (!py_st)
@@ -202,7 +202,7 @@
if (kind == _S_IFREG)
stp->st_size = ((__int64)fd->nFileSizeHigh << 32)
+ fd->nFileSizeLow;
- return Py_BuildValue("siN", fd->cFileName,
+ return Py_BuildValue(PY23("siN", "yiN"), fd->cFileName,
kind, py_st);
}
@@ -390,9 +390,11 @@
stat = makestat(&st);
if (!stat)
goto error;
- elem = Py_BuildValue("siN", ent->d_name, kind, stat);
+ elem = Py_BuildValue(PY23("siN", "yiN"), ent->d_name,
+ kind, stat);
} else
- elem = Py_BuildValue("si", ent->d_name, kind);
+ elem = Py_BuildValue(PY23("si", "yi"), ent->d_name,
+ kind);
if (!elem)
goto error;
stat = NULL;
@@ -570,9 +572,11 @@
stat = makestat(&st);
if (!stat)
goto error;
- elem = Py_BuildValue("siN", filename, kind, stat);
+ elem = Py_BuildValue(PY23("siN", "yiN"),
+ filename, kind, stat);
} else
- elem = Py_BuildValue("si", filename, kind);
+ elem = Py_BuildValue(PY23("si", "yi"),
+ filename, kind);
if (!elem)
goto error;
stat = NULL;
@@ -1108,7 +1112,7 @@
r = statfs(path, &buf);
if (r != 0)
return PyErr_SetFromErrno(PyExc_OSError);
- return Py_BuildValue("s", describefstype(&buf));
+ return Py_BuildValue(PY23("s", "y"), describefstype(&buf));
}
#endif /* defined(HAVE_LINUX_STATFS) || defined(HAVE_BSD_STATFS) */
@@ -1126,7 +1130,7 @@
r = statfs(path, &buf);
if (r != 0)
return PyErr_SetFromErrno(PyExc_OSError);
- return Py_BuildValue("s", buf.f_mntonname);
+ return Py_BuildValue(PY23("s", "y"), buf.f_mntonname);
}
#endif /* defined(HAVE_BSD_STATFS) */
--- a/mercurial/cext/parsers.c Sat Mar 03 05:58:41 2018 -0500
+++ b/mercurial/cext/parsers.c Sat Mar 03 06:08:22 2018 -0500
@@ -254,7 +254,7 @@
goto quit;
}
- parents = Py_BuildValue("s#s#", str, 20, str + 20, 20);
+ parents = Py_BuildValue(PY23("s#s#", "y#y#"), str, 20, str + 20, 20);
if (!parents)
goto quit;
--- a/mercurial/cext/revlog.c Sat Mar 03 05:58:41 2018 -0500
+++ b/mercurial/cext/revlog.c Sat Mar 03 06:08:22 2018 -0500
@@ -87,9 +87,9 @@
static Py_ssize_t inline_scan(indexObject *self, const char **offsets);
#if LONG_MAX == 0x7fffffffL
-static char *tuple_format = "Kiiiiiis#";
+static char *tuple_format = PY23("Kiiiiiis#", "Kiiiiiiy#");
#else
-static char *tuple_format = "kiiiiiis#";
+static char *tuple_format = PY23("kiiiiiis#", "kiiiiiiy#");
#endif
/* A RevlogNG v1 index entry is 64 bytes long. */
@@ -2077,7 +2077,7 @@
Py_INCREF(&indexType);
PyModule_AddObject(mod, "index", (PyObject *)&indexType);
- nullentry = Py_BuildValue("iiiiiiis#", 0, 0, 0,
+ nullentry = Py_BuildValue(PY23("iiiiiiis#", "iiiiiiiy#"), 0, 0, 0,
-1, -1, -1, -1, nullid, 20);
if (nullentry)
PyObject_GC_UnTrack(nullentry);