@@ -146,25 +146,39 @@ OUTPUT_BUFFER_RW(Exiv2::byte* buf, size_t rcount)
146146%ignore Exiv2::BasicIo::mmap ();
147147
148148// Convert mmap() result to a Python memoryview
149- RETURN_VIEW (Exiv2::byte* mmap, $1 ? arg1 ->size () : 0,
149+ RETURN_VIEW (Exiv2::byte* mmap, $1 ? _global_self ->size () : 0,
150150 _global_writeable ? PyBUF_WRITE : PyBUF_READ,)
151151
152- // Release memoryviews (and save isWriteable) when mmap or data is called
153- %typemap(check, fragment=" memoryview_funcs" ) bool isWriteable
154- (bool _global_writeable) {
155- _global_writeable = $1 ;
152+ // Save self and isWriteable (and release memoryviews) when mmap or data
153+ // is called
154+ %typemap(check, fragment=" memoryview_funcs" )
155+ (Exiv2::BasicIo* self, bool isWriteable)
156+ (Exiv2::BasicIo* _global_self, bool _global_writeable) {
157+ _global_self = $1 ;
158+ _global_writeable = $2 ;
156159 release_views (self);
157160}
158161
159- // Release memoryviews when some other functions are called
160- %typemap(ret, fragment=" memoryview_funcs" )
161- (int close), (int munmap), (long write), (size_t write) %{
162- release_views (self);
162+ // Most methods of BasicIo release any existing memoryview
163+ %{
164+ #define NO_RELEASE_delete_BasicIo
165+ #define NO_RELEASE_BasicIo_eof
166+ #define NO_RELEASE_BasicIo_error
167+ #define NO_RELEASE_BasicIo_ioType
168+ #define NO_RELEASE_BasicIo_isopen
169+ #define NO_RELEASE_BasicIo_path
170+ #define NO_RELEASE_BasicIo_size
171+ #define NO_RELEASE_BasicIo__view_deleted_cb
163172%}
173+ %typemap(check, fragment=" memoryview_funcs" ) Exiv2::BasicIo* self {
174+ %#ifndef NO_RELEASE_ $symname
175+ release_views (self);
176+ %#endif
177+ }
164178
165179// Add data() method for easy access
166180// The callback is used to call munmap when the memoryview is deleted
167- RETURN_VIEW (Exiv2::byte* data, $1 ? arg1 ->size () : 0,
181+ RETURN_VIEW (Exiv2::byte* data, $1 ? _global_self ->size () : 0,
168182 _global_writeable ? PyBUF_WRITE : PyBUF_READ,)
169183%feature(" docstring" ) Exiv2::BasicIo::data
170184"Easy access to the IO data.
0 commit comments