Skip to content

Commit 814a07b

Browse files
Use "_release" function directly, not via tp_call
1 parent 8216b98 commit 814a07b

3 files changed

Lines changed: 20 additions & 30 deletions

File tree

src/interface/basicio.i

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,12 @@ OUTPUT_BUFFER_RW(Exiv2::byte* buf, size_t rcount)
135135
// Convert mmap() result to a Python memoryview, assumes arg2 = isWriteable
136136
// The callback is used to call munmap when the memoryview is deleted
137137
RETURN_VIEW_CB(Exiv2::byte* mmap, $1 ? arg1->size() : 0,
138-
arg2 ? PyBUF_WRITE : PyBUF_READ, self,)
138+
arg2 ? PyBUF_WRITE : PyBUF_READ,
139+
PyObject_GetAttrString(self, "_release"),)
139140

140-
// Make Exiv2::BasicIo callable (for callback)
141-
%feature("python:slot", "tp_call", functype="ternaryfunc")
142-
Exiv2::BasicIo::_release;
141+
// Define callback function
143142
%extend Exiv2::BasicIo {
144-
void _release(PyObject* args, PyObject* kw) {
143+
void _release(PyObject* ref) {
145144
self->munmap();
146145
};
147146
}
@@ -159,7 +158,8 @@ RETURN_VIEW_CB(Exiv2::byte* mmap, $1 ? arg1->size() : 0,
159158

160159
// Add data() method for easy access
161160
RETURN_VIEW_CB(Exiv2::byte* data, $1 ? arg1->size() : 0,
162-
arg2 ? PyBUF_WRITE : PyBUF_READ, self,)
161+
arg2 ? PyBUF_WRITE : PyBUF_READ,
162+
PyObject_GetAttrString(self, "_release"),)
163163
%extend Exiv2::BasicIo {
164164
Exiv2::byte* data(bool isWriteable) {
165165
if (!self->isopen())

src/swig-0_27_7/basicio_wrap.cxx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4869,7 +4869,7 @@ SWIGINTERN char const *Exiv2_BasicIo_ioType(Exiv2::BasicIo *self){
48694869
}
48704870
return "unknown";
48714871
}
4872-
SWIGINTERN void Exiv2_BasicIo__release(Exiv2::BasicIo *self,PyObject *args,PyObject *kw){
4872+
SWIGINTERN void Exiv2_BasicIo__release(Exiv2::BasicIo *self,PyObject *ref){
48734873
self->munmap();
48744874
}
48754875
SWIGINTERN Exiv2::byte *Exiv2_BasicIo_data(Exiv2::BasicIo *self,bool isWriteable){
@@ -5505,7 +5505,7 @@ SWIGINTERN PyObject *_wrap_BasicIo_mmap(PyObject *self, PyObject *args) {
55055505
if (!resultobj)
55065506
SWIG_fail;
55075507
// Store a weak ref to the new memoryview
5508-
if (store_view(self, resultobj, self))
5508+
if (store_view(self, resultobj, PyObject_GetAttrString(self, "_release")))
55095509
SWIG_fail;
55105510

55115511
return resultobj;
@@ -5726,25 +5726,22 @@ SWIGINTERN PyObject *_wrap_BasicIo__release(PyObject *self, PyObject *args) {
57265726
PyObject *resultobj = 0;
57275727
Exiv2::BasicIo *arg1 = (Exiv2::BasicIo *) 0 ;
57285728
PyObject *arg2 = (PyObject *) 0 ;
5729-
PyObject *arg3 = (PyObject *) 0 ;
57305729
void *argp1 = 0 ;
57315730
int res1 = 0 ;
57325731
PyObject * obj1 = 0 ;
5733-
PyObject * obj2 = 0 ;
57345732

5735-
if (!PyArg_UnpackTuple(args, "BasicIo__release", 2, 2, &obj1, &obj2)) SWIG_fail;
5733+
if (!PyArg_UnpackTuple(args, "BasicIo__release", 1, 1, &obj1)) SWIG_fail;
57365734
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_Exiv2__BasicIo, 0 | 0 );
57375735
if (!SWIG_IsOK(res1)) {
57385736
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicIo__release" "', argument " "1"" of type '" "Exiv2::BasicIo *""'");
57395737
}
57405738
arg1 = reinterpret_cast< Exiv2::BasicIo * >(argp1);
57415739
arg2 = obj1;
5742-
arg3 = obj2;
57435740
{
57445741
try {
57455742
{
57465743
SWIG_PYTHON_THREAD_BEGIN_ALLOW;
5747-
Exiv2_BasicIo__release(arg1,arg2,arg3);
5744+
Exiv2_BasicIo__release(arg1,arg2);
57485745
SWIG_PYTHON_THREAD_END_ALLOW;
57495746
}
57505747
}
@@ -5808,7 +5805,7 @@ SWIGINTERN PyObject *_wrap_BasicIo_data(PyObject *self, PyObject *args) {
58085805
if (!resultobj)
58095806
SWIG_fail;
58105807
// Store a weak ref to the new memoryview
5811-
if (store_view(self, resultobj, self))
5808+
if (store_view(self, resultobj, PyObject_GetAttrString(self, "_release")))
58125809
SWIG_fail;
58135810

58145811
return resultobj;
@@ -5821,8 +5818,6 @@ SWIGPY_DESTRUCTOR_CLOSURE(_wrap_delete_BasicIo) /* defines _wrap_delete_BasicIo_
58215818

58225819
SWIGPY_LENFUNC_CLOSURE(_wrap_BasicIo_size) /* defines _wrap_BasicIo_size_lenfunc_closure */
58235820

5824-
SWIGPY_TERNARYFUNC_CLOSURE(_wrap_BasicIo__release) /* defines _wrap_BasicIo__release_ternaryfunc_closure */
5825-
58265821
static PyMethodDef SwigMethods[] = {
58275822
{ "_enum_list_Position", _wrap__enum_list_Position, METH_VARARGS, NULL},
58285823
{ NULL, NULL, 0, NULL }
@@ -6068,7 +6063,7 @@ static PyHeapTypeObject SwigPyBuiltin__Exiv2__BasicIo_type = {
60686063
&SwigPyBuiltin__Exiv2__BasicIo_type.as_sequence, /* tp_as_sequence */
60696064
&SwigPyBuiltin__Exiv2__BasicIo_type.as_mapping, /* tp_as_mapping */
60706065
SwigPyObject_hash, /* tp_hash */
6071-
_wrap_BasicIo__release_ternaryfunc_closure, /* tp_call */
6066+
(ternaryfunc) 0, /* tp_call */
60726067
(reprfunc) 0, /* tp_str */
60736068
(getattrofunc) 0, /* tp_getattro */
60746069
(setattrofunc) 0, /* tp_setattro */
@@ -6304,7 +6299,7 @@ static PyTypeObject *SwigPyBuiltin__Exiv2__BasicIo_type_create(PyTypeObject *typ
63046299
{ Py_tp_methods, (void *)SwigPyBuiltin__Exiv2__BasicIo_methods },
63056300
{ Py_tp_getset, (void *)SwigPyBuiltin__Exiv2__BasicIo_getset },
63066301
{ Py_tp_hash, (void *)SwigPyObject_hash },
6307-
{ Py_tp_call, (void *)_wrap_BasicIo__release_ternaryfunc_closure },
6302+
{ Py_tp_call, (void *)(ternaryfunc) 0 },
63086303
{ Py_tp_getattro, (void *)(getattrofunc) 0 },
63096304
{ Py_tp_setattro, (void *)(setattrofunc) 0 },
63106305
{ Py_tp_descr_get, (void *)(descrgetfunc) 0 },

src/swig-0_28_5/basicio_wrap.cxx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4974,7 +4974,7 @@ SWIGINTERN char const *Exiv2_BasicIo_ioType(Exiv2::BasicIo *self){
49744974
}
49754975
return "unknown";
49764976
}
4977-
SWIGINTERN void Exiv2_BasicIo__release(Exiv2::BasicIo *self,PyObject *args,PyObject *kw){
4977+
SWIGINTERN void Exiv2_BasicIo__release(Exiv2::BasicIo *self,PyObject *ref){
49784978
self->munmap();
49794979
}
49804980
SWIGINTERN Exiv2::byte *Exiv2_BasicIo_data(Exiv2::BasicIo *self,bool isWriteable){
@@ -5772,7 +5772,7 @@ SWIGINTERN PyObject *_wrap_BasicIo_mmap(PyObject *self, PyObject *args) {
57725772
if (!resultobj)
57735773
SWIG_fail;
57745774
// Store a weak ref to the new memoryview
5775-
if (store_view(self, resultobj, self))
5775+
if (store_view(self, resultobj, PyObject_GetAttrString(self, "_release")))
57765776
SWIG_fail;
57775777

57785778
return resultobj;
@@ -5994,25 +5994,22 @@ SWIGINTERN PyObject *_wrap_BasicIo__release(PyObject *self, PyObject *args) {
59945994
PyObject *resultobj = 0;
59955995
Exiv2::BasicIo *arg1 = (Exiv2::BasicIo *) 0 ;
59965996
PyObject *arg2 = (PyObject *) 0 ;
5997-
PyObject *arg3 = (PyObject *) 0 ;
59985997
void *argp1 = 0 ;
59995998
int res1 = 0 ;
60005999
PyObject * obj1 = 0 ;
6001-
PyObject * obj2 = 0 ;
60026000

6003-
if (!PyArg_UnpackTuple(args, "BasicIo__release", 2, 2, &obj1, &obj2)) SWIG_fail;
6001+
if (!PyArg_UnpackTuple(args, "BasicIo__release", 1, 1, &obj1)) SWIG_fail;
60046002
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_Exiv2__BasicIo, 0 | 0 );
60056003
if (!SWIG_IsOK(res1)) {
60066004
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "BasicIo__release" "', argument " "1"" of type '" "Exiv2::BasicIo *""'");
60076005
}
60086006
arg1 = reinterpret_cast< Exiv2::BasicIo * >(argp1);
60096007
arg2 = obj1;
6010-
arg3 = obj2;
60116008
{
60126009
try {
60136010
{
60146011
SWIG_PYTHON_THREAD_BEGIN_ALLOW;
6015-
Exiv2_BasicIo__release(arg1,arg2,arg3);
6012+
Exiv2_BasicIo__release(arg1,arg2);
60166013
SWIG_PYTHON_THREAD_END_ALLOW;
60176014
}
60186015
}
@@ -6076,7 +6073,7 @@ SWIGINTERN PyObject *_wrap_BasicIo_data(PyObject *self, PyObject *args) {
60766073
if (!resultobj)
60776074
SWIG_fail;
60786075
// Store a weak ref to the new memoryview
6079-
if (store_view(self, resultobj, self))
6076+
if (store_view(self, resultobj, PyObject_GetAttrString(self, "_release")))
60806077
SWIG_fail;
60816078

60826079
return resultobj;
@@ -6089,8 +6086,6 @@ SWIGPY_DESTRUCTOR_CLOSURE(_wrap_delete_BasicIo) /* defines _wrap_delete_BasicIo_
60896086

60906087
SWIGPY_LENFUNC_CLOSURE(_wrap_BasicIo_size) /* defines _wrap_BasicIo_size_lenfunc_closure */
60916088

6092-
SWIGPY_TERNARYFUNC_CLOSURE(_wrap_BasicIo__release) /* defines _wrap_BasicIo__release_ternaryfunc_closure */
6093-
60946089
static PyMethodDef SwigMethods[] = {
60956090
{ "_enum_list_Position", _wrap__enum_list_Position, METH_VARARGS, NULL},
60966091
{ NULL, NULL, 0, NULL }
@@ -6358,7 +6353,7 @@ static PyHeapTypeObject SwigPyBuiltin__Exiv2__BasicIo_type = {
63586353
&SwigPyBuiltin__Exiv2__BasicIo_type.as_sequence, /* tp_as_sequence */
63596354
&SwigPyBuiltin__Exiv2__BasicIo_type.as_mapping, /* tp_as_mapping */
63606355
SwigPyObject_hash, /* tp_hash */
6361-
_wrap_BasicIo__release_ternaryfunc_closure, /* tp_call */
6356+
(ternaryfunc) 0, /* tp_call */
63626357
(reprfunc) 0, /* tp_str */
63636358
(getattrofunc) 0, /* tp_getattro */
63646359
(setattrofunc) 0, /* tp_setattro */
@@ -6594,7 +6589,7 @@ static PyTypeObject *SwigPyBuiltin__Exiv2__BasicIo_type_create(PyTypeObject *typ
65946589
{ Py_tp_methods, (void *)SwigPyBuiltin__Exiv2__BasicIo_methods },
65956590
{ Py_tp_getset, (void *)SwigPyBuiltin__Exiv2__BasicIo_getset },
65966591
{ Py_tp_hash, (void *)SwigPyObject_hash },
6597-
{ Py_tp_call, (void *)_wrap_BasicIo__release_ternaryfunc_closure },
6592+
{ Py_tp_call, (void *)(ternaryfunc) 0 },
65986593
{ Py_tp_getattro, (void *)(getattrofunc) 0 },
65996594
{ Py_tp_setattro, (void *)(setattrofunc) 0 },
66006595
{ Py_tp_descr_get, (void *)(descrgetfunc) 0 },

0 commit comments

Comments
 (0)