En ce moment, je travaille sur le portage de l’environnement de bureau [Pantheon|https://www.assembla.com/code/pantheon/subversion/nodes] $$Issue du projet [elementary OS|https://elementary.io/].$$ pour [FreeBSD|http://www.freebsd.org/]. C’est long, fastidieux, car il faut sans cesse lire le code (voir plusieurs fois) pour vérifier qu’il n’y a pas de «  »linuxisme » », et trouver des parades pour les résoudre (si il y en a).

Récemment je suis tombé sur une portion de code, qui m’a laissé perplexe. Pour simplifier, elle consiste à calculer la taille du disque dur $$À partir de la ligne [234|http://bazaar.launchpad.net/~elementary-pantheon/switchboard-plug-about/freya/view/head:/src/Plug.vala] du fichier @@src/Plug.vala@@ ([Switchboard-about-plug|https://launchpad.net/switchboard-plug-about]).$$.

En isolant cette partie ( »Cf. » annexe, fichier @@hdd.vala@@), je fus surpris du résultat (au départ j’ai cru, que sous Linux le résultat serait différent, mais en fait non).

!!!Pour l’éxecuter

///
valac –pkg=glib-2.0 –pkg=gio-2.0 hdd.vala

./hdd
33.2 GB
///

Le résultat sera sans doute différent chez vous, en fait, le calcul se fait uniquement pour la racine (@@/@@). Il crée un  »File object » juste pour @@/@@, grâce à la méthode [GLib.File.new_for_path|http://valadoc.org/#!api=gio-2.0/GLib.File.new_for_path].

Mais dans mon cas, mon disque dur est partitionné, je dois pouvoir retrouver la (quasi) totalité du disque, en faisant la somme de toutes mes partitions.

!!!Mais comment fait-on ?

Ce bout de code s’inspire en fait, de ce que fait GNOME (via le paquet gnome-control-center). En parcourant le fichier @@panels/info/cc-info-panel.c@@, on constate, que c’est la fonction [g_unix_mount_points_get|https://developer.gnome.org/gio/stable/gio-Unix-Mounts.html#g-unix-mount-points-get] qui est utilisée $$Elle lit le fichier @@/etc/fstab@@ ou @@/etc/mtab@@.$$.

Avec le langage Vala, il faut utiliser la classe [UnixMountEntry|http://valadoc.org/#!api=gio-unix-2.0/GLib.UnixMountEntry.@get], et faire une boucle sur l’ensemble des points de montage.

Dans mon exemple ( »Cf. » annexe), je stocke la taille de chacune des partitions dans une liste, et ensuite je fais la somme de toutes les tailles.

///valac –pkg=glib-2.0 –pkg=gio-2.0 –pkg=gio-unix-2.0 hdd-02.vala

./hdd-02
266.5 GB
///

C’est déjà plus cohérent.

Il ne reste plus qu’à envoyer un patch aux développeurs.