[Python-checkins] r80160 - in python/branches/release31-maint: Misc/NEWS Modules/_ctypes/callproc.c
victor.stinner
python-checkins at python.org
Sun Apr 18 02:03:40 CEST 2010
Author: victor.stinner
Date: Sun Apr 18 02:03:40 2010
New Revision: 80160
Log:
Merged revisions 80159 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r80159 | victor.stinner | 2010-04-18 02:00:44 +0200 (dim., 18 avril 2010) | 3 lines
Issue #8394: _ctypes.dlopen() accepts bytes, bytearray and str with
surrogates.
........
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Misc/NEWS
python/branches/release31-maint/Modules/_ctypes/callproc.c
Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS (original)
+++ python/branches/release31-maint/Misc/NEWS Sun Apr 18 02:03:40 2010
@@ -31,6 +31,9 @@
Library
-------
+- Issue #8394: _ctypes.dlopen() accepts bytes, bytearray and str with
+ surrogates.
+
- Issue #7606: XML-RPC traceback stored in X-traceback is now encoded to ASCII
using backslashreplace error handler
Modified: python/branches/release31-maint/Modules/_ctypes/callproc.c
==============================================================================
--- python/branches/release31-maint/Modules/_ctypes/callproc.c (original)
+++ python/branches/release31-maint/Modules/_ctypes/callproc.c Sun Apr 18 02:03:40 2010
@@ -1371,7 +1371,8 @@
static PyObject *py_dl_open(PyObject *self, PyObject *args)
{
- char *name;
+ PyObject *name, *name2;
+ char *name_str;
void * handle;
#ifdef RTLD_LOCAL
int mode = RTLD_NOW | RTLD_LOCAL;
@@ -1379,10 +1380,22 @@
/* cygwin doesn't define RTLD_LOCAL */
int mode = RTLD_NOW;
#endif
- if (!PyArg_ParseTuple(args, "z|i:dlopen", &name, &mode))
+ if (!PyArg_ParseTuple(args, "O|i:dlopen", &name, &mode))
return NULL;
mode |= RTLD_NOW;
- handle = ctypes_dlopen(name, mode);
+ if (name != Py_None) {
+ if (PyUnicode_FSConverter(name, &name2) == 0)
+ return NULL;
+ if (PyBytes_Check(name2))
+ name_str = PyBytes_AS_STRING(name2);
+ else
+ name_str = PyByteArray_AS_STRING(name2);
+ } else {
+ name_str = NULL;
+ name2 = NULL;
+ }
+ handle = ctypes_dlopen(name_str, mode);
+ Py_XDECREF(name2);
if (!handle) {
char *errmsg = ctypes_dlerror();
if (!errmsg)
More information about the Python-checkins
mailing list