[pypy-commit] cffi default: Windows passes test_c.
arigo
noreply at buildbot.pypy.org
Sat Jun 16 10:46:41 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r386:a38f28171585
Date: 2012-06-16 10:46 +0200
http://bitbucket.org/cffi/cffi/changeset/a38f28171585/
Log: Windows passes test_c.
diff --git a/c/_ffi_backend.c b/c/_ffi_backend.c
--- a/c/_ffi_backend.c
+++ b/c/_ffi_backend.c
@@ -1853,12 +1853,14 @@
PyObject_Del(dlobj);
}
+static const char *get_dl_name(DynLibObject *dlobj)
+{
+ return dlobj->dl_name ? dlobj->dl_name : "<stdlib>";
+}
+
static PyObject *dl_repr(DynLibObject *dlobj)
{
- if (dlobj->dl_name == NULL)
- return PyString_FromString("<clibrary stdlib>");
- else
- return PyString_FromFormat("<clibrary '%s'>", dlobj->dl_name);
+ return PyString_FromFormat("<clibrary '%s'>", get_dl_name(dlobj));
}
static PyObject *dl_load_function(DynLibObject *dlobj, PyObject *args)
@@ -1879,7 +1881,7 @@
funcptr = dlsym(dlobj->dl_handle, funcname);
if (funcptr == NULL) {
PyErr_Format(PyExc_KeyError, "function '%s' not found in library '%s'",
- funcname, dlobj->dl_name);
+ funcname, get_dl_name(dlobj));
return NULL;
}
@@ -1899,7 +1901,7 @@
data = dlsym(dlobj->dl_handle, varname);
if (data == NULL) {
PyErr_Format(PyExc_KeyError, "variable '%s' not found in library '%s'",
- varname, dlobj->dl_name);
+ varname, get_dl_name(dlobj));
return NULL;
}
return convert_to_object(data, ct);
@@ -1919,7 +1921,7 @@
data = dlsym(dlobj->dl_handle, varname);
if (data == NULL) {
PyErr_Format(PyExc_KeyError, "variable '%s' not found in library '%s'",
- varname, dlobj->dl_name);
+ varname, get_dl_name(dlobj));
return NULL;
}
if (convert_from_object(data, ct, value) < 0)
@@ -1973,17 +1975,15 @@
void *handle;
DynLibObject *dlobj;
- if (!PyArg_ParseTuple(args, "et:load_library",
- Py_FileSystemDefaultEncoding, &filename)) {
- if (PyTuple_Size(args) == 1 && PyTuple_GetItem(args, 0) == Py_None) {
- PyErr_Clear();
- handle = RTLD_DEFAULT;
- filename = NULL;
- }
- else
- return NULL;
+ if (PyTuple_Size(args) == 1 && PyTuple_GetItem(args, 0) == Py_None) {
+ handle = RTLD_DEFAULT;
+ filename = NULL;
}
else {
+ if (!PyArg_ParseTuple(args, "et:load_library",
+ Py_FileSystemDefaultEncoding, &filename))
+ return NULL;
+
handle = dlopen(filename, RTLD_LAZY);
if (handle == NULL) {
PyErr_Format(PyExc_OSError, "cannot load library: %s", filename);
@@ -2216,7 +2216,11 @@
PyErr_SetString(PyExc_ValueError, "negative array length");
return NULL;
}
+#ifdef MS_WIN32
+ sprintf(extra_text, "[%ld]", (long)length); /* XXX not large enough */
+#else
sprintf(extra_text, "[%zd]", length);
+#endif
arraysize = length * ctitem->ct_size;
if (length > 0 && (arraysize / length) != ctitem->ct_size) {
PyErr_SetString(PyExc_OverflowError,
diff --git a/c/misc_win32.h b/c/misc_win32.h
--- a/c/misc_win32.h
+++ b/c/misc_win32.h
@@ -72,18 +72,26 @@
{
if (handle == RTLD_DEFAULT) {
static const char *standard_dlls[] = {
- "kernel32.dll",
- "user32.dll",
- "gdi32.dll",
+ "MSVCR110", /* XXX! */
+ "MSVCR100",
+ "MSVCR90",
+ "MSVCR80",
+
+ "KERNEL32",
+ "USER32",
+ "GDI32",
NULL
};
const char **p;
void *result;
for (p = standard_dlls; *p != NULL; p++) {
- result = GetProcAddress(GetModuleHandle(*p), symbol);
- if (result)
- return result;
+ HMODULE h = GetModuleHandle(*p);
+ if (h) {
+ result = GetProcAddress(h, symbol);
+ if (result)
+ return result;
+ }
}
return NULL;
}
diff --git a/c/test_c.py b/c/test_c.py
--- a/c/test_c.py
+++ b/c/test_c.py
@@ -25,7 +25,7 @@
def test_load_library():
x = load_library(None)
- assert repr(x) == '<clibrary stdlib>'
+ assert repr(x) == "<clibrary '<stdlib>'>"
def test_nonstandard_integer_types():
d = nonstandard_integer_types()
@@ -623,12 +623,16 @@
assert strlen("foobarbaz") == 9
def test_read_variable():
+ if sys.platform == 'win32':
+ py.test.skip("untested")
BVoidP = new_pointer_type(new_void_type())
ll = load_library(None)
stderr = ll.read_variable(BVoidP, "stderr")
assert stderr == cast(BVoidP, _testfunc(8))
def test_write_variable():
+ if sys.platform == 'win32':
+ py.test.skip("untested")
BVoidP = new_pointer_type(new_void_type())
ll = load_library(None)
stderr = ll.read_variable(BVoidP, "stderr")
More information about the pypy-commit
mailing list