summaryrefslogtreecommitdiffstats
path: root/lldb
diff options
context:
space:
mode:
authorFilipe Cabecinhas <me@filcab.net>2012-08-20 16:10:44 +0000
committerFilipe Cabecinhas <me@filcab.net>2012-08-20 16:10:44 +0000
commit4c1f3a1cc54b0bedc759f377cd6d36a8089bbb14 (patch)
treec153ad3d3ea56ad80c22ab779a85498bd1f99d25 /lldb
parent02e6f03236215df7810839be6f6c7750a1d53eed (diff)
downloadbcm5719-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.swig35
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);
+}
OpenPOWER on IntegriCloud