mirror of https://github.com/python/cpython
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:
parent
6ffdb6f921
commit
ba1f449ca2
|
@ -31,6 +31,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #7606: XML-RPC traceback stored in X-traceback is now encoded to ASCII
|
||||||
using backslashreplace error handler
|
using backslashreplace error handler
|
||||||
|
|
||||||
|
|
|
@ -1371,7 +1371,8 @@ copy_com_pointer(PyObject *self, PyObject *args)
|
||||||
|
|
||||||
static PyObject *py_dl_open(PyObject *self, PyObject *args)
|
static PyObject *py_dl_open(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *name;
|
PyObject *name, *name2;
|
||||||
|
char *name_str;
|
||||||
void * handle;
|
void * handle;
|
||||||
#ifdef RTLD_LOCAL
|
#ifdef RTLD_LOCAL
|
||||||
int mode = RTLD_NOW | 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 */
|
/* cygwin doesn't define RTLD_LOCAL */
|
||||||
int mode = RTLD_NOW;
|
int mode = RTLD_NOW;
|
||||||
#endif
|
#endif
|
||||||
if (!PyArg_ParseTuple(args, "z|i:dlopen", &name, &mode))
|
if (!PyArg_ParseTuple(args, "O|i:dlopen", &name, &mode))
|
||||||
return NULL;
|
return NULL;
|
||||||
mode |= RTLD_NOW;
|
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) {
|
if (!handle) {
|
||||||
char *errmsg = ctypes_dlerror();
|
char *errmsg = ctypes_dlerror();
|
||||||
if (!errmsg)
|
if (!errmsg)
|
||||||
|
|
Loading…
Reference in New Issue