/* Typemap definitions to allow SWIG to properly handle some data types */ // typemap for an incoming buffer %typemap(in) (void *buf, size_t size) { if (PyInt_Check($input)) { $2 = PyInt_AsLong($input); } else if (PyLong_Check($input)) { $2 = PyLong_AsLong($input); } else { PyErr_SetString(PyExc_ValueError, "Expecting an integer or long object"); return NULL; } if ($2 <= 0) { PyErr_SetString(PyExc_ValueError, "Positive integer expected"); return NULL; } $1 = (void *) malloc($2); } // Return the buffer. Discarding any previous return result %typemap(argout) (void *buf, size_t size) { Py_XDECREF($result); /* Blow away any previous result */ if (result == 0) { $result = Py_None; Py_INCREF($result); } else { PyObject *py_bytes = PyBytes_FromStringAndSize(reinterpret_cast($1), result); $result = py_bytes; } free($1); }