aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMemphiz <memphis@machzwo.de>2013-02-20 19:13:25 +0100
committerS. Davilla <davilla@4pi.com>2013-02-25 12:53:38 -0500
commit6485d75ff3ad16bbfa6f2ab1318ab99894954080 (patch)
tree7760f26029a7e5201f516634ece0cf7fcc9a4b50
parent7e62ff2f6a4c0f50b3ac3716f4594145985fcafd (diff)
- added substrate.h - needed for hooking methods and ivars at runtime
-rw-r--r--xbmc/osx/atv2/substrate.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/xbmc/osx/atv2/substrate.h b/xbmc/osx/atv2/substrate.h
new file mode 100644
index 0000000000..3cdb88b4bb
--- /dev/null
+++ b/xbmc/osx/atv2/substrate.h
@@ -0,0 +1,31 @@
+#include <string.h>
+#include <sys/types.h>
+#include <objc/runtime.h>
+#ifdef __cplusplus
+#define _default(x) = x
+extern "C" {
+#else
+#define _default(x)
+#endif
+typedef const void *MSImageRef;
+void MSHookFunction(void *symbol, void *replace, void **result);
+void *MSFindSymbol(const void *image, const char *name);
+MSImageRef MSGetImageByName(const char *file);
+
+#ifdef __APPLE__
+#ifdef __arm__
+IMP MSHookMessage(Class _class, SEL sel, IMP imp, const char *prefix _default(NULL));
+#endif
+void MSHookMessageEx(Class _class, SEL sel, IMP imp, IMP *result);
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+template <typename Type_> Type_ &MSHookIvar(id self, const char *name) {
+ Ivar ivar(class_getInstanceVariable(object_getClass(self), name));
+ void *pointer(ivar == NULL ? NULL : reinterpret_cast<char *>(self) + ivar_getOffset(ivar));
+ return *reinterpret_cast<Type_ *>(pointer);
+}
+
+