Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 222

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 224

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/public/lib.urlhandlers.php on line 65

Warning: Cannot modify header information - headers already sent by (output started at /home/gillesbld/www/weblog/inc/config.php:41) in /home/gillesbld/www/weblog/inc/clearbricks/common/lib.http.php on line 247
Tag - code of the day - Embedded weblog

Embedded weblog

Aller au contenu | Aller au menu | Aller à la recherche

Tag - code of the day

Fil des billets - Fil des commentaires

jeudi, mars 11 2010

acceptable values

}

static int
dacmdsizesysctl(SYSCTL_HANDLER_ARGS)
{
    int error, value;

    value = *(int *)arg1;

    error = sysctl_handle_int(oidp, &value, 0, req);

    if ((error != 0)
     || (req->newptr == NULL))
        return (error);

    /*
     * Acceptable values here are 6, 10, 12 or 16.
     */
    if (value < 6)
        value = 6;
    else if ((value > 6)
          && (value <= 10))
        value = 10;
    else if ((value > 10)
          && (value <= 12))
        value = 12;
    else if (value > 12)
        value = 16;

    *(int *)arg1 = value;

    return (0);
}

static cam_status
daregister(struct cam_periph *periph, void *arg)

Au moins, ça ne manque pas d'originalité. Je vous ai mis ce qu'il y autour afin de bien se rendre compte du vide intersidéral de commentaires utiles autour de ce fabuleux effet de bord sur une variable récupérée par macro, et transvasée de manière bien folklorique (dommage que le traitement ne soit pas fait par masques de bits, tout de même !). Autour de la ligne 1010 du driver SCSI de freebsd.

lundi, janvier 25 2010

commentaire expiatoire du jour

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,
                                             DBUS_TYPE_INVALID))
            goto error;         /* same here */

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

    return hash;

 error:
    g_hash_table_destroy(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;
}

lundi, janvier 18 2010

le code geekesque du jour

static void
to_be_or_not_to_be (void)
{
/*
* If all of the options that control our policy are disabled, then we
* have no point in living. Save the user some memory and exit.
*/
/* you used to say live and let live... */
gboolean live = FALSE;
size_t i;

/* ...but in this ever changing world in which we live in... */
for (i = 0; i < G_N_ELEMENTS (gvm_settings) && !live; i++) {
if (gvm_settings[i].type == TYPE_BOOL)
live = *((int *) gvm_settings[i].var);
}

/* makes you give it a cry... */
if (!live) {
dbg ("daemon exit: live and let die ");
exit (EXIT_SUCCESS);
}
}

Toi aussi, amuse-toi à compter les références dans ce morceau de code...

mercredi, décembre 2 2009

le code qui fait mal aux yeux du jour

J'en reste sur le postérieur : il n'y a pas de fonction sleep en Javascript (gare à celui qui me demande ce que je fiche avec un truc pareil !). En cherchant sur le net, on trouve des solutions de callback scabreuse, et une vieille méthode, qui comment dire, bref...

function sleep(time){
     var start = date.getTime();
     while(start+time > date.getTime()) true;
     return;
}

J'espère que vous ne venez pas de manger. Ça ferait presque penser aux vieux temps du nop en asm pour occuper le CPU. On est en 2009, un langage de programmation ne propose pas de moyen de faire une pause autre que d'occuper 100% des ressources du CPU en attente active ; après demande aux webeux linagoriens, incrédule, confirmation a été donnée. Tout à coup, une citation de Linus Torvalds m'est revenue :

Modern PCs are horrible. ACPI is a complete design disaster in every way. But we're kind of stuck with it. If any Intel people are listening to this and you had anything to do with ACPI, shoot yourself now, before you reproduce.

J'en pense de même pour les créateurs du Javascript...