Il ne faudrait pas que cela devienne une habitude, mais comment m'empêcher, chers lecteurs, de vous faire partager ce commentaire d'excuse d'une mauvaise foi évidente ? (trouvé là)

GHashTable *gaim_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error) {
    GHashTable *hash;

    /* we do not need to destroy strings because they are part of the message */
    hash = g_hash_table_new(g_str_hash, g_str_equal);

    do {
        char *key, *value;
        DBusMessageIter subiter;

        if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_DICT_ENTRY)
            goto error;         /* With all due respect to Dijkstra,
                                   this goto is for exception
                                   handling, and it is ok because it
                                   avoids duplication of the code
                                   responsible for destroying the hash
                                   table.  Exceptional instructions
                                   for exceptional situations. */

        dbus_message_iter_recurse(iter, &subiter);
        if (!gaim_dbus_message_iter_get_args(&subiter, error,
                                             DBUS_TYPE_STRING, &key,
                                             DBUS_TYPE_STRING, &value,
            goto error;         /* same here */

        g_hash_table_insert(hash, key, value);
    } while (dbus_message_iter_next(iter));

    return hash;

    return NULL;

add: Et juste en dessous, le scandale :

#include "dbus-bindings.c"

void *gaim_dbus_get_handle(void) {
    static int handle;

    return &handle;