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.
........
This commit is contained in:
Victor Stinner 2010-04-18 00:03:40 +00:00
parent 6ffdb6f921
commit ba1f449ca2
2 changed files with 19 additions and 3 deletions

View File

@ -31,6 +31,9 @@ Core and Builtins
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

View File

@ -1371,7 +1371,8 @@ copy_com_pointer(PyObject *self, PyObject *args)
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 @@ static PyObject *py_dl_open(PyObject *self, PyObject *args)
/* 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)