[Python-checkins] r84199 - in python/branches/py3k: Misc/NEWS Modules/nismodule.c
martin.v.loewis
python-checkins at python.org
Thu Aug 19 11:11:51 CEST 2010
Author: martin.v.loewis
Date: Thu Aug 19 11:11:51 2010
New Revision: 84199
Log:
Decode NIS data to fs encoding, using the surrogate error handler.
Modified:
python/branches/py3k/Misc/NEWS
python/branches/py3k/Modules/nismodule.c
Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS (original)
+++ python/branches/py3k/Misc/NEWS Thu Aug 19 11:11:51 2010
@@ -69,7 +69,8 @@
- Issue #5737: Add Solaris-specific mnemonics in the errno module. Patch by
Matthew Ahrens.
-- Restore GIL in nis_cat in case of error.
+- Restore GIL in nis_cat in case of error. Decode NIS data to fs encoding,
+ using the surrogate error handler.
- Issue #665761: ``functools.reduce()`` will no longer mask exceptions
other than ``TypeError`` raised by the iterator argument.
Modified: python/branches/py3k/Modules/nismodule.c
==============================================================================
--- python/branches/py3k/Modules/nismodule.c (original)
+++ python/branches/py3k/Modules/nismodule.c Thu Aug 19 11:11:51 2010
@@ -117,8 +117,8 @@
if (invallen > 0 && inval[invallen-1] == '\0')
invallen--;
}
- key = PyUnicode_FromStringAndSize(inkey, inkeylen);
- val = PyUnicode_FromStringAndSize(inval, invallen);
+ key = PyUnicode_DecodeFSDefaultAndSize(inkey, inkeylen);
+ val = PyUnicode_DecodeFSDefaultAndSize(inval, invallen);
if (key == NULL || val == NULL) {
/* XXX error -- don't know how to handle */
PyErr_Clear();
@@ -159,30 +159,40 @@
{
char *match;
char *domain = NULL;
- int keylen, len;
+ Py_ssize_t keylen;
+ int len;
char *key, *map;
int err;
- PyObject *res;
+ PyObject *ukey, *bkey, *res;
int fix;
static char *kwlist[] = {"key", "map", "domain", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwdict,
- "s#s|s:match", kwlist,
- &key, &keylen, &map, &domain))
+ "Us|s:match", kwlist,
+ &ukey, &map, &domain))
return NULL;
- if (!domain && ((err = yp_get_default_domain(&domain)) != 0))
+ if ((bkey = PyUnicode_EncodeFSDefault(ukey)) == NULL)
+ return NULL;
+ if (PyBytes_AsStringAndSize(bkey, &key, &keylen) == -1) {
+ Py_DECREF(bkey);
+ return NULL;
+ }
+ if (!domain && ((err = yp_get_default_domain(&domain)) != 0)) {
+ Py_DECREF(bkey);
return nis_error(err);
+ }
map = nis_mapname (map, &fix);
if (fix)
keylen++;
Py_BEGIN_ALLOW_THREADS
err = yp_match (domain, map, key, keylen, &match, &len);
Py_END_ALLOW_THREADS
+ Py_DECREF(bkey);
if (fix)
len--;
if (err != 0)
return nis_error(err);
- res = PyUnicode_FromStringAndSize (match, len);
+ res = PyUnicode_DecodeFSDefaultAndSize(match, len);
free (match);
return res;
}
More information about the Python-checkins
mailing list