about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-03 12:26:38 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-03 12:26:38 +0200
commite2492a142613caeda4e85b9d9762e0697aacc9de (patch)
treedbe8d2c41a57afcf9a5a847ee9a537f52ee16229 /src
parentf750391c2eec3e22a38714057333c1ba9830babc (diff)
downloadbox64-e2492a142613caeda4e85b9d9762e0697aacc9de.tar.gz
box64-e2492a142613caeda4e85b9d9762e0697aacc9de.zip
[BOX32][WRAPPER] Added full wrapped support for 32bits libudev0 and libudev1
Diffstat (limited to 'src')
-rwxr-xr-xsrc/include/myalign32.h2
-rw-r--r--src/library_list_32.h4
-rw-r--r--src/wrapped32/generated/functions_list.txt7
-rw-r--r--src/wrapped32/generated/wrappedudev0defs32.h8
-rw-r--r--src/wrapped32/generated/wrappedudev0types32.h17
-rw-r--r--src/wrapped32/generated/wrappedudev0undefs32.h8
-rw-r--r--src/wrapped32/generated/wrappedudev1defs32.h8
-rw-r--r--src/wrapped32/generated/wrappedudev1types32.h19
-rw-r--r--src/wrapped32/generated/wrappedudev1undefs32.h8
-rw-r--r--src/wrapped32/generated/wrapper32.c6
-rw-r--r--src/wrapped32/generated/wrapper32.h3
-rw-r--r--src/wrapped32/wrappedudev0.c41
-rw-r--r--src/wrapped32/wrappedudev0_private.h9
-rw-r--r--src/wrapped32/wrappedudev1.c69
-rw-r--r--src/wrapped32/wrappedudev1_private.h96
15 files changed, 304 insertions, 1 deletions
diff --git a/src/include/myalign32.h b/src/include/myalign32.h
index 93844ad7..bf382c65 100755
--- a/src/include/myalign32.h
+++ b/src/include/myalign32.h
@@ -56,7 +56,7 @@ typedef struct  va_list {
 #define CONVERT_VALIST_32(A)                                     \
   va_list sysv_varargs;                                          \
   sysv_varargs.__gr_offs=(8*8);                                  \
-  sysv_varargs.__vr_offs=(8*16));                                \
+  sysv_varargs.__vr_offs=(8*16);                                 \
   sysv_varargs.__stack=(A);
 
 
diff --git a/src/library_list_32.h b/src/library_list_32.h
index f7aa542f..300fac33 100644
--- a/src/library_list_32.h
+++ b/src/library_list_32.h
@@ -44,6 +44,10 @@ GO("openal.so", openal)
 GO("libexpat.so.1", expat)
 GO("libexpat.so", expat)
 
+GO("libudev.so.0", udev0)
+GO("libudev.so.1", udev1)
+GO("libudev.so", udev1)
+
 GO("crashhandler.so", crashhandler)
 GO("libtcmalloc_minimal.so.0", tcmallocminimal)
 GO("libtcmalloc_minimal.so.4", tcmallocminimal)
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index 5ded8f65..e2c60905 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -142,6 +142,7 @@
 #() iFua -> iFua
 #() iFpi -> iFpi
 #() iFpu -> iFpu
+#() iFpU -> iFpU
 #() iFpl -> iFpl
 #() iFpL -> iFpL
 #() iFpp -> iFpp
@@ -347,6 +348,7 @@
 #() iFpuC -> iFpuC
 #() iFpuu -> iFpuu
 #() iFpuU -> iFpuU
+#() iFpUU -> iFpUU
 #() iFpfu -> iFpfu
 #() iFpLi -> iFpLi
 #() iFpLp -> iFpLp
@@ -415,6 +417,7 @@
 #() pFupi -> pFupi
 #() pFupp -> pFupp
 #() pFLpi -> pFLpi
+#() pFpcU -> pFpcU
 #() pFpii -> pFpii
 #() pFpiu -> pFpiu
 #() pFpiL -> pFpiL
