1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#ifndef QEMU_GLIB_COMPAT_H
17#define QEMU_GLIB_COMPAT_H
18
19
20
21
22#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_40
23
24
25
26
27#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_40
28
29#pragma GCC diagnostic push
30#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
31
32#include <glib.h>
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66static inline gboolean g_strv_contains_qemu(const gchar *const *strv,
67 const gchar *str)
68{
69#if GLIB_CHECK_VERSION(2, 44, 0)
70 return g_strv_contains(strv, str);
71#else
72 g_return_val_if_fail(strv != NULL, FALSE);
73 g_return_val_if_fail(str != NULL, FALSE);
74
75 for (; *strv != NULL; strv++) {
76 if (g_str_equal(str, *strv)) {
77 return TRUE;
78 }
79 }
80
81 return FALSE;
82#endif
83}
84#define g_strv_contains(a, b) g_strv_contains_qemu(a, b)
85
86#if defined(_WIN32) && !GLIB_CHECK_VERSION(2, 50, 0)
87
88
89
90
91#define g_poll(fds, nfds, timeout) g_poll_fixed(fds, nfds, timeout)
92gint g_poll_fixed(GPollFD *fds, guint nfds, gint timeout);
93#endif
94
95
96#ifndef g_assert_cmpmem
97#define g_assert_cmpmem(m1, l1, m2, l2) \
98 do { \
99 gconstpointer __m1 = m1, __m2 = m2; \
100 int __l1 = l1, __l2 = l2; \
101 if (__l1 != __l2) { \
102 g_assertion_message_cmpnum( \
103 G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
104 #l1 " (len(" #m1 ")) == " #l2 " (len(" #m2 "))", __l1, "==", \
105 __l2, 'i'); \
106 } else if (memcmp(__m1, __m2, __l1) != 0) { \
107 g_assertion_message(G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, \
108 "assertion failed (" #m1 " == " #m2 ")"); \
109 } \
110 } while (0)
111#endif
112
113#pragma GCC diagnostic pop
114
115#endif
116