Author: Armin Rigo <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit