diff options
author | Tushar Gohad <tushar.gohad@intel.com> | 2014-04-18 21:43:16 -0700 |
---|---|---|
committer | Tushar Gohad <tushar.gohad@intel.com> | 2014-04-18 21:44:37 -0700 |
commit | afa654de48c809d8306e98de62966f39d248bb26 (patch) | |
tree | 39363e5e9fa92dbef2cbc54b088c963970803535 | |
parent | baa01b642f4dedf99994ea961362dd81a3aae1e2 (diff) | |
download | pyeclib-afa654de48c809d8306e98de62966f39d248bb26.tar.gz |
Py_BuildValue() format args differ on Py2 vs Py3
Signed-off-by: Tushar Gohad <tushar.gohad@intel.com>
-rw-r--r-- | src/c/pyeclib_c/pyeclib_c.c | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/src/c/pyeclib_c/pyeclib_c.c b/src/c/pyeclib_c/pyeclib_c.c index abd7cf6..17cead6 100644 --- a/src/c/pyeclib_c/pyeclib_c.c +++ b/src/c/pyeclib_c/pyeclib_c.c @@ -41,6 +41,27 @@ #include<math.h> #include<pyeclib_c.h> +/* Python 3 compatibility macros */ +#if PY_MAJOR_VERSION >= 3 + #define MOD_ERROR_VAL NULL + #define MOD_SUCCESS_VAL(val) val + #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) + #define MOD_DEF(ob, name, doc, methods) \ + static struct PyModuleDef moduledef = { \ + PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \ + ob = PyModule_Create(&moduledef); + #define PY_BUILDVALUE_OBJ_LEN(obj, objlen) \ + Py_BuildValue("y#", obj, objlen) +#else + #define MOD_ERROR_VAL + #define MOD_SUCCESS_VAL(val) + #define MOD_INIT(name) void init##name(void) + #define MOD_DEF(ob, name, doc, methods) \ + ob = Py_InitModule3(name, methods, doc); + #define PY_BUILDVALUE_OBJ_LEN(obj, objlen) \ + Py_BuildValue("s#", obj, objlen) +#endif + /* * TODO (kmg): Cauchy restriction (k*w*PACKETSIZE) < data_len / k, otherwise you could @@ -934,7 +955,7 @@ pyeclib_c_encode(PyObject *self, PyObject *args) int chksum = crc32(0, data_to_encode[i], blocksize); set_chksum(fragment_ptr, chksum); } - PyList_SET_ITEM(list_of_strips, i, Py_BuildValue("s#", fragment_ptr, fragment_size)); + PyList_SET_ITEM(list_of_strips, i, PY_BUILDVALUE_OBJ_LEN(fragment_ptr, fragment_size)); free_fragment_buffer(data_to_encode[i]); } free(data_to_encode); @@ -948,7 +969,7 @@ pyeclib_c_encode(PyObject *self, PyObject *args) int chksum = crc32(0, encoded_parity[i], blocksize); set_chksum(fragment_ptr, chksum); } - PyList_SET_ITEM(list_of_strips, pyeclib_handle->k + i, Py_BuildValue("s#", fragment_ptr, fragment_size)); + PyList_SET_ITEM(list_of_strips, pyeclib_handle->k + i, PY_BUILDVALUE_OBJ_LEN(fragment_ptr, fragment_size)); free_fragment_buffer(encoded_parity[i]); } free(encoded_parity); @@ -1097,7 +1118,7 @@ pyeclib_c_fragments_to_string(PyObject *self, PyObject *args) string_off += payload_size; } - ret_string = Py_BuildValue("s#", ret_cstring, ret_data_size); + ret_string = PY_BUILDVALUE_OBJ_LEN(ret_cstring, ret_data_size); free(ret_cstring); out: @@ -1236,7 +1257,7 @@ pyeclib_c_get_fragment_partition(PyObject *self, PyObject *args) char *tmp_data = (char*)malloc(fragment_size); PyObject *zero_string; memset(tmp_data, 0, fragment_size); - zero_string = Py_BuildValue("s#", tmp_data, fragment_size); + zero_string = PY_BUILDVALUE_OBJ_LEN(tmp_data, fragment_size); //Py_INCREF(zero_string); PyList_SET_ITEM(data_list, i, zero_string); free(tmp_data); @@ -1258,7 +1279,7 @@ pyeclib_c_get_fragment_partition(PyObject *self, PyObject *args) char *tmp_parity = (char*)malloc(fragment_size); PyObject *zero_string; memset(tmp_parity, 0, fragment_size); - zero_string = Py_BuildValue("s#", tmp_parity, fragment_size); + zero_string = PY_BUILDVALUE_OBJ_LEN(tmp_parity, fragment_size); //Py_INCREF(zero_string); PyList_SET_ITEM(parity_list, i, zero_string); free(tmp_parity); @@ -1548,7 +1569,7 @@ pyeclib_c_reconstruct(PyObject *self, PyObject *args) } } - reconstructed = Py_BuildValue("s#", fragment_ptr, fragment_size); + reconstructed = PY_BUILDVALUE_OBJ_LEN(fragment_ptr, fragment_size); } else { reconstructed = NULL; @@ -1699,7 +1720,7 @@ pyeclib_c_decode(PyObject *self, PyObject *args) */ for (i=0; i < pyeclib_handle->k; i++) { char *fragment_ptr = get_fragment_ptr_from_data(data[i]); - PyList_SET_ITEM(list_of_strips, i, Py_BuildValue("s#", fragment_ptr, fragment_size)); + PyList_SET_ITEM(list_of_strips, i, PY_BUILDVALUE_OBJ_LEN(fragment_ptr, fragment_size)); if (realloc_bm & (1 << i)) { free(fragment_ptr); } @@ -1709,7 +1730,7 @@ pyeclib_c_decode(PyObject *self, PyObject *args) */ for (i=0; i < pyeclib_handle->m; i++) { char *fragment_ptr = get_fragment_ptr_from_data(parity[i]); - PyList_SET_ITEM(list_of_strips, pyeclib_handle->k + i, Py_BuildValue("s#", fragment_ptr, fragment_size)); + PyList_SET_ITEM(list_of_strips, pyeclib_handle->k + i, PY_BUILDVALUE_OBJ_LEN(fragment_ptr, fragment_size)); if (realloc_bm & (1 << (i + pyeclib_handle->k))) { free(fragment_ptr); } @@ -1732,7 +1753,7 @@ pyeclib_c_get_metadata(PyObject *self, PyObject *args) fragment_metadata_t *fragment_metadata; PyObject *ret_fragment_metadata; - if (!PyArg_ParseTuple(args, "Os#", &pyeclib_obj_handle, &data, &data_len)) { + if (!PyArg_ParseTuple(args, "Oy#", &pyeclib_obj_handle, &data, &data_len)) { PyErr_SetString(PyECLibError, "Invalid arguments passed to pyeclib.get_metadata"); return NULL; } @@ -1747,7 +1768,7 @@ pyeclib_c_get_metadata(PyObject *self, PyObject *args) get_fragment_metadata(pyeclib_handle, data, fragment_metadata); - ret_fragment_metadata = Py_BuildValue("s#", (char*)fragment_metadata, sizeof(fragment_metadata_t)); + ret_fragment_metadata = PY_BUILDVALUE_OBJ_LEN((char*)fragment_metadata, sizeof(fragment_metadata_t)); free(fragment_metadata); @@ -1881,23 +1902,6 @@ static PyMethodDef PyECLibMethods[] = { {NULL, NULL, 0, NULL} /* Sentinel */ }; -/* Python 3 compatibility macros */ -#if PY_MAJOR_VERSION >= 3 - #define MOD_ERROR_VAL NULL - #define MOD_SUCCESS_VAL(val) val - #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) - #define MOD_DEF(ob, name, doc, methods) \ - static struct PyModuleDef moduledef = { \ - PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \ - ob = PyModule_Create(&moduledef); -#else - #define MOD_ERROR_VAL - #define MOD_SUCCESS_VAL(val) - #define MOD_INIT(name) void init##name(void) - #define MOD_DEF(ob, name, doc, methods) \ - ob = Py_InitModule3(name, methods, doc); -#endif - MOD_INIT(pyeclib_c) { PyObject *m; |