1 | /* |
2 | * GLIB Compatibility Functions |
3 | * |
4 | * Copyright IBM, Corp. 2013 |
5 | * |
6 | * Authors: |
7 | * Anthony Liguori <aliguori@us.ibm.com> |
8 | * Michael Tokarev <mjt@tls.msk.ru> |
9 | * Paolo Bonzini <pbonzini@redhat.com> |
10 | * |
11 | * This work is licensed under the terms of the GNU GPL, version 2 or later. |
12 | * See the COPYING file in the top-level directory. |
13 | * |
14 | */ |
15 | |
16 | #ifndef QEMU_GLIB_COMPAT_H |
17 | #define QEMU_GLIB_COMPAT_H |
18 | |
19 | /* Ask for warnings for anything that was marked deprecated in |
20 | * the defined version, or before. It is a candidate for rewrite. |
21 | */ |
22 | #define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_48 |
23 | |
24 | /* Ask for warnings if code tries to use function that did not |
25 | * exist in the defined version. These risk breaking builds |
26 | */ |
27 | #define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_48 |
28 | |
29 | #pragma GCC diagnostic push |
30 | #pragma GCC diagnostic ignored "-Wdeprecated-declarations" |
31 | |
32 | #include <glib.h> |
33 | |
34 | /* |
35 | * Note that because of the GLIB_VERSION_MAX_ALLOWED constant above, allowing |
36 | * use of functions from newer GLib via this compat header needs a little |
37 | * trickery to prevent warnings being emitted. |
38 | * |
39 | * Consider a function from newer glib-X.Y that we want to use |
40 | * |
41 | * int g_foo(const char *wibble) |
42 | * |
43 | * We must define a static inline function with the same signature that does |
44 | * what we need, but with a "_qemu" suffix e.g. |
45 | * |
46 | * static inline void g_foo_qemu(const char *wibble) |
47 | * { |
48 | * #if GLIB_CHECK_VERSION(X, Y, 0) |
49 | * g_foo(wibble) |
50 | * #else |
51 | * g_something_equivalent_in_older_glib(wibble); |
52 | * #endif |
53 | * } |
54 | * |
55 | * The #pragma at the top of this file turns off -Wdeprecated-declarations, |
56 | * ensuring this wrapper function impl doesn't trigger the compiler warning |
57 | * about using too new glib APIs. Finally we can do |
58 | * |
59 | * #define g_foo(a) g_foo_qemu(a) |
60 | * |
61 | * So now the code elsewhere in QEMU, which *does* have the |
62 | * -Wdeprecated-declarations warning active, can call g_foo(...) as normal, |
63 | * without generating warnings. |
64 | */ |
65 | |
66 | #if defined(_WIN32) && !GLIB_CHECK_VERSION(2, 50, 0) |
67 | /* |
68 | * g_poll has a problem on Windows when using |
69 | * timeouts < 10ms, so use wrapper. |
70 | */ |
71 | #define g_poll(fds, nfds, timeout) g_poll_fixed(fds, nfds, timeout) |
72 | gint g_poll_fixed(GPollFD *fds, guint nfds, gint timeout); |
73 | #endif |
74 | |
75 | #pragma GCC diagnostic pop |
76 | |
77 | #endif |
78 | |