base85.c: Added support for py3k.
This patch adds support for py3k in base85.c. This is accomplished by including
a header file responsible for abstracting the API differences between python 2
and python 3.
--- a/mercurial/base85.c Tue Jun 15 19:49:56 2010 -0300
+++ b/mercurial/base85.c Tue Jun 15 19:49:56 2010 -0300
@@ -11,6 +11,8 @@
#include <Python.h>
+#include "util.h"
+
static const char b85chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~";
static char b85dec[256];
@@ -46,10 +48,10 @@
olen++;
olen += len / 4 * 5;
}
- if (!(out = PyString_FromStringAndSize(NULL, olen + 3)))
+ if (!(out = PyBytes_FromStringAndSize(NULL, olen + 3)))
return NULL;
- dst = PyString_AS_STRING(out);
+ dst = PyBytes_AsString(out);
while (len) {
acc = 0;
@@ -68,7 +70,7 @@
}
if (!pad)
- _PyString_Resize(&out, olen);
+ _PyBytes_Resize(&out, olen);
return out;
}
@@ -89,10 +91,10 @@
i = len % 5;
if (i)
olen += i - 1;
- if (!(out = PyString_FromStringAndSize(NULL, olen)))
+ if (!(out = PyBytes_FromStringAndSize(NULL, olen)))
return NULL;
- dst = PyString_AS_STRING(out);
+ dst = PyBytes_AsString(out);
i = 0;
while (i < len)
@@ -153,9 +155,26 @@
{NULL, NULL}
};
+#ifdef IS_PY3K
+static struct PyModuleDef base85_module = {
+ PyModuleDef_HEAD_INIT,
+ "base85",
+ base85_doc,
+ -1,
+ methods
+};
+
+PyMODINIT_FUNC PyInit_base85(void)
+{
+ b85prep();
+
+ return PyModule_Create(&base85_module);
+}
+#else
PyMODINIT_FUNC initbase85(void)
{
Py_InitModule3("base85", methods, base85_doc);
b85prep();
}
+#endif