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 day 2014-05-14T10:00:05+02:00 Gilles Blanc urn:md5:b402c09b50e67198753bdd4269dc5b19 Dotclear acceptable values urn:md5:0e2c7522fed265227cb3d05bc6290e34 2010-03-11T11:38:00+01:00 gblanc informatique code of the day <code>}<br /><br />static int<br />dacmdsizesysctl(SYSCTL_HANDLER_ARGS)<br />{<br />&nbsp;&nbsp;&nbsp; int error, value;<br /><br />&nbsp;&nbsp;&nbsp; value = *(int *)arg1;<br /><br />&nbsp;&nbsp;&nbsp; error = sysctl_handle_int(oidp, &amp;value, 0, req);<br /><br />&nbsp;&nbsp;&nbsp; if ((error != 0)<br />&nbsp;&nbsp;&nbsp; &nbsp;|| (req-&gt;newptr == NULL))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return (error);<br /><br />&nbsp;&nbsp;&nbsp; /*<br />&nbsp;&nbsp;&nbsp; &nbsp;* Acceptable values here are 6, 10, 12 or 16.<br />&nbsp;&nbsp;&nbsp; &nbsp;*/<br />&nbsp;&nbsp;&nbsp; if (value &lt; 6)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value = 6;<br />&nbsp;&nbsp;&nbsp; else if ((value &gt; 6)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (value &lt;= 10))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value = 10;<br />&nbsp;&nbsp;&nbsp; else if ((value &gt; 10)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (value &lt;= 12))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value = 12;<br />&nbsp;&nbsp;&nbsp; else if (value &gt; 12)<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value = 16;<br /><br />&nbsp;&nbsp;&nbsp; *(int *)arg1 = value;<br /><br />&nbsp;&nbsp;&nbsp; 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 jour urn:md5:858a2d1c813f18cad56acba5abc0b4db 2010-01-25T17:48:00+01:00 gblanc informatique code 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&amp;q=gaim&amp;d=5&amp;l=343">trouvé là</a>)<br /><br /><code>GHashTable *gaim_dbus_iter_hash_table(DBusMessageIter *iter, DBusError *error) {<br />&nbsp;&nbsp;&nbsp; GHashTable *hash;<br /><br />&nbsp;&nbsp;&nbsp; /* we do not need to destroy strings because they are part of the message */<br />&nbsp;&nbsp;&nbsp; hash = g_hash_table_new(g_str_hash, g_str_equal);<br /><br />&nbsp;&nbsp;&nbsp; do {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *key, *value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBusMessageIter subiter;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_DICT_ENTRY)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* With all due respect to Dijkstra,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this goto is for exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handling, and it is ok because it<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; avoids duplication of the code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; responsible for destroying the hash<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; table.&nbsp; Exceptional instructions<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for exceptional situations. */<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_message_iter_recurse(iter, &amp;subiter);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!gaim_dbus_message_iter_get_args(&amp;subiter, error,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBUS_TYPE_STRING, &amp;key,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBUS_TYPE_STRING, &amp;value,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBUS_TYPE_INVALID))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto error;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* same here */<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_hash_table_insert(hash, key, value);<br />&nbsp;&nbsp;&nbsp; } while (dbus_message_iter_next(iter));<br /><br />&nbsp;&nbsp;&nbsp; return hash;<br /><br />&nbsp;error:<br />&nbsp;&nbsp;&nbsp; g_hash_table_destroy(hash);<br />&nbsp;&nbsp;&nbsp; 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 />&nbsp;&nbsp;&nbsp; static int handle;<br /><br />&nbsp;&nbsp;&nbsp; return &amp;handle;<br />}</code></p> le code geekesque du jour urn:md5:c6b0f32b6991b1dfca141982c3363c09 2010-01-18T11:32:00+01:00 gblanc informatique code 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">&lt;</span> <span class="hl kwd">G_N_ELEMENTS</span> <span class="hl sym">(</span>gvm_settings<span class="hl sym">) &amp;&amp; !</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 jour urn:md5:69cb7b5d65a9068de1ae7fb57c1692f9 2009-12-02T11:56:00+01:00 gblanc informatique code 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 />&nbsp;&nbsp;&nbsp;&nbsp; var start = date.getTime();<br />&nbsp;&nbsp;&nbsp;&nbsp; while(start+time &gt; date.getTime()) true;<br />&nbsp;&nbsp;&nbsp;&nbsp; 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>