@@ -1804,3 +1807,7 @@ wrappedtcmallocminimal:
   - mmap
 - pFpLiiiI:
   - mmap64
+wrappedudev0:
+wrappedudev1:
+- vFpp:
+  - udev_set_log_fn
diff --git a/src/wrapped32/generated/wrappedudev0defs32.h b/src/wrapped32/generated/wrappedudev0defs32.h
new file mode 100644
index 00000000..da982e11
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev0defs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev0DEFS32_H_
+#define __wrappedudev0DEFS32_H_
+
+
+#endif // __wrappedudev0DEFS32_H_
diff --git a/src/wrapped32/generated/wrappedudev0types32.h b/src/wrapped32/generated/wrappedudev0types32.h
new file mode 100644
index 00000000..e5c033bb
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev0types32.h
@@ -0,0 +1,17 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev0TYPES32_H_
+#define __wrappedudev0TYPES32_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+
+#define SUPER() ADDED_FUNCTIONS()
+
+#endif // __wrappedudev0TYPES32_H_
diff --git a/src/wrapped32/generated/wrappedudev0undefs32.h b/src/wrapped32/generated/wrappedudev0undefs32.h
new file mode 100644
index 00000000..b14de87d
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev0undefs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev0UNDEFS32_H_
+#define __wrappedudev0UNDEFS32_H_
+
+
+#endif // __wrappedudev0UNDEFS32_H_
diff --git a/src/wrapped32/generated/wrappedudev1defs32.h b/src/wrapped32/generated/wrappedudev1defs32.h
new file mode 100644
index 00000000..065f83e3
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev1defs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev1DEFS32_H_
+#define __wrappedudev1DEFS32_H_
+
+
+#endif // __wrappedudev1DEFS32_H_
diff --git a/src/wrapped32/generated/wrappedudev1types32.h b/src/wrapped32/generated/wrappedudev1types32.h
new file mode 100644
index 00000000..774e668a
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev1types32.h
@@ -0,0 +1,19 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev1TYPES32_H_
+#define __wrappedudev1TYPES32_H_
+
+#ifndef LIBNAME
+#error You should only #include this file inside a wrapped*.c file
+#endif
+#ifndef ADDED_FUNCTIONS
+#define ADDED_FUNCTIONS() 
+#endif
+
+typedef void (*vFpp_t)(void*, void*);
+
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(udev_set_log_fn, vFpp_t)
+
+#endif // __wrappedudev1TYPES32_H_
diff --git a/src/wrapped32/generated/wrappedudev1undefs32.h b/src/wrapped32/generated/wrappedudev1undefs32.h
new file mode 100644
index 00000000..7e3d7433
--- /dev/null
+++ b/src/wrapped32/generated/wrappedudev1undefs32.h
@@ -0,0 +1,8 @@
+/*********************************************************************
+ * File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
+ *********************************************************************/
+#ifndef __wrappedudev1UNDEFS32_H_
+#define __wrappedudev1UNDEFS32_H_
+
+
+#endif // __wrappedudev1UNDEFS32_H_
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index 462c6319..8d84f2cd 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -232,6 +232,7 @@ typedef int32_t (*iFup_t)(uint32_t, void*);
 typedef int32_t (*iFua_t)(uint32_t, void*);
 typedef int32_t (*iFpi_t)(void*, int32_t);
 typedef int32_t (*iFpu_t)(void*, uint32_t);
+typedef int32_t (*iFpU_t)(void*, uint64_t);
 typedef int32_t (*iFpl_t)(void*, intptr_t);
 typedef int32_t (*iFpL_t)(void*, uintptr_t);
 typedef int32_t (*iFpp_t)(void*, void*);
@@ -437,6 +438,7 @@ typedef int32_t (*iFpip_t)(void*, int32_t, void*);
 typedef int32_t (*iFpuC_t)(void*, uint32_t, uint8_t);
 typedef int32_t (*iFpuu_t)(void*, uint32_t, uint32_t);
 typedef int32_t (*iFpuU_t)(void*, uint32_t, uint64_t);
