Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r983:aa47c6364769 Date: 2012-10-07 18:01 +0200 http://bitbucket.org/cffi/cffi/changeset/aa47c6364769/
Log: Use dlerror() to report error conditions more precisely. diff --git a/c/_cffi_backend.c b/c/_cffi_backend.c --- a/c/_cffi_backend.c +++ b/c/_cffi_backend.c @@ -2595,10 +2595,13 @@ ct->ct_name); return NULL; } + dlerror(); /* clear error condition */ funcptr = dlsym(dlobj->dl_handle, funcname); if (funcptr == NULL) { - PyErr_Format(PyExc_KeyError, "function '%s' not found in library '%s'", - funcname, dlobj->dl_name); + const char *error = dlerror(); + PyErr_Format(PyExc_KeyError, + "function '%s' not found in library '%s': %s", + funcname, dlobj->dl_name, error); return NULL; } @@ -2615,11 +2618,16 @@ &CTypeDescr_Type, &ct, &varname)) return NULL; + dlerror(); /* clear error condition */ data = dlsym(dlobj->dl_handle, varname); if (data == NULL) { - PyErr_Format(PyExc_KeyError, "variable '%s' not found in library '%s'", - varname, dlobj->dl_name); - return NULL; + const char *error = dlerror(); + if (error != NULL) { + PyErr_Format(PyExc_KeyError, + "variable '%s' not found in library '%s': %s", + varname, dlobj->dl_name, error); + return NULL; + } } return convert_to_object(data, ct); } @@ -2635,10 +2643,13 @@ &CTypeDescr_Type, &ct, &varname, &value)) return NULL; + dlerror(); /* clear error condition */ data = dlsym(dlobj->dl_handle, varname); if (data == NULL) { - PyErr_Format(PyExc_KeyError, "variable '%s' not found in library '%s'", - varname, dlobj->dl_name); + const char *error = dlerror(); + PyErr_Format(PyExc_KeyError, + "variable '%s' not found in library '%s': %s", + varname, dlobj->dl_name, error); return NULL; } if (convert_from_object(data, ct, value) < 0) @@ -2711,8 +2722,9 @@ printable_filename = filename_or_null ? filename_or_null : "<None>"; handle = dlopen(filename_or_null, flags); if (handle == NULL) { + const char *error = dlerror(); PyErr_Format(PyExc_OSError, "cannot load library %s: %s", - printable_filename, dlerror()); + printable_filename, error); return NULL; } _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit