qemu/include/glib-compat.h
/*
 * Note that because of the GLIB_VERSION_MAX_ALLOWED constant above, allowing
 * use of functions from newer GLib via this compat header needs a little
 * trickery to prevent warnings being emitted.
 *
 * Consider a function from newer glib-X.Y that we want to use
 *
 *    int g_foo(const char *wibble)
 *
 * We must define a static inline function with the same signature that does
 * what we need, but with a "_qemu" suffix e.g.
 *
 * static inline void g_foo_qemu(const char *wibble)
 * {
 *     #if GLIB_CHECK_VERSION(X, Y, 0)
 *        g_foo(wibble)
 *     #else
 *        g_something_equivalent_in_older_glib(wibble);
 *     #endif
 * }
 *
 * The #pragma at the top of this file turns off -Wdeprecated-declarations,
 * ensuring this wrapper function impl doesn't trigger the compiler warning
 * about using too new glib APIs. Finally we can do
 *
 *   #define g_foo(a) g_foo_qemu(a)
 *
 * So now the code elsewhere in QEMU, which *does* have the
 * -Wdeprecated-declarations warning active, can call g_foo(...) as normal,
 * without generating warnings.
 */
Note that because of the GLIB_VERSION_MAX_ALLOWED constant above, allowing
use of functions from newer GLib via this compat header needs a little
trickery to prevent warnings being emitted.

Consider a function from newer glib-X.Y that we want to use



We must define a static inline function with the same signature that does
what we need, but with a "_qemu" suffix e.g.



The #pragma at the top of this file turns off -Wdeprecated-declarations,
ensuring this wrapper function impl doesn't trigger the compiler warning
about using too new glib APIs. Finally we can do



So now the code elsewhere in QEMU, which *does* have the
-Wdeprecated-declarations warning active, can call g_foo(...) as normal,
without generating warnings.
Note that because of the GLIB_VERSION_MAX_ALLOWED constant above allowing use of functions from newer GLib via this compat header needs a little trickery to prevent warnings being emitted . Consider a function from newer glib - X . Y that we want to use We must define a static inline function with the same signature that does what we need but with a " _qemu " suffix e . g . The #pragma at the top of this file turns off - Wdeprecated - declarations ensuring this wrapper function impl doesn ' t trigger the compiler warning about using too new glib APIs . Finally we can do So now the code elsewhere in QEMU which * does * have the - Wdeprecated - declarations warning active can call g_foo ( ... ) as normal without generating warnings .
static inline gboolean g_strv_contains_qemu(const gchar *const *strv,
                                            const gchar *str)
{
#if GLIB_CHECK_VERSION(2, 44, 0)
    return g_strv_contains(strv, str);
#else
    g_return_val_if_fail(strv != NULL, FALSE);
    g_return_val_if_fail(str != NULL, FALSE);
    for (; *strv != NULL; strv++) {
        if (g_str_equal(str, *strv)) {
            return TRUE;
        }
    }
    return FALSE;
#endif
}
static inline gboolean g_strv_contains_qemu ( const gchar * const * strv , const gchar * str ) { #if GLIB_CHECK_VERSION ( 2 , 44 , 0 ) return g_strv_contains ( strv , str ) ; #else g_return_val_if_fail ( strv != NULL , FALSE ) ; g_return_val_if_fail ( str != NULL , FALSE ) ; for ( ; * strv != NULL ; strv ++ ) { if ( g_str_equal ( str , * strv ) ) { return TRUE ; } } return FALSE ; #endif }
Note that because of the GLIB_VERSION_MAX_ALLOWED constant above, allowing
 use of functions from newer GLib via this compat header needs a little
 trickery to prevent warnings being emitted.
Note that because of the GLIB_VERSION_MAX_ALLOWED constant above allowing use of functions from newer GLib via this compat header needs a little trickery to prevent warnings being emitted .