X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1b8c7ba607a15a2ff8a04448138df9ffff7df6c5..9e477492e29e03c02827b1e42a16cb09a13f5149:/wxPython/src/_streams.i diff --git a/wxPython/src/_streams.i b/wxPython/src/_streams.i index 5d89908a07..a918d91470 100644 --- a/wxPython/src/_streams.i +++ b/wxPython/src/_streams.i @@ -23,8 +23,15 @@ %newgroup -// typemaps for wxInputStream -%typemap(in) wxInputStream* (wxPyInputStream* temp, bool created) { +// Typemaps for wxInputStream +// +// We assume that input params taking a wxInputStream& will *not* take +// ownership of the stream and so we manage it in the typemaps. On the other +// hand, when a paramter expects a wxInputStream* then it does take ownership +// (such as wxFSFile) and so the typemap will make a copy of the stream object +// to give to it. + +%typemap(in) wxInputStream& (wxPyInputStream* temp, bool created) { if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) { $1 = temp->m_wxis; created = false; @@ -32,20 +39,28 @@ PyErr_Clear(); // clear the failure of the wxPyConvert above $1 = wxPyCBInputStream_create($input, false); if ($1 == NULL) { - PyErr_SetString(PyExc_TypeError, "Expected wxInputStream or Python file-like object."); + PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object."); SWIG_fail; } created = true; } } -%typemap(freearg) wxInputStream* { - if (created$argnum) - delete $1; -} +%typemap(freearg) wxInputStream& { if (created$argnum) delete $1; } + +%typemap(in) wxInputStream* (wxPyInputStream* temp) { + if (wxPyConvertSwigPtr($input, (void **)&temp, wxT("wxPyInputStream"))) { + $1 = wxPyCBInputStream_copy((wxPyCBInputStream*)temp->m_wxis); + } else { + PyErr_Clear(); // clear the failure of the wxPyConvert above + $1 = wxPyCBInputStream_create($input, true); + if ($1 == NULL) { + PyErr_SetString(PyExc_TypeError, "Expected wx.InputStream or Python file-like object."); + SWIG_fail; + } + } +} -%typemap(in) wxInputStream& = wxInputStream*; -%typemap(freearg) wxInputStream& = wxInputStream*; %typemap(out) wxInputStream* { @@ -144,6 +159,7 @@ public: Py_DECREF(str); } } + size_t LastWrite() const; };