/****************************************************************************** The LLVM Compiler Infrastructure This file is distributed under the University of Illinois Open Source License. See LICENSE.TXT for details. ****************************************************************************** * This C file vends a simple interface to set the Application Specific Info * on Mac OS X through Python. To use, compile as a dylib, import crashinfo * and call crashinfo.setCrashReporterDescription("hello world") * The testCrashReporterDescription() API is simply there to let you test that this * is doing what it is intended to do without having to actually cons up a crash ******************************************************************************/ #include #include #include #include void *__crashreporter_info__ = NULL; asm(".desc ___crashreporter_info__, 0x10"); static PyObject* setCrashReporterDescription(PyObject* self, PyObject* string) { if (__crashreporter_info__) { free(__crashreporter_info__); __crashreporter_info__ = NULL; } if (string && PyString_Check(string)) { Py_ssize_t size = PyString_Size(string); char* data = PyString_AsString(string); if (size > 0 && data) { ++size; // Include the NULL terminateor in allocation and memcpy() __crashreporter_info__ = malloc(size); memcpy(__crashreporter_info__, data, size); return Py_True; } } return Py_False; } static PyObject* testCrashReporterDescription(PyObject*self, PyObject* arg) { int* ptr = 0; *ptr = 1; return Py_None; } static PyMethodDef crashinfo_methods[] = { {"setCrashReporterDescription", setCrashReporterDescription, METH_O}, {"testCrashReporterDescription", testCrashReporterDescription, METH_O}, {NULL, NULL} }; void initcrashinfo() { (void) Py_InitModule("crashinfo", crashinfo_methods); }