+typedef int32_t (*iFpUU_t)(void*, uint64_t, uint64_t);
 typedef int32_t (*iFpfu_t)(void*, float, uint32_t);
 typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t);
 typedef int32_t (*iFpLp_t)(void*, uintptr_t, void*);
@@ -505,6 +507,7 @@ typedef void* (*pFulu_t)(uint32_t, intptr_t, uint32_t);
 typedef void* (*pFupi_t)(uint32_t, void*, int32_t);
 typedef void* (*pFupp_t)(uint32_t, void*, void*);
 typedef void* (*pFLpi_t)(uintptr_t, void*, int32_t);
+typedef void* (*pFpcU_t)(void*, int8_t, uint64_t);
 typedef void* (*pFpii_t)(void*, int32_t, int32_t);
 typedef void* (*pFpiu_t)(void*, int32_t, uint32_t);
 typedef void* (*pFpiL_t)(void*, int32_t, uintptr_t);
@@ -1338,6 +1341,7 @@ void iFup_32(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_EAX = fn
 void iFua_32(x64emu_t *emu, uintptr_t fcn) { iFua_t fn = (iFua_t)fcn; R_EAX = fn(from_ptri(uint32_t, R_ESP + 4), from_locale(from_ptri(ptr_t, R_ESP + 8))); }
 void iFpi_32(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8)); }
 void iFpu_32(x64emu_t *emu, uintptr_t fcn) { iFpu_t fn = (iFpu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8)); }
+void iFpU_32(x64emu_t *emu, uintptr_t fcn) { iFpU_t fn = (iFpU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint64_t, R_ESP + 8)); }
 void iFpl_32(x64emu_t *emu, uintptr_t fcn) { iFpl_t fn = (iFpl_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_long(from_ptri(long_t, R_ESP + 8))); }
 void iFpL_32(x64emu_t *emu, uintptr_t fcn) { iFpL_t fn = (iFpL_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8))); }
 void iFpp_32(x64emu_t *emu, uintptr_t fcn) { iFpp_t fn = (iFpp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8)); }
@@ -1543,6 +1547,7 @@ void iFpip_32(x64emu_t *emu, uintptr_t fcn) { iFpip_t fn = (iFpip_t)fcn; R_EAX =
 void iFpuC_32(x64emu_t *emu, uintptr_t fcn) { iFpuC_t fn = (iFpuC_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint8_t, R_ESP + 12)); }
 void iFpuu_32(x64emu_t *emu, uintptr_t fcn) { iFpuu_t fn = (iFpuu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); }
 void iFpuU_32(x64emu_t *emu, uintptr_t fcn) { iFpuU_t fn = (iFpuU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12)); }
+void iFpUU_32(x64emu_t *emu, uintptr_t fcn) { iFpUU_t fn = (iFpUU_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(uint64_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 16)); }
 void iFpfu_32(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), from_ptri(float, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12)); }
 void iFpLi_32(x64emu_t *emu, uintptr_t fcn) { iFpLi_t fn = (iFpLi_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12)); }
 void iFpLp_32(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_EAX = fn(from_ptriv(R_ESP + 4), to_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12)); }
