/* strop module */ #define PY_SSIZE_T_CLEAN #include "Python.h" PyDoc_STRVAR(strop_module__doc__, "Common string manipulations, optimized for speed.\n" "\n" "Always use \"import string\" rather than referencing\n" "this module directly."); PyDoc_STRVAR(maketrans__doc__, "maketrans(frm, to) -> string\n" "\n" "Return a translation table (a string of 256 bytes long)\n" "suitable for use in string.translate. The strings frm and to\n" "must be of the same length."); static PyObject * strop_maketrans(PyObject *self, PyObject *args) { unsigned char *c, *from=NULL, *to=NULL; Py_ssize_t i, fromlen=0, tolen=0; PyObject *result; if (!PyArg_ParseTuple(args, "t#t#:maketrans", &from, &fromlen, &to, &tolen)) return NULL; if (fromlen != tolen) { PyErr_SetString(PyExc_ValueError, "maketrans arguments must have same length"); return NULL; } result = PyString_FromStringAndSize((char *)NULL, 256); if (result == NULL) return NULL; c = (unsigned char *) PyString_AS_STRING((PyStringObject *)result); for (i = 0; i < 256; i++) c[i]=(unsigned char)i; for (i = 0; i < fromlen; i++) c[from[i]]=to[i]; return result; } /* List of functions defined in the module */ static PyMethodDef strop_methods[] = { {"maketrans", strop_maketrans, METH_VARARGS, maketrans__doc__}, {NULL, NULL} /* sentinel */ }; PyMODINIT_FUNC initstrop(void) { PyObject *m; m = Py_InitModule4("strop", strop_methods, strop_module__doc__, (PyObject*)NULL, PYTHON_API_VERSION); if (m == NULL) return; }