base85.c: Added support for py3k.
authorRenato Cunha <renatoc@gmail.com>
Tue, 15 Jun 2010 19:49:56 -0300
changeset 11362 f42ef9493fa9
parent 11361 3de3d670d2b6
child 11363 f50103035c38
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.
mercurial/base85.c
--- 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