@@ -1611,6 +1616,7 @@ void pFulu_32(x64emu_t *emu, uintptr_t fcn) { pFulu_t fn = (pFulu_t)fcn; R_EAX =
 void pFupi_32(x64emu_t *emu, uintptr_t fcn) { pFupi_t fn = (pFupi_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void pFupp_32(x64emu_t *emu, uintptr_t fcn) { pFupp_t fn = (pFupp_t)fcn; R_EAX = to_ptrv(fn(from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptriv(R_ESP + 12))); }
 void pFLpi_32(x64emu_t *emu, uintptr_t fcn) { pFLpi_t fn = (pFLpi_t)fcn; R_EAX = to_ptrv(fn(to_ulong(from_ptri(ulong_t, R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
+void pFpcU_32(x64emu_t *emu, uintptr_t fcn) { pFpcU_t fn = (pFpcU_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int8_t, R_ESP + 8), from_ptri(uint64_t, R_ESP + 12))); }
 void pFpii_32(x64emu_t *emu, uintptr_t fcn) { pFpii_t fn = (pFpii_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12))); }
 void pFpiu_32(x64emu_t *emu, uintptr_t fcn) { pFpiu_t fn = (pFpiu_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12))); }
 void pFpiL_32(x64emu_t *emu, uintptr_t fcn) { pFpiL_t fn = (pFpiL_t)fcn; R_EAX = to_ptrv(fn(from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), to_ulong(from_ptri(ulong_t, R_ESP + 12)))); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index a74460da..07e5e0f0 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -183,6 +183,7 @@ void iFup_32(x64emu_t *emu, uintptr_t fnc);
 void iFua_32(x64emu_t *emu, uintptr_t fnc);
 void iFpi_32(x64emu_t *emu, uintptr_t fnc);
 void iFpu_32(x64emu_t *emu, uintptr_t fnc);
+void iFpU_32(x64emu_t *emu, uintptr_t fnc);
 void iFpl_32(x64emu_t *emu, uintptr_t fnc);
 void iFpL_32(x64emu_t *emu, uintptr_t fnc);
 void iFpp_32(x64emu_t *emu, uintptr_t fnc);
@@ -388,6 +389,7 @@ void iFpip_32(x64emu_t *emu, uintptr_t fnc);
 void iFpuC_32(x64emu_t *emu, uintptr_t fnc);
 void iFpuu_32(x64emu_t *emu, uintptr_t fnc);
 void iFpuU_32(x64emu_t *emu, uintptr_t fnc);
+void iFpUU_32(x64emu_t *emu, uintptr_t fnc);
 void iFpfu_32(x64emu_t *emu, uintptr_t fnc);
 void iFpLi_32(x64emu_t *emu, uintptr_t fnc);
 void iFpLp_32(x64emu_t *emu, uintptr_t fnc);
@@ -456,6 +458,7 @@ void pFulu_32(x64emu_t *emu, uintptr_t fnc);
 void pFupi_32(x64emu_t *emu, uintptr_t fnc);
 void pFupp_32(x64emu_t *emu, uintptr_t fnc);
 void pFLpi_32(x64emu_t *emu, uintptr_t fnc);
+void pFpcU_32(x64emu_t *emu, uintptr_t fnc);
 void pFpii_32(x64emu_t *emu, uintptr_t fnc);
 void pFpiu_32(x64emu_t *emu, uintptr_t fnc);
 void pFpiL_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedudev0.c b/src/wrapped32/wrappedudev0.c
new file mode 100644
index 00000000..b9d4f6d7
--- /dev/null
+++ b/src/wrapped32/wrappedudev0.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+#include <stdarg.h>
+
+#include "wrappedlibs.h"
+
+#include "wrapper32.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "debug.h"
+#include "myalign32.h"
+#include "callback.h"
+#include "emu/x64emu_private.h"
+
+static const char* udev0Name = "libudev.so.0";
+#define LIBNAME udev0
+
+#define ADDED_FUNCTIONS()           \
+
+//#include "generated/wrappedudev0types.h"
+
+//#include "wrappercallback.h"
+
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)   \
+GO(4)
+
+#undef SUPER
+
+#define ALTMY my0_
+
+#define NEEDED_LIBS "libudev.so.1"
+
+#include "wrappedlib_init32.h"
diff --git a/src/wrapped32/wrappedudev0_private.h b/src/wrapped32/wrappedudev0_private.h
new file mode 100644
index 00000000..fa89c34d
--- /dev/null
+++ b/src/wrapped32/wrappedudev0_private.h
@@ -0,0 +1,9 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh....
+#endif
+
+GO(udev_get_dev_path, pFp)
+GO(udev_get_run_path, pFp)
+GO(udev_get_sys_path, pFp)
+GO(udev_monitor_new_from_socket, pFpp)
+GO(udev_queue_get_failed_list_entry, pFp)
diff --git a/src/wrapped32/wrappedudev1.c b/src/wrapped32/wrappedudev1.c
new file mode 100644
index 00000000..00cc23ec
--- /dev/null
+++ b/src/wrapped32/wrappedudev1.c
@@ -0,0 +1,69 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#define _GNU_SOURCE         /* See feature_test_macros(7) */
+#include <dlfcn.h>
+#include <stdarg.h>
+
+#include "wrappedlibs.h"
+
+#include "wrapper32.h"
+#include "bridge.h"
+#include "librarian/library_private.h"
+#include "x64emu.h"
+#include "debug.h"
+#include "myalign32.h"
+#include "callback.h"
+#include "emu/x64emu_private.h"
+
+static const char* udev1Name = "libudev.so.1";
+#define LIBNAME udev1
+// fallback to 0 version... Not sure if really correct (probably not)
+#define ALTNAME "libudev.so.0"
+
+#define ADDED_FUNCTIONS()           \
+
+#include "generated/wrappedudev1types32.h"
+
+#include "wrappercallback32.h"
+
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)   \
+GO(4)
+
+// log_fn ...
+#define GO(A)   \
+static uintptr_t my_log_fn_fct_##A = 0;                                                                 \
+static void my_log_fn_##A(void* udev, int p, void *f, int l, void* fn, void* fmt, va_list args)         \
+{                                                                                                       \
+    static char buff[1024];                                                                             \
+    vsnprintf(buff, 1023, fmt, args);                                                                   \
+    buff[1023]=0;                                                                                       \
+    RunFunction(my_log_fn_fct_##A, 7, udev, p, f, l, fn, "%s", buff);                                   \
+}
+SUPER()
+#undef GO
+static void* find_log_fn_Fct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_log_fn_fct_##A == (uintptr_t)fct) return my_log_fn_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_log_fn_fct_##A == 0) {my_log_fn_fct_##A = (uintptr_t)fct; return my_log_fn_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for udev1 log_fn callback\n");
+    return NULL;
+}
+#undef SUPER
+
+EXPORT void my32_udev_set_log_fn(x64emu_t* emu, void* udev, void* f)
+{
+    my->udev_set_log_fn(udev, find_log_fn_Fct(f));
+}
+
+#include "wrappedlib_init32.h"
diff --git a/src/wrapped32/wrappedudev1_private.h b/src/wrapped32/wrappedudev1_private.h
new file mode 100644
index 00000000..0eb88ce3
--- /dev/null
+++ b/src/wrapped32/wrappedudev1_private.h
@@ -0,0 +1,96 @@
+#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA))
+#error Meh...
+#endif
+
+GO(udev_device_ref, pFp)
+GO(udev_device_unref, pFp)
+GO(udev_device_get_udev, pFp)
+GO(udev_device_new_from_syspath, pFpp)
+GO(udev_device_new_from_devnum, pFpcU)
+GO(udev_device_new_from_subsystem_sysname, pFppp)
+GO(udev_device_new_from_environment, pFp)
+GO(udev_device_get_parent, pFp)
+GO(udev_device_get_parent_with_subsystem_devtype, pFppp)
+GO(udev_device_get_devpath, pFp)
+GO(udev_device_get_subsystem, pFp)
+GO(udev_device_get_devtype, pFp)
+GO(udev_device_get_syspath, pFp)
+GO(udev_device_get_sysname, pFp)
+GO(udev_device_get_sysnum, pFp)
+GO(udev_device_get_devnode, pFp)
+GO(udev_device_get_is_initialized, iFp)
+GO(udev_device_get_devlinks_list_entry, pFp)
+GO(udev_device_get_properties_list_entry, pFp)
+GO(udev_device_get_tags_list_entry, pFp)
+GO(udev_device_get_property_value, pFpp)
+GO(udev_device_get_driver, pFp)
+GO(udev_device_get_devnum, UFp)
+GO(udev_device_get_action, pFp)
+GO(udev_device_get_sysattr_value, pFpp)
+GO(udev_device_get_sysattr_list_entry, pFp)
+GO(udev_device_get_seqnum, UFp)
+GO(udev_device_get_usec_since_initialized, UFp)
+GO(udev_device_has_tag, iFpp)
+GO(udev_enumerate_ref, pFp)
+GO(udev_enumerate_unref, pFp)
+GO(udev_enumerate_get_udev, pFp)
+GO(udev_enumerate_new, pFp)
+GO(udev_enumerate_add_match_subsystem, iFpp)
+GO(udev_enumerate_add_nomatch_subsystem, iFpp)
+GO(udev_enumerate_add_match_sysattr, iFppp)
+GO(udev_enumerate_add_nomatch_sysattr, iFppp)
+GO(udev_enumerate_add_match_property, iFppp)
+GO(udev_enumerate_add_match_tag, iFpp)
+GO(udev_enumerate_add_match_parent, iFpp)
+GO(udev_enumerate_add_match_is_initialized, iFp)
+GO(udev_enumerate_add_match_sysname, iFpp)
+GO(udev_enumerate_add_syspath, iFpp)
+GO(udev_enumerate_scan_devices, iFp)
+GO(udev_enumerate_scan_subsystems, iFp)
+GO(udev_enumerate_get_list_entry, pFp)
+GO(udev_list_entry_get_next, pFp)
+GO(udev_list_entry_get_by_name, pFpp)
+GO(udev_list_entry_get_name, pFp)
+GO(udev_list_entry_get_value, pFp)
+GO(udev_monitor_ref, pFp)
+GO(udev_monitor_unref, pFp)
+GO(udev_monitor_get_udev, pFp)
+GO(udev_monitor_new_from_netlink, pFpp)
+GO(udev_monitor_new_from_socket, pFpp)
+GO(udev_monitor_enable_receiving, iFp)
+GO(udev_monitor_set_receive_buffer_size, iFpi)
+GO(udev_monitor_get_fd, iFp)
+GO(udev_monitor_receive_device, pFp)
+GO(udev_monitor_filter_add_match_subsystem_devtype, iFppp)
+GO(udev_monitor_filter_add_match_tag, iFpp)
+GO(udev_monitor_filter_update, iFp)
+GO(udev_monitor_filter_remove, iFp)
+GO(udev_new, pFv)
+GO(udev_ref, pFp)
+GO(udev_unref, pFp)
+GO(udev_queue_ref, pFp)
+GO(udev_queue_unref, pFp)
+GO(udev_queue_get_udev, pFp)
+GO(udev_queue_new, pFp)
+GO(udev_queue_get_kernel_seqnum, UFp)
+GO(udev_queue_get_udev_seqnum, UFp)
+GO(udev_queue_get_udev_is_active, iFp)
+GO(udev_queue_get_queue_is_empty, iFp)
+GO(udev_queue_get_seqnum_is_finished, iFpU)
+GO(udev_queue_get_seqnum_sequence_is_finished, iFpUU)
+GO(udev_queue_get_queued_list_entry, pFp)
+GO(udev_queue_get_failed_list_entry, pFp)
+GOM(udev_set_log_fn, vFEpp)
+GO(udev_get_log_priority, iFp)
+GO(udev_set_log_priority, vFpi)
+GO(udev_get_userdata, pFp)
+GO(udev_set_userdata, vFpp)
+GO(udev_device_new_from_device_id, pFpp)
+GO(udev_device_set_sysattr_value, iFppp)
+GO(udev_queue_get_fd, iFp)
+GO(udev_queue_flush, iFp)
+GO(udev_hwdb_ref, pFp)
+GO(udev_hwdb_unref, pFp)
+GO(udev_hwdb_new, pFp)
+GO(udev_hwdb_get_properties_list_entry, pFppu)
+GO(udev_util_encode_string, iFppL)