aboutsummaryrefslogtreecommitdiff
path: root/lib/darwin/xxpc.h
diff options
context:
space:
mode:
authorcomex2015-07-11 16:12:18 -0400
committercomex2015-07-11 16:12:18 -0400
commitc3ca6f01a3204ac81397d5abe77c1280d8eb0591 (patch)
tree1b25d82ae2a006993a491cf0ee03a41e6363518b /lib/darwin/xxpc.h
parentsafety-dance UI fixes (diff)
downloadsubstitute-c3ca6f01a3204ac81397d5abe77c1280d8eb0591.tar.gz
fix anti-noise
Diffstat (limited to 'lib/darwin/xxpc.h')
-rw-r--r--lib/darwin/xxpc.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/darwin/xxpc.h b/lib/darwin/xxpc.h
new file mode 100644
index 0000000..88aab7a
--- /dev/null
+++ b/lib/darwin/xxpc.h
@@ -0,0 +1,66 @@
+#pragma once
+/* distinct names to avoid incompatibility if <xpc/xpc.h> gets included somehow
+ * on OS X. No ARC support! */
+#include <dispatch/dispatch.h>
+
+typedef struct _xxpc_object {
+ int x;
+} *xxpc_object_t, *xxpc_connection_t, *xxpc_type_t;
+typedef void (^xxpc_handler_t)(xxpc_object_t);
+
+#define DEFINE_CONST(name, sym) \
+ extern struct _xxpc_object name[1] asm("_" #sym)
+
+DEFINE_CONST(XXPC_TYPE_CONNECTION, _xpc_type_connection);
+DEFINE_CONST(XXPC_TYPE_ERROR, _xpc_type_error);
+DEFINE_CONST(XXPC_TYPE_DICTIONARY, _xpc_type_dictionary);
+DEFINE_CONST(XXPC_TYPE_ARRAY, _xpc_type_array);
+DEFINE_CONST(XXPC_TYPE_STRING, _xpc_type_string);
+DEFINE_CONST(XXPC_ERROR_CONNECTION_INTERRUPTED,
+ _xpc_error_connection_interrupted);
+DEFINE_CONST(XXPC_ERROR_CONNECTION_INVALID,
+ _xpc_error_connection_invalid);
+
+
+#define XXPC_ARRAY_APPEND -1
+#define XXPC_CONNECTION_MACH_SERVICE_LISTENER 1
+
+#define WRAP(name, args...) \
+ x##name args asm("_" #name)
+
+void WRAP(xpc_release, (xxpc_object_t));
+xxpc_object_t WRAP(xpc_retain, (xxpc_object_t));
+char *WRAP(xpc_copy_description, (xxpc_object_t));
+
+xxpc_type_t WRAP(xpc_get_type, (xxpc_object_t));
+xxpc_object_t WRAP(xpc_string_create, (const char *));
+void WRAP(xpc_array_append_value, (xxpc_object_t, xxpc_object_t));
+xxpc_object_t WRAP(xpc_array_create, (const xxpc_object_t *, size_t));
+size_t WRAP(xpc_array_get_count, (const xxpc_object_t));
+xxpc_object_t WRAP(xpc_array_get_value, (xxpc_object_t, size_t));
+const char *WRAP(xpc_array_get_string, (xxpc_object_t, size_t));
+void WRAP(xpc_array_set_string, (xxpc_object_t, size_t, const char *));
+xxpc_object_t WRAP(xpc_dictionary_create, (const char *const *,
+ const xxpc_object_t *, size_t));
+
+xxpc_object_t WRAP(xpc_dictionary_create_reply, (xxpc_object_t));
+bool WRAP(xpc_dictionary_get_bool, (xxpc_object_t, const char *));
+const char *WRAP(xpc_dictionary_get_string, (xxpc_object_t, const char *));
+xxpc_object_t WRAP(xpc_dictionary_get_value, (xxpc_object_t, const char *));
+void WRAP(xpc_dictionary_set_bool, (xxpc_object_t, const char *, bool));
+void WRAP(xpc_dictionary_set_string, (xxpc_object_t, const char *, const char *));
+void WRAP(xpc_dictionary_set_value, (xxpc_object_t, const char *, xxpc_object_t));
+
+xxpc_connection_t WRAP(xpc_connection_create_mach_service, (const char *,
+ dispatch_queue_t,
+ uint64_t));
+void WRAP(xpc_connection_resume, (xxpc_connection_t));
+void WRAP(xpc_connection_set_event_handler, (xxpc_connection_t, xxpc_handler_t));
+void WRAP(xpc_connection_send_message_with_reply,
+ (xxpc_connection_t, xxpc_object_t, dispatch_queue_t, xxpc_handler_t));
+void WRAP(xpc_connection_send_message, (xxpc_connection_t, xxpc_object_t));
+void WRAP(xpc_connection_cancel, (xxpc_connection_t));
+
+#undef DEFINE_TYPE
+#undef DEFINE_CONST
+#undef WRAP