#2051 Le 03/12/2013, à 12:17
- Rolinh
Re : /* Topic des codeurs [8] */
Pas de quoi.
D'ailleurs, être repassé en C89 + -Wno-long-long au lieu de C99 me déclenche un nouveau warning avec gcc:
warning: ‘%c’ yields only last 2 digits of year in some locales [-Wformat-y2k]
Le bout de code concerné est celui-ci, dans src/util.c:
if (strftime(date, sizeof(date), "%c", tmp) == 0) {
(void)fputs("Could not retrieve date\n", stderr);
return NULL;
}
Donc je me demandais comment corriger ce problème et c'est là que le man me vient à la rescousse:
Some buggy versions of gcc(1) complain about the use of %c: warning: `%c' yields only last 2 digits of year in some locales. Of course programmers are encouraged to use %c, it gives the
preferred date and time representation. One meets all kinds of strange obfuscations to circumvent this gcc(1) problem. A relatively clean one is to add an intermediate functionsize_t
my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
{
return strftime(s, max, fmt, tm);
}Nowadays, gcc(1) provides the -Wno-format-y2k option to prevent the warning, so that the above workaround is no longer required.
Effectivement, clang ne me déclenche pas ce warning. Donc je pense que la solution clean c'est d'ajouter -Wno-format-y2k aux flags si le compilateur est gcc, comme le suggère la man page.
Sachant que:
-Wformat-y2k:
If -Wformat is specified, also warn about "strftime" formats which may yield only a two-digit year.
Et que le warning est donc spécifique à strftime(3).
Bizarre que -std=c99 le fasse taire...
Hors ligne
#2052 Le 03/12/2013, à 22:57
- Steap
Re : /* Topic des codeurs [8] */
Je ne suis pas très régulièrement le topic, alors je ne sais pas si ça a déjà été dit, mais GG à Rolinh:
GNU Guix, un gestionnaire de paquets fonctionnel.
Hors ligne
#2053 Le 04/12/2013, à 08:53
- grim7reaper
Re : /* Topic des codeurs [8] */
grim7reaper a écrit :Ou alors, vu que c’est un problème d’associations constantes symboliques/chaînes de caractères, tu pourrais peut-être envisager l’utilisation d’item-lists.
Je vais y jeter un œil mais il faut bien sûr que dans mon cas ça respecte char * const *tokens de getsubopt(3).
Y’a pas de souci à ce niveau-là.
Finalement je ne l’ai pas mis en œuvre car je ne suis pas sûr que ça en vaille la peine ici (comme la liste des sous-options est relativement fixe, le gain n’est pas flagrant, mais ça pourrait se discuter).
Bizarre que -std=c99 le fasse taire...
Bizarre en effet
Ils gardent peut-être le warning en C89 pour une sombre histoire de rétro-compatibilité. Je ne sais pas.
Hors ligne
#2054 Le 04/12/2013, à 09:36
- Rolinh
Re : /* Topic des codeurs [8] */
@Steap: Merci. Non, cela n'avait pas été relevé dans le topic. On va croire que je ne m'intéresse qu'au listing des systèmes de fichiers entre dfc et les améliorations de df pour DragonFly BSD mais non. ^^ Ma première contribution était en fait l'ajout de poweroff(8), importée/adaptée depuis FreeBSD mais Matt Dillon l'a commité en son nom ce qui fait que ça n'apparaît pas dans les notes de version.
Ceci dit, je me suis fortement rapproché du projet DragonFly BSD. L'équipe de développement, très petite, est vraiment très sympathique. J'ai dans l'idée de me pencher sur des choses plus conséquentes que des petits patches mineurs à plus ou moins long terme mais j'ai peur de manquer de temps pour m'attaquer à des tâches vraiment importantes.
Sinon, je trouve que c'est une excellente expérience de contribuer à un projet comme celui-là. J'ai aussi aidé John Marino pour des patches pour des Dports et notamment essayé de les remonter en amont, avec succès jusqu'à présent. Et c'est toujours gratifiant d'avoir apporté une contribution à un projet comme LLVM par exemple, même si celle-ci est mineure et qu'elle consiste simplement au support de DragonFly. Les communautés en amont ont pour le moment toujours été très réceptives.
@grim7reaper:
Suite à ton dernier patch:
dfc/src/dfc.c:203:5: warning: passing argument 2 of ‘getsubopt’ from incompatible pointer type [enabled by default]
switch (getsubopt(&subopts, color_opts, &value)) {
^
/usr/include/stdlib.h:899:12: note: expected ‘char * const* __restrict__’ but argument is of type ‘const char * const*’
extern int getsubopt (char **__restrict __optionp,
Sinon, effectivement, je ne pense pas que cela en vaille la peine ici.
Hors ligne
#2055 Le 04/12/2013, à 09:52
- grim7reaper
Re : /* Topic des codeurs [8] */
@grim7reaper:
Suite à ton dernier patch:dfc/src/dfc.c:203:5: warning: passing argument 2 of ‘getsubopt’ from incompatible pointer type [enabled by default] switch (getsubopt(&subopts, color_opts, &value)) { ^ /usr/include/stdlib.h:899:12: note: expected ‘char * const* __restrict__’ but argument is of type ‘const char * const*’ extern int getsubopt (char **__restrict __optionp,
Je sais.
J’ai juste pensé que 4 warnings comme ça c’était mieux que 20 warnings comme ça :
attention : initialization discards ‘const’ qualifier from pointer target type [enabled by default]
Après je suis d’accord que c’est pas génial, mais j’ai pas encore trouvé un moyen de mettre tout le monde d’accord
D’ailleurs je trouve le prototype de getsubopt un peu foireux. Le second paramètres devrait être const char *const tokens[] (vu qu’il n’est pas censé modifier les tokens), mais bon…
Hors ligne
#2056 Le 04/12/2013, à 09:55
- Rolinh
Re : /* Topic des codeurs [8] */
j’ai pas encore trouvé un moyen de mettre tout le monde d’accord
Moi non plus.
je trouve le prototype de getsubopt un peu foireux. Le second paramètres devrait être const char *const tokens[] (vu qu’il n’est pas censé modifier les tokens), mais bon…
Complètement d'accord avec ça.
Hors ligne
#2057 Le 04/12/2013, à 10:31
- Rolinh
Re : /* Topic des codeurs [8] */
Bon, j'ai finalement trouvé un moyen d'éviter tout warning mais je blame quand même la signature de getsubopt(3) pour le coup.
Hors ligne
#2058 Le 04/12/2013, à 12:08
- ljere
Re : /* Topic des codeurs [8] */
j'ai de nouveau sushi en php
if (isset($_POST['Bouton5']))
{
echo '<li><a href="'. $dossier . $nom . '">' . $nom . '</a></li>';
}
if (isset($_POST['Bouton6']))
{
if (is_dir($dossier.$nom))
while ($file = readdir($dossier.$nom)) {
if($file != '.' && $file != '..')
unlink ($file);
}
rm_dir($dossier.$nom);
else
unlink($dossier.$nom);
}
le bouton 5 fonctionne pour des fichiers mais si il s'agit d'un dossier ça ne fonctionne pas
quand au bouton 6 l'idée est d'effacer le contenu du dossier avant le dossier si il s'agit d'un dossier si il s'agit d'un fichier le else prend le relais mais j'ai une vilaine page blanche
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2059 Le 04/12/2013, à 12:40
- grim7reaper
Re : /* Topic des codeurs [8] */
Bon, j'ai finalement trouvé un moyen d'éviter tout warning mais je blame quand même la signature de getsubopt(3) pour le coup.
C’est assez moche comme fix. J’y avais pensé aussi.
Mais c’est la seule solution je pense
Hors ligne
#2060 Le 04/12/2013, à 12:43
- Rolinh
Re : /* Topic des codeurs [8] */
C'est sûr que c'est moche mais je ne vois rien d'autre. Et j'ai horreur d'ajouter des lignes de code qui n'apportent rien. Mais j'ai aussi horreur d'avoir des warnings...
Hors ligne
#2061 Le 04/12/2013, à 13:14
- grim7reaper
Re : /* Topic des codeurs [8] */
Oui, je suis d’accord avec toi (les warnings c’est chiant, et là y’a pas de meilleur fix).
Sinon ton retour d’expérience sur la contribution à DragonFly BSD fait envie.
Je vais voir si j’ai pas un peu de temps à y consacrer aussi
Au pire, ça m’initiera à un BSD, au mieux je pourrai peut-être faire quelques petites contrib’ aussi.
Hors ligne
#2062 Le 04/12/2013, à 13:27
- Rolinh
Re : /* Topic des codeurs [8] */
@grim7reaper: ça serait bien cool
Vient déjà faire un tour sur le chan IRC, il est plus animé que les mailings lists et il s'y tient souvent des conversations intéressantes.
Hors ligne
#2063 Le 04/12/2013, à 14:02
- ljere
Re : /* Topic des codeurs [8] */
bon pour effacer récursivement j'ai trouvé une fonction
function rmdir_recursive($dir)
{
//Liste le contenu du répertoire dans un tableau
$dir_content = scandir($dir);
//Est-ce bien un répertoire?
if($dir_content !== FALSE){
//Pour chaque entrée du répertoire
foreach ($dir_content as $entry)
{
//Raccourcis symboliques sous Unix, on passe
if(!in_array($entry, array('.','..'))){
//On retrouve le chemin par rapport au début
$entry = $dir . '/' . $entry;
//Cette entrée n'est pas un dossier: on l'efface
if(!is_dir($entry)){
unlink($entry);
}
//Cette entrée est un dossier, on recommence sur ce dossier
else{
rmdir_recursive($entry);
}
}
}
}
//On a bien effacé toutes les entrées du dossier, on peut à présent l'effacer
rmdir($dir);
}
solution trouvé ici http://www.commentcamarche.net/faq/1225 … -not-empty
il me reste donc le téléchargement d'un dossier
if (isset($_POST['Bouton5']))
{
echo '<li><a href="'. $dossier . $nom . '">' . $nom . '</a></li>';
}
qui échoue merci pour vos idées et conseils
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2064 Le 05/12/2013, à 08:17
- grim7reaper
Re : /* Topic des codeurs [8] */
il me reste donc le téléchargement d'un dossier
if (isset($_POST['Bouton5'])) { echo '<li><a href="'. $dossier . $nom . '">' . $nom . '</a></li>'; }
qui échoue merci pour vos idées et conseils
Je vais peut-être dire une connerie, mais je ne pense pas qu’on puisse télécharger un dossier juste en faisant un lien dessus.
Il faudrait faire une archive, ou passer par un FTP, ou …
Hors ligne
#2065 Le 05/12/2013, à 08:22
- ljere
Re : /* Topic des codeurs [8] */
tu as raison on ne peut pas en effet télécharger un dossier, donc oui je vais devoir faire une archive avant de dl, mais pour le moment je ne sais pas comment faire
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2066 Le 05/12/2013, à 08:36
- Kanor
Re : /* Topic des codeurs [8] */
ljere, stp arrête de nommer les actions avec des Bouton5, Bouton6 … donne leur des noms en rapport avec le but de l'action.
Hors ligne
#2067 Le 05/12/2013, à 09:03
- ljere
Re : /* Topic des codeurs [8] */
l'action est placé sur le bouton par exemple
<form method="post">
<button name="Bouton5">Vers Portable</button><br><br>
</form>
<form method="post">
<button name="Bouton6">Supprimer</button><br><br>
</form>
je ne pense pas que se soit vraiment mieux de faire
<form method="post">
<button name="Portable">Vers Portable</button><br><br>
</form>
<form method="post">
<button name="Supprimer">Supprimer</button><br><br>
</form>
j'ai plus de chance de faire une faute de frappe ensuite
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2068 Le 05/12/2013, à 09:23
- Rolinh
Re : /* Topic des codeurs [8] */
Je rejoins Kanor: c'est une très mauvaise pratique de nommage que tu utilises. Pour ma part, si je lis "Bouton6", ne connaissant pas le code, je n'ai aucun moyen de deviner à quoi il sert. Tandis qu'un nom tel que "btnDelete" ou "btn_delete" ou peut importe la convention que tu suis ça parle tout de suite.
À mon avis, personne ici ne soutiendra le contraire.
Hors ligne
#2069 Le 05/12/2013, à 09:29
- Kanor
Re : /* Topic des codeurs [8] */
ljere, la tu fais du code php à l’ancienne ou le code html et les fonction php sont dans la même page donc oui c'est facile de savoir que Bouton5 c'est pour "vers le portable"
mais si tu a ton code fonctionnel d'un coté et tes template html de l'autre ça va devenir complexe pour retrouver ces petit.
Hors ligne
#2070 Le 05/12/2013, à 09:35
- ljere
Re : /* Topic des codeurs [8] */
ok je comprend, j'en tiendrais compte pour mes prochains scripts
bon voila l'idée pour faire une archive
{
if(is_file($dossier.$nom)){
echo '<li><a href="'. $dossier . $nom . '">' . $nom . '</a></li>';
}
else
{
$zip = new ZipArchive();
if(is_dir($dossier.$nom))
echo "c'est un dossier";
{
// On teste si le dossier existe, car sans ça le script risque de provoquer des erreurs.
if($zip->open($dossier.'Archive.zip', ZipArchive::CREATE) == TRUE)
echo "$dossier Archive.zip";
{
// Ouverture de l’archive réussie.
// Récupération des fichiers.
$fichiers = scandir($dossier.$nom);
// On enlève . et .. qui représentent le dossier courant et le dossier parent.
unset($fichiers[0], $fichiers[1]);
foreach($fichiers as $f)
{
// On ajoute chaque fichier à l’archive en spécifiant l’argument optionnel.
// Pour ne pas créer de dossier dans l’archive.
if(!$zip->addFile($dossier.$nom.$f, $f))
{
echo 'Impossible d'ajouter "'.$f.'".<br/>';
}
}
// On ferme l’archive.
$zip->close();
// On peut ensuite, comme dans le tuto de DHKold, proposer le téléchargement.
header('Content-Transfer-Encoding: binary'); //Transfert en binaire (fichier).
header('Content-Disposition: attachment; filename="Archive.zip"'); //Nom du fichier.
header('Content-Length: '.filesize('Archive.zip')); //Taille du fichier.
readfile('Archive.zip');
}
}
echo '<li><a href="'. $dossier . 'Archive.zip"> "Archive.zip" </a></li>';
}
}
en premier je test si c'est un fichier le lien apparaît, si c'est un dossier je crée un archive,
bien évidemment ça ne fonctionne pas, même pire j'ai le retour d'erreur que dans le cas ou c'est un fichier
Dernière modification par ljere (Le 05/12/2013, à 10:28)
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2071 Le 05/12/2013, à 14:12
- Rolinh
Re : /* Topic des codeurs [8] */
Ijere, je n'ai pas du tout regardé en détail* mais en un clin d'œil, il me semble que tu as un soucis d'environnement après if(is_dir($dossier.$nom)) parce que je présume que si c'est un dossier, tu ne veux pas "juste" afficher "c'est un dossier", non?
* j'ai une super aptitude pour fuir le PHP ^^
Hors ligne
#2072 Le 05/12/2013, à 14:30
- Kanor
Re : /* Topic des codeurs [8] */
Rolinh c'est normal ça.
ljere en regardant très rapidement je pense que le prb c'est le chemin du fichier ici
readfile('Archive.zip');
ce serait pas
readfile($dossier.'Archive.zip');
de plus d'après la doc il faudrait peut étre rajouter ça
ob_clean();
flush();
http://www.php.net/manual/fr/function.readfile.php
je ne pense pas que ce soit obligatoire mais ça doit être plus propre.
Dernière modification par Kanor (Le 05/12/2013, à 14:33)
Hors ligne
#2073 Le 05/12/2013, à 15:31
- ljere
Re : /* Topic des codeurs [8] */
je viens de me rendre contre qu'il y a 13 archives vide de créés, le souci c'est que je ne m'en rendais pas comptes vu que c'était sur le portable
merki kanor je regarde tout ça mais ça commence à prendre forme ^^
Rolinh pas de souci je comprend
ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon
Hors ligne
#2074 Le 05/12/2013, à 21:08
- Rolinh
Re : /* Topic des codeurs [8] */
@The Uploader: pourrais-tu me donner coller ici le retour de findmnt -D ?
Hors ligne
#2075 Le 05/12/2013, à 21:21
- The Uploader
Re : /* Topic des codeurs [8] */
Ça, et même plus...
#( 12/05/13@ 9:20 )( max@max-laptop ):~
dfc -To
SYS. FICH. TYPE (=) UT. LIB. (-) %UTILISÉ DISPO. TOTAL MONTÉ SUR OPT. DE MONT.
rootfs rootfs [=======-------------] 33% 19,7G 29,2G / rw
dev devtmpfs [--------------------] 0% 1,9G 1,9G /dev rw,nosuid,relatime,size=2010364k,nr_inodes=502591,mode=755
run tmpfs [=-------------------] 0% 1,9G 1,9G /run rw,nosuid,nodev,relatime,mode=755
/dev/sdb1 ext4 [=======-------------] 33% 19,7G 29,2G / rw,noatime,discard,data=ordered
tmpfs tmpfs [=-------------------] 0% 1,9G 1,9G /dev/shm rw,nosuid,nodev
tmpfs tmpfs [--------------------] 0% 1,9G 1,9G /sys/fs/cgroup rw,nosuid,nodev,noexec,mode=755
systemd-1 autofs [=========-----------] 40% 137,1G 230,3G /home rw,relatime,fd=39,pgrp=1,timeout=300,minproto=5,maxproto=5,direct
tmpfs tmpfs [=-------------------] 0% 1,9G 1,9G /tmp rw
/dev/sda2 ext4 [=========-----------] 40% 137,1G 230,3G /home rw,relatime,data=ordered
#( 12/05/13@ 9:20 )( max@max-laptop ):~
findmnt -D
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
dev devtmpfs 1,9G 0 1,9G 0% /dev
run tmpfs 2G 796K 2G 0% /run
/dev/sdb1 ext4 29,2G 8,1G 19,7G 28% /
tmpfs tmpfs 2G 104K 2G 0% /dev/shm
tmpfs tmpfs 2G 0 2G 0% /sys/fs/cgroup
tmpfs tmpfs 2G 40K 2G 0% /tmp
/dev/sda2 ext4 230,3G 81,4G 137,1G 35% /home
gvfsd-fuse fuse.gvfsd-fuse 0 0 0 - /run/user/1000/gvfs
#( 12/05/13@ 9:20 )( max@max-laptop ):~
dfc -v
dfc 3.0.4
#( 12/05/13@ 9:20 )( max@max-laptop ):~
pacman -Qii dfc
Nom : dfc
Version : 3.0.4-1
Description : Display file system space usage using graphs and colors
Architecture : x86_64
URL : http://projects.gw-computing.net/projects/dfc
Licences : BSD
Groupes : --
Fournit : --
Dépend de : glibc
Dépendances opt. : --
Requis par : --
Optionnel pour : --
Est en conflit avec : dfc-git
Remplace : --
Taille installé : 149,00 KiB
Paqueteur : Sven-Hendrik Haase <sh@lutzhaase.com>
Compilé le : mar. 15 oct. 2013 14:54:46 GMT
Installé le : mer. 16 oct. 2013 18:15:23 GMT
Motif d’installation : Explicitement installé
Script d’installation : Oui
Validé par : Signature
Fichiers de sauvegarde :
(aucun)
- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10
Hors ligne