<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Emile "iMil" Heitor 's home &#187; BSD</title>
	<atom:link href="http://imil.net/wp/tag/bsd/feed/" rel="self" type="application/rss+xml" />
	<link>http://imil.net/wp</link>
	<description>life, unix and stuff</description>
	<lastBuildDate>Sat, 04 Sep 2010 20:43:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>la magie des SLIST</title>
		<link>http://imil.net/wp/2009/03/14/la-magie-des-slist/</link>
		<comments>http://imil.net/wp/2009/03/14/la-magie-des-slist/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 17:21:05 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[c0daz]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=263</guid>
		<description><![CDATA[Il y a 5 ans de cela, je vous entretenais sur la beauté des SLIST, un concept issu du monde BSD permettant de facilement manipuler des listes chainées dans votre code C sans avoir à réinventer la roue à chaque code.
Comme je n&#8217;avais plus manipulé ce type d&#8217;objet depuis un certain temps, je me suis [...]]]></description>
			<content:encoded><![CDATA[<p>Il y a 5 ans de cela, <a href="http://imil.net/docs/slists.txt">je vous entretenais sur la beauté des SLIST</a>, un concept issu du monde BSD permettant de facilement manipuler des listes chainées dans votre code C sans avoir à réinventer la roue à chaque code.</p>
<p>Comme je n&#8217;avais plus manipulé ce type d&#8217;objet depuis un certain temps, je me suis replongé dans ce petit tutoriel, mais je lui ai trouvé un manque que je m&#8217;apprète à combler ici même.</p>
<p>La manipulation des <i>SLIST</i> est très aisée lorsque l&#8217;on a la possibilité de déclarer sa liste de manière globale, il suffit alors, dans chaque fonction, d&#8217;appeler la &#8220;tête de liste&#8221;, souvent appelée <code>head</code>, via les multiples macros présentes dans <code>queue.h</code>.<br />
J&#8217;ai ecrit, toujours dans la documentation sus-citée, un minuscule passage sur la façon d&#8217;utiliser les <i>SLIST</i> avec les macros <i>SLIST_FIRST</i> et <i>SLIST_NEXT</i>, mais je m&#8217;aperçois qu&#8217;on ne se rend pas compte de leur utilité.</p>
<p>Prenons le cas suivant, je veux créer une liste chainée de type <i>SLIST</i> dans une fonction. Je souhaite pouvoir ballader cette liste de fonctions en fonctions, et evidemment, la libérer à la fin de mes travaux. Nous utiliserons notre liste de la sorte :</p>
<pre>
/* headers et diverses déclarations */
#include &lt;sys/queue.h&gt;

typedef struct Mastruct {
	int id;
	char *element;
	SLIST_ENTRY(, Mastruct) next;
} Mastruct;

/* plein de trucs */

Mastruct *
initialisation(int id, const char *str)
{
	Mastruct *mesdatas;

	/* on déclare la tête de liste */
	SLIST_HEAD(, Mastruct) datahead;
	/* on l'initialise à NULL */
	SLIST_INIT(&#038;datahead);

	if ((mesdatas = malloc(sizeof(Mastruct)) == NULL)
		err("malloc error");

	mesdatas->id = id;
	if (str != NULL) {
		mesdatas->element = strdup(str);
	} else {
		mesdatas->element = NULL;
	}

	/* on accroche la structure fraichement allouée à la tête de liste */
	SLIST_INSERT_HEAD(&#038;datahead, mesdatas, next);

	/* et on renvoie le premier élément de datahead, ici, mesdatas*/
	return SLIST_FIRST(&#038;datahead);
}
</pre>
<p>Dans ce cas de figure, nous ne renvoyons pas la tête de la liste mais simplement le premier élément de la liste chainée. Pour parcourir simplement cette liste, nous utiliserons la macro <code>SLIST_NEXT</code> :</p>
<pre>
	Mastruct *mesdatas, *p;

	/* des trucs */

	mesdatas = initialisation(id, unechaine);

	for (p = mesdatas; p != NULL; p = SLIST_NEXT(p, next))
		printf("%d -> %s", p->id, p->element);
</pre>
<p>De la même façon, on pourra simplement libérer cette liste simplement chainée grace à une boucle de ce type :</p>
<pre>
void
free_datas(Mastruct *mesdatas)
{
	struct Mastruct *p;

	/* on boucle tant que le nouveau chainon n'est pas nul */
	while (mesdatas != NULL) {
		/* on sauvegarde le prochain chainon */
		p = SLIST_NEXT(mesdatas, next);
		/* on libère le contenu */
		free(mesdatas->element);
		/* puis le chainon courant */
		free(mesdatas);
		/* puis on fait pointer la variable principale vers la sauvegarde */
		mesdatas = p;
	}
}
</pre>
<p>Désormais, avec un effort minimum, nous voici en mesure de très simplement créer des listes de données rapides et dynamiques.<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2009/03/14/la-magie-des-slist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tu te prosterneras devant tes idoles</title>
		<link>http://imil.net/wp/2009/01/27/tu-te-prosterneras-devant-tes-idoles/</link>
		<comments>http://imil.net/wp/2009/01/27/tu-te-prosterneras-devant-tes-idoles/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 19:56:04 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[386BSD]]></category>
		<category><![CDATA[BSD]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=246</guid>
		<description><![CDATA[Il est arriv&#xE9; !

Source Code Secrets: The Basic Kernel&#8221; de William et Lynne Jolitz, ou l&#8217;histoire &#8220;cod&#xE9;e&#8221; du portage de BSD vers l&#8217;architecture i386.
Je l&#8217;ai rapidement feuillet&#xE9;, et ce bouquin est encore plus fascinant que je le pensais: il s&#8217;agit de l&#8217;explication, pratiquement ligne-&#xE0;-ligne de ce portage, code et sch&#xE9;mas d&#8217;archi &#xE0; l&#8217;appui. C&#8217;est un [...]]]></description>
			<content:encoded><![CDATA[<p>Il est arriv&#xE9; !</p>
<p><img src="/gfx/386BSD.jpg"/></p>
<p><a href="http://www.amazon.com/Basic-Kernel-Source-Code-Secrets/dp/1573980269">Source Code Secrets: The Basic Kernel&#8221;</a> de <a href="http://en.wikipedia.org/wiki/William_Jolitz">William</a> et <a href="http://en.wikipedia.org/wiki/Lynne_Jolitz">Lynne</a> Jolitz, ou l&#8217;histoire &#8220;cod&#xE9;e&#8221; du portage de BSD vers l&#8217;architecture i386.</p>
<p>Je l&#8217;ai rapidement feuillet&#xE9;, et ce bouquin est encore plus fascinant que je le pensais: il s&#8217;agit de l&#8217;explication, pratiquement ligne-&#xE0;-ligne de ce portage, code et sch&#xE9;mas d&#8217;archi &#xE0; l&#8217;appui. C&#8217;est un peu comme un conte de f&#xE9;es quoi.<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2009/01/27/tu-te-prosterneras-devant-tes-idoles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quickies</title>
		<link>http://imil.net/wp/2009/01/09/quickies/</link>
		<comments>http://imil.net/wp/2009/01/09/quickies/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 09:38:50 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Ma vie. mon oeuvre]]></category>
		<category><![CDATA[NetBSD]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=244</guid>
		<description><![CDATA[Premier post de l&#8217;année àla ma-vie-mon-œuvre.
Pour Noël, nourrissant l&#8217;illusion que je vais reussir à m&#8217;accrocher à un projet plus de 2 mois, j&#8217;ai topé le domaine beastiebox.org, qui, aussi surprenant que cela puisse paraitre, était disponible. Alors plutot que de se le faire squatter hein&#8230;
Toujours sur ce sujet, j&#8217;ai reçu juste avant mon départ un [...]]]></description>
			<content:encoded><![CDATA[<p>Premier post de l&#8217;année <i>àla</i> ma-vie-mon-œuvre.</p>
<p>Pour Noël, nourrissant l&#8217;illusion que je vais reussir à m&#8217;accrocher à un projet plus de 2 mois, j&#8217;ai topé le domaine <a href="http://www.beastiebox.org/">beastiebox.org</a>, qui, aussi surprenant que cela puisse paraitre, était disponible. Alors plutot que de se le faire squatter hein&#8230;</p>
<p>Toujours sur ce sujet, j&#8217;ai reçu juste avant mon départ un mail de monsieur <i>Thorsten Glaser</i> du projet <a href="https://www.mirbsd.org/main.htm">MirBSD</a> qui me demandait si je pouvais intégrer <a href="https://www.mirbsd.org/mksh.htm">mksh</a> dans <a href="http://www.beastiebox.org/">BeastieBox</a>. C&#8217;est chose faite, mais sa compilation est désactivée par défaut car ce shell, un clone léger du <a href="http://fr.wikipedia.org/wiki/Korn_shell">Korn Shell</a>, pèse tout de même autour de 160K, soit deux fois plus que sh(1) dans sa version BBOX. J&#8217;ai par contre été assez bluffé par la qualité du <a href="https://www.mirbsd.org/cvs.cgi/src/bin/mksh/">code de mksh</a>, ultra propre, ultra portable, je vous le recommande :)</p>
<p>J&#8217;ai beaucoup apprecié <a href="http://www.feyrer.de/NetBSD/bx/blosxom.cgi/nb_20081229_2302.html">lire chez Hubert</a> un peu de pub pour mon projet du moment, mais je me rend compte que le principal objectif de BBOX, reduire la taille des outils UNIX indispensables, ne semble pas être assez explicite sur la page du projet.</p>
<p>Enfin, J&#8217;ai commandé la relique <a href="http://www.amazon.com/Basic-Kernel-Source-Code-Secrets/dp/1573980269">&#8220;Source Code Secrets: The Basic Kernel  by Jolitz, Lynne G.; Jolitz, William&#8221;</a>, ou l&#8217;histoire du premier portage de 4.4BSD vers i386. Je l&#8217;attend impatiemment&#8230;<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2009/01/09/quickies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Marty, ressors la Delorean (update)</title>
		<link>http://imil.net/wp/2008/11/29/marty-ressors-la-delorean-update/</link>
		<comments>http://imil.net/wp/2008/11/29/marty-ressors-la-delorean-update/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 10:44:16 +0000</pubDate>
		<dc:creator>iMil</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[NetBSD]]></category>

		<guid isPermaLink="false">http://imil.net/wp/?p=239</guid>
		<description><![CDATA[Y&#8217;a quelques jours, je me suis lancé dans un nouveau projet. Plus pour le fun que par réelle nécéssité, je me suis mis en tête d&#8217;ecrire un BusyBox-like orienté BSD. J&#8217;en suis pour le moment aux balbutiements du projet, mais quelques commandes sont déjà fonctionnelles.
Mon approche est un tantinet differente du fonctionnement de BusyBox. Afin [...]]]></description>
			<content:encoded><![CDATA[<p>Y&#8217;a quelques jours, je me suis lancé dans un nouveau projet. Plus pour le fun que par réelle nécéssité, je me suis mis en tête d&#8217;ecrire un <a href="http://www.busybox.net/">BusyBox</a>-like orienté BSD. J&#8217;en suis pour le moment aux balbutiements du projet, mais quelques commandes sont déjà fonctionnelles.</p>
<p>Mon approche est un tantinet differente du fonctionnement de BusyBox. Afin de permettre l&#8217;écriture simple et rapide de plugins, je supporte deux modes, un mode statique (ala BB), et un mode dynamique grace aux interfaces DLFCN(3).</p>
<p>Ainsi, toujours sur le modèle de BB, un <code>ln -s</code> du programme principal vers la fonction souhaitée appellera :</p>
<ul>
<li>dans le cas d&#8217;une compilation dynamique, le symbole &#8220;fonction&#8221; dans la librairie <i>libfonction.so</i>, par exemple <i>command_ifconfig</i> dans libifconfig.so</li>
<li>dans le cas d&#8217;une compilation statique, le symbole souhaité dans le propre executable en utilisant une astuce <a href="http://mollacademy.gcu.info/doku.php?id=c:dlopen_self">décrite ici</a></li>
</ul>
<p>Afin de viser la plus petite taille possible pour l&#8217;ensemble, je suis en train de porter les outils de base d&#8217;un <a href="http://cvsweb.netbsd.org/bsdweb.cgi/src/?only_with_tag=netbsd-1-0">NetBSD 1.0</a>, et aussi surprenant que cela puisse paraitre, le portage est relativement simple.</p>
<p>Si d&#8217;aucuns dans l&#8217;assemblée sont interessés par le projet, au doux nom de BeastieBox, les premiers morceaux de code sont disponibles <a href="http://beastiebox.cvs.sourceforge.net/beastiebox/">sur SourceForge</a>.</p>
<p><strong>Update</strong></p>
<p>Et maintenant, ça boot !<br />
<img src="/gfx/beastiebox-boot.png"/></p>
<p><strong>Update</strong></p>
<p>Le projet a maintenant <a href="http://beastiebox.sourceforge.net/">sa page officielle</a><br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://imil.net/wp/2008/11/29/marty-ressors-la-delorean-update/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
