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 Embedded weblog - Tag - code of the day2014-05-14T10:00:05+02:00Gilles Blancurn:md5:b402c09b50e67198753bdd4269dc5b19Dotclearacceptable valuesurn:md5:0e2c7522fed265227cb3d05bc6290e342010-03-11T11:38:00+01:00gblancinformatiquecode of the day <code>}<br /><br />static int<br />dacmdsizesysctl(SYSCTL_HANDLER_ARGS)<br />{<br /> int error, value;<br /><br /> value = *(int *)arg1;<br /><br /> error = sysctl_handle_int(oidp, &value, 0, req);<br /><br /> if ((error != 0)<br /> || (req->newptr == NULL))<br /> return (error);<br /><br /> /*<br /> * Acceptable values here are 6, 10, 12 or 16.<br /> */<br /> if (value < 6)<br /> value = 6;<br /> else if ((value > 6)<br /> && (value <= 10))<br /> value = 10;<br /> else if ((value > 10)<br /> && (value <= 12))<br /> value = 12;<br /> else if (value > 12)<br /> value = 16;<br /><br /> *(int *)arg1 = value;<br /><br /> return (0);<br />}<br /><br />static cam_status<br />daregister(struct cam_periph *periph, void *arg)
</code>
<p>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 <a hreflang="en" href="http://www.freebsd.org/cgi/cvsweb.cgi/%7Echeckout%7E/src/sys/cam/scsi/scsi_da.c?rev=1.236.2.9;content-type=text%2Fplain">freebsd</a>.</p>commentaire expiatoire du joururn:md5:858a2d1c813f18cad56acba5abc0b4db2010-01-25T17:48:00+01:00gblancinformatiquecode of the day <p>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 ? (<a hreflang="fr" href="http://www.google.com/codesearch/p?hl=fr#EKZaOgYQHwo/unstable/sources/gaim_gaim.cvs.sourceforge.net__20050904.tar.gz%7C1tXPiNJXXQk/gaim/src/dbus-server.c&q=gaim&d=5&l=343">trouvé là</a>)<br /><br /><code>GHashTable *gaim_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error) {<br /> GHashTable *hash;<br /><br /> /* we do not need to destroy strings because they are part of the message */<br /> hash = g_hash_table_new(g_str_hash, g_str_equal);<br /><br /> do {<br /> char *key, *value;<br /> DBusMessageIter subiter;<br /><br /> if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_DICT_ENTRY)<br /> goto error; /* With all due respect to Dijkstra,<br /> this goto is for exception<br /> handling, and it is ok because it<br /> avoids duplication of the code<br /> responsible for destroying the hash<br /> table. Exceptional instructions<br /> for exceptional situations. */<br /><br /> dbus_message_iter_recurse(iter, &subiter);<br /> if (!gaim_dbus_message_iter_get_args(&subiter, error,<br /> DBUS_TYPE_STRING, &key,<br /> DBUS_TYPE_STRING, &value,<br /> DBUS_TYPE_INVALID))<br /> goto error; /* same here */<br /><br /> g_hash_table_insert(hash, key, value);<br /> } while (dbus_message_iter_next(iter));<br /><br /> return hash;<br /><br /> error:<br /> g_hash_table_destroy(hash);<br /> return NULL;<br />}</code></p>
<p><strong><em>add:</em></strong> Et juste en dessous, le scandale :</p>
<p><code>#include "dbus-bindings.c"<br /><br />void *gaim_dbus_get_handle(void) {<br /> static int handle;<br /><br /> return &handle;<br />}</code></p>le code geekesque du joururn:md5:c6b0f32b6991b1dfca141982c3363c092010-01-18T11:32:00+01:00gblancinformatiquecode of the day <pre><code><code><span class="hl kwb">static void</span><br /><span class="hl kwd">to_be_or_not_to_be</span> <span class="hl sym">(</span><span class="hl kwb">void</span><span class="hl sym">)</span><br /><span class="hl sym">{</span><br /> <span class="hl com">/*</span><br /><span class="hl com"> * If all of the options that control our policy are disabled, then we</span><br /><span class="hl com"> * have no point in living. Save the user some memory and exit.</span><br /><span class="hl com"> */</span><br /> <span class="hl com">/* you used to say live and let live... */</span><br /> gboolean live <span class="hl sym">=</span> FALSE<span class="hl sym">;</span><br /> <span class="hl kwb">size_t</span> i<span class="hl sym">;</span><br /><br /> <span class="hl com">/* ...but in this ever changing world in which we live in... */</span><br /> <span class="hl kwa">for</span> <span class="hl sym">(</span>i <span class="hl sym">=</span> <span class="hl num">0</span><span class="hl sym">;</span> i <span class="hl sym"><</span> <span class="hl kwd">G_N_ELEMENTS</span> <span class="hl sym">(</span>gvm_settings<span class="hl sym">) && !</span>live<span class="hl sym">;</span> i<span class="hl sym">++) {</span><br /> <span class="hl kwa">if</span> <span class="hl sym">(</span>gvm_settings<span class="hl sym">[</span>i<span class="hl sym">].</span>type <span class="hl sym">==</span> TYPE_BOOL<span class="hl sym">)</span><br /> live <span class="hl sym">= *((</span><span class="hl kwb">int</span> <span class="hl sym">*)</span> gvm_settings<span class="hl sym">[</span>i<span class="hl sym">].</span>var<span class="hl sym">);</span><br /> <span class="hl sym">}</span><br /><br /> <span class="hl com">/* makes you give it a cry... */</span><br /> <span class="hl kwa">if</span> <span class="hl sym">(!</span>live<span class="hl sym">) {</span><br /> <span class="hl kwd">dbg</span> <span class="hl sym">(</span><span class="hl str">"daemon exit: live and let die</span><span class="hl esc">
</span><span class="hl str">"</span><span class="hl sym">);</span><br /> <span class="hl kwd">exit</span> <span class="hl sym">(</span>EXIT_SUCCESS<span class="hl sym">);</span><br /> <span class="hl sym">}</span><br /><span class="hl sym">}</span></code></code></pre><p>Toi aussi, amuse-toi à compter les références dans ce morceau <a hreflang="C" href="http://git.gnome.org/browse/gnome-volume-manager/tree/src/manager.c">de code</a>...</p>le code qui fait mal aux yeux du joururn:md5:69cb7b5d65a9068de1ae7fb57c1692f92009-12-02T11:56:00+01:00gblancinformatiquecode of the dayprogrammation <p>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, <a hreflang="fr" href="http://www.xorax.info/blog/programmation/103-sleep-wait-pause-javascript.html">on trouve</a> des solutions de callback scabreuse, et une vieille méthode, qui comment dire, bref...</p>
<p><code>function sleep(time){<br /> var start = date.getTime();<br /> while(start+time > date.getTime()) true;<br /> return;<br /> }</code></p>
<p>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 :</p>
<p><blockquote><p>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.</p>
</blockquote></p>
<p>J'en pense de même pour les créateurs du Javascript...</p>