File tree Expand file tree Collapse file tree 4 files changed +22
-8
lines changed Expand file tree Collapse file tree 4 files changed +22
-8
lines changed Original file line number Diff line number Diff line change @@ -53,6 +53,9 @@ def cdefs(features):
53
53
void* g_malloc (size_t size);
54
54
void g_free (void* data);
55
55
56
+ // not what's in the headers, but see the comment in pyvips_build.py
57
+ int vips_free (void* a, void* b);
58
+
56
59
void vips_leak_set (int leak);
57
60
58
61
char* vips_path_filename7 (const char* path);
Original file line number Diff line number Diff line change @@ -188,10 +188,8 @@ def set(self, value):
188
188
# can own
189
189
memory = glib_lib .g_malloc (len (value ))
190
190
ffi .memmove (memory , value , len (value ))
191
- free_fn = ffi .cast ('VipsCallbackFn' , glib_lib .g_free )
192
-
193
191
vips_lib .vips_value_set_blob (self .gvalue ,
194
- free_fn , memory , len (value ))
192
+ vips_lib . vips_free , memory , len (value ))
195
193
else :
196
194
raise Error ('unsupported gtype for set {0}, fundamental {1}' .
197
195
format (type_name (gtype ), type_name (fundamental )))
@@ -269,7 +267,7 @@ def get(self):
269
267
elif gtype == GValue .blob_type :
270
268
psize = ffi .new ('size_t *' )
271
269
array = vips_lib .vips_value_get_blob (self .gvalue , psize )
272
- buf = ffi .cast (" char*" , array )
270
+ buf = ffi .cast (' char*' , array )
273
271
274
272
result = ffi .unpack (buf , psize [0 ])
275
273
else :
Original file line number Diff line number Diff line change 10
10
11
11
ffibuilder = FFI ()
12
12
13
+ # this is very hacky ... cffi in API mode won't let us cast function pointers,
14
+ # so we can't pass vips_free() as a vipsCallbackFn, which we need to be able to
15
+ # do when we set a blob
16
+ #
17
+ # to fix this, we rename vips_free during the vips header load as
18
+ # real_vips_free, then declare a fake type ourselves that decl.py then hooks up
19
+ # to
20
+
13
21
ffibuilder .set_source ("_libvips" ,
14
22
r"""
23
+ #define vips_free real_vips_free
15
24
#include <vips/vips.h>
25
+ #undef vips_free
26
+
27
+ extern VipsCallbackFn vips_free;
16
28
""" ,
17
29
** pkgconfig .parse ('vips' ))
18
30
Original file line number Diff line number Diff line change 21
21
setup_deps = [
22
22
'cffi>=1.0.0' ,
23
23
'pytest-runner' ,
24
- 'pkgconfig'
24
+ 'pkgconfig' ,
25
25
]
26
26
27
27
install_deps = [
28
28
'cffi>=1.0.0' ,
29
- 'pkgconfig'
29
+ 'pkgconfig' ,
30
30
]
31
31
32
32
test_deps = [
33
+ 'cffi>=1.0.0' ,
33
34
'pytest' ,
34
35
'pytest-catchlog' ,
35
- 'pytest-flake8'
36
+ 'pytest-flake8' ,
36
37
]
37
38
38
39
extras = {
39
40
'test' : test_deps ,
40
- 'doc' : ['sphinx' , 'sphinx_rtd_theme' ]
41
+ 'doc' : ['sphinx' , 'sphinx_rtd_theme' ],
41
42
}
42
43
43
44
import sys
You can’t perform that action at this time.
0 commit comments