diff options
author | Filipe Cabecinhas <me@filcab.net> | 2012-08-20 16:10:44 +0000 |
---|---|---|
committer | Filipe Cabecinhas <me@filcab.net> | 2012-08-20 16:10:44 +0000 |
commit | 4c1f3a1cc54b0bedc759f377cd6d36a8089bbb14 (patch) | |
tree | c153ad3d3ea56ad80c22ab779a85498bd1f99d25 /lldb | |
parent | 02e6f03236215df7810839be6f6c7750a1d53eed (diff) | |
download | bcm5719-llvm-4c1f3a1cc54b0bedc759f377cd6d36a8089bbb14.tar.gz bcm5719-llvm-4c1f3a1cc54b0bedc759f377cd6d36a8089bbb14.zip |
Add FILE* typemaps for SBDebugger.GetInputFileHandle() and friends.
llvm-svn: 162203
Diffstat (limited to 'lldb')
-rw-r--r-- | lldb/scripts/Python/python-typemaps.swig | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lldb/scripts/Python/python-typemaps.swig b/lldb/scripts/Python/python-typemaps.swig index d272ea3e4cd..1c3fbbb7c79 100644 --- a/lldb/scripts/Python/python-typemaps.swig +++ b/lldb/scripts/Python/python-typemaps.swig @@ -333,3 +333,38 @@ %typemap(freearg) (uint32_t *versions) { free($1); } + +%typemap(in) FILE * { + if (!PyFile_Check($input)) { + int fd = PyObject_AsFileDescriptor($input); + PyObject *py_mode = PyObject_GetAttrString($input, "mode"); + const char *mode = PyString_AsString(py_mode); + if (-1 != fd && mode) { + FILE *f; + if ((f = fdopen(fd, mode))) + $1 = f; + else + PyErr_SetString(PyExc_TypeError, strerror(errno)); + } else { + PyErr_SetString(PyExc_TypeError,"not a file-like object"); + return NULL; + } + } + $1 = PyFile_AsFile($input); +} + +%typemap(out) FILE * { + char mode[4] = {0}; +#ifdef __MACOSX__ + int i = 0; + short flags = $1->_flags; + + if (flags & __SRD) + mode[i++] = 'r'; + else if (flags & __SWR) + mode[i++] = 'w'; + else // if (flags & __SRW) + mode[i++] = 'a'; +#endif + $result = PyFile_FromFile($1, const_cast<char*>(""), mode, fclose); +} |