diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/stropmodule.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 1cee66b..a82c313 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -503,6 +503,35 @@ strop_atof(self, args) } +static object * +strop_translate(self, args) + object *self; + object *args; +{ + char *input, *table, *output; + int inlen, tablen; + object *result; + int i; + + if (!newgetargs(args, "s#s#", &input, &inlen, &table, &tablen)) + return NULL; + if (tablen != 256) { + err_setstr(ValueError, + "translation table must be 256 characters long"); + return NULL; + } + result = newsizedstringobject((char *)NULL, inlen); + if (result == NULL) + return NULL; + output = getstringvalue(result); + for (i = 0; i < inlen; i++) { + int c = Py_CHARMASK(*input++); + *output++ = table[c]; + } + return result; +} + + /* List of functions defined in the module */ static struct methodlist strop_methods[] = { @@ -518,6 +547,7 @@ static struct methodlist strop_methods[] = { {"splitfields", strop_splitfields, 1}, {"strip", strop_strip}, {"swapcase", strop_swapcase}, + {"translate", strop_translate, 1}, {"upper", strop_upper}, {NULL, NULL} /* sentinel */ }; |