Je cherche le source d'un diff petit en taille (pour un système
embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est
trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais
il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par
strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
--
BOFH excuse #203:
Write-only-memory subsystem too slow for this machine. Contact your local dealer.
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi.
le source de GNU-diff 2.7 est moitié moins gros que celui de GNU-diff 2.8 sur ftp.gnu.org
Sinon, le /usr/bin/diff (diffutils 2.6) livré avec slack 2.1 fait 65 K.
Stephane Chazelas
2004-12-18, 10:49(+01), Vincent Bernat:
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
D'en trouves un dans heirloom.sourceforge.net
-- Stephane
2004-12-18, 10:49(+01), Vincent Bernat:
Je cherche le source d'un diff petit en taille (pour un système
embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est
trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais
il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par
strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
D'en trouves un dans heirloom.sourceforge.net
-- Stephane
Christian CAMIER
Vincent Bernat wrote:
Coucou !
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
STRLCPY est un STRNCPY qui garantie que la copie est terminée par un caractère nul (' '), ce qui évite de nombreux problèmes dus aux longueurs différentes d chaînes.
Voici le code fourni dans le source de la libc d'OpenBSD :
/* * Copyright (c) 1998 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
/* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). * Returns strlen(src); if retval >= siz, truncation occurred. */ size_t strlcpy(char *dst, const char *src, size_t siz) { register char *d = dst; register const char *s = src; register size_t n = siz;
/* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); }
/* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = ' '; /* NUL-terminate dst */ while (*s++) ; }
return(s - src - 1); /* count does not include NUL */ }
Vincent Bernat wrote:
Coucou !
Je cherche le source d'un diff petit en taille (pour un système
embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est
trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais
il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par
strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
STRLCPY est un STRNCPY qui garantie que la copie est terminée par un
caractère nul (' '), ce qui évite de nombreux problèmes dus aux
longueurs différentes d chaînes.
Voici le code fourni dans le source de la libc d'OpenBSD :
/*
* Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
STRLCPY est un STRNCPY qui garantie que la copie est terminée par un caractère nul (' '), ce qui évite de nombreux problèmes dus aux longueurs différentes d chaînes.
Voici le code fourni dans le source de la libc d'OpenBSD :
/* * Copyright (c) 1998 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
/* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). * Returns strlen(src); if retval >= siz, truncation occurred. */ size_t strlcpy(char *dst, const char *src, size_t siz) { register char *d = dst; register const char *s = src; register size_t n = siz;
/* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); }
/* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = ' '; /* NUL-terminate dst */ while (*s++) ; }
return(s - src - 1); /* count does not include NUL */ }
Christian CAMIER
Oups ... partit trop vite
Vincent Bernat wrote:
Coucou !
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
(suite)
VASPRINTF, définie ainsi : int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement. Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il est possible d'utiliser un vsprintf dans un buffer static assez large dans le cadre de l'application désirée et de retourner dans l'arg 'ret' un strdup du resultat.
Oups ... partit trop vite
Vincent Bernat wrote:
Coucou !
Je cherche le source d'un diff petit en taille (pour un système
embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est
trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais
il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par
strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
(suite)
VASPRINTF, définie ainsi :
int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement.
Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il
est possible d'utiliser un vsprintf dans un buffer static assez large
dans le cadre de l'application désirée et de retourner dans l'arg 'ret'
un strdup du resultat.
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
Une idée ?
(suite)
VASPRINTF, définie ainsi : int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement. Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il est possible d'utiliser un vsprintf dans un buffer static assez large dans le cadre de l'application désirée et de retourner dans l'arg 'ret' un strdup du resultat.
Vincent Bernat
OoO Peu avant le début de l'après-midi du samedi 18 décembre 2004, vers 13:34, Stephane Chazelas disait:
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
D'en trouves un dans heirloom.sourceforge.net
Merci pour toutes les réponses.
GNU diff 2.6 me donne un exécutable plus gros que GNU diff 2.8. Sans doute parce qu'il fait moins appel à la libc (j'ai vu passer des réimplantations de realloc). GNU diff 2.7 ne sait pas se crosscompiler, sans doute des bricoles à corriger dans le configure, mais je ne sais pas comment ça fonctionne.
Le diff proposé sur heirloom avait l'air sympa, malheureusement le support des wide char n'est pas optionnel et cela semble rentrer en conflit avec une uclibc compilée sans ce support. Sans doute pas grand chose à changer (éviter l'utilisation du fichier d'entête wchar.h de uclibc), mais les .o strippés prenaient déjà une taille assez importante sans que la compilation soit aboutie, j'ai donc laissé tomber.
Je me suis de nouveau rabattu sur le diff d'Open. J'ai copié/collé le code de strlcpy et strlcat (ainsi que warn, err et compagnie qui sont dans la GNU/Libc mais qui n'ont pas l'air d'être dans la uclibc). J'ai trouvé sur Google un fgetln qui ne faisait aucune hypothèse sur la façon dont FILE* était implanté. Après quelques modifs triviales, je suis parvenu à un binaire de 30 Ko pour mipsel et il fonctionne. J'ai perdu le support du récursif en cours de route car il ne m'intéressait pas du tout et pour une raison obscure, je n'avais pas la fonction getdirentries. -- I AM NOT THE LAST DON I AM NOT THE LAST DON I AM NOT THE LAST DON -+- Bart Simpson on chalkboard in episode AABF21
OoO Peu avant le début de l'après-midi du samedi 18 décembre 2004,
vers 13:34, Stephane Chazelas <cette.adresse@est.invalid> disait:
Je cherche le source d'un diff petit en taille (pour un système
embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est
trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais
il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par
strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
D'en trouves un dans heirloom.sourceforge.net
Merci pour toutes les réponses.
GNU diff 2.6 me donne un exécutable plus gros que GNU diff 2.8. Sans
doute parce qu'il fait moins appel à la libc (j'ai vu passer des
réimplantations de realloc). GNU diff 2.7 ne sait pas se
crosscompiler, sans doute des bricoles à corriger dans le configure,
mais je ne sais pas comment ça fonctionne.
Le diff proposé sur heirloom avait l'air sympa, malheureusement le
support des wide char n'est pas optionnel et cela semble rentrer en
conflit avec une uclibc compilée sans ce support. Sans doute pas grand
chose à changer (éviter l'utilisation du fichier d'entête wchar.h de
uclibc), mais les .o strippés prenaient déjà une taille assez
importante sans que la compilation soit aboutie, j'ai donc laissé
tomber.
Je me suis de nouveau rabattu sur le diff d'Open. J'ai copié/collé le
code de strlcpy et strlcat (ainsi que warn, err et compagnie qui sont
dans la GNU/Libc mais qui n'ont pas l'air d'être dans la uclibc). J'ai
trouvé sur Google un fgetln qui ne faisait aucune hypothèse sur la
façon dont FILE* était implanté. Après quelques modifs triviales, je
suis parvenu à un binaire de 30 Ko pour mipsel et il fonctionne. J'ai
perdu le support du récursif en cours de route car il ne m'intéressait
pas du tout et pour une raison obscure, je n'avais pas la fonction
getdirentries.
--
I AM NOT THE LAST DON
I AM NOT THE LAST DON
I AM NOT THE LAST DON
-+- Bart Simpson on chalkboard in episode AABF21
OoO Peu avant le début de l'après-midi du samedi 18 décembre 2004, vers 13:34, Stephane Chazelas disait:
Je cherche le source d'un diff petit en taille (pour un système embarqué). Une fois compilé le GNU diff me prend 158 Ko ce qui est trop gros pour moi. Le seul que j'aie trouvé est celui d'OpenBSD, mais il ne compile pas tel quel pour Linux (strlcpy peut se remplacer par strncpy, mais pour vasprintf...). Les autres BSD utilisent GNU Diff.
D'en trouves un dans heirloom.sourceforge.net
Merci pour toutes les réponses.
GNU diff 2.6 me donne un exécutable plus gros que GNU diff 2.8. Sans doute parce qu'il fait moins appel à la libc (j'ai vu passer des réimplantations de realloc). GNU diff 2.7 ne sait pas se crosscompiler, sans doute des bricoles à corriger dans le configure, mais je ne sais pas comment ça fonctionne.
Le diff proposé sur heirloom avait l'air sympa, malheureusement le support des wide char n'est pas optionnel et cela semble rentrer en conflit avec une uclibc compilée sans ce support. Sans doute pas grand chose à changer (éviter l'utilisation du fichier d'entête wchar.h de uclibc), mais les .o strippés prenaient déjà une taille assez importante sans que la compilation soit aboutie, j'ai donc laissé tomber.
Je me suis de nouveau rabattu sur le diff d'Open. J'ai copié/collé le code de strlcpy et strlcat (ainsi que warn, err et compagnie qui sont dans la GNU/Libc mais qui n'ont pas l'air d'être dans la uclibc). J'ai trouvé sur Google un fgetln qui ne faisait aucune hypothèse sur la façon dont FILE* était implanté. Après quelques modifs triviales, je suis parvenu à un binaire de 30 Ko pour mipsel et il fonctionne. J'ai perdu le support du récursif en cours de route car il ne m'intéressait pas du tout et pour une raison obscure, je n'avais pas la fonction getdirentries. -- I AM NOT THE LAST DON I AM NOT THE LAST DON I AM NOT THE LAST DON -+- Bart Simpson on chalkboard in episode AABF21
Vincent Bernat
OoO Vers la fin de l'après-midi du samedi 18 décembre 2004, vers 16:26, Christian CAMIER disait:
VASPRINTF, définie ainsi : int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement. Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il est possible d'utiliser un vsprintf dans un buffer static assez large dans le cadre de l'application désirée et de retourner dans l'arg 'ret' un strdup du resultat.
En fait, il est dispo dans la GNU LibC ainsi que dans uclibc. Il faut juste faire un #define _GNU_SOURCE. -- BOFH excuse #141: disks spinning backwards - toggle the hemisphere jumper.
OoO Vers la fin de l'après-midi du samedi 18 décembre 2004, vers
16:26, Christian CAMIER <chcamier@nospam-free.fr> disait:
VASPRINTF, définie ainsi :
int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement.
Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il
est possible d'utiliser un vsprintf dans un buffer static assez large
dans le cadre de l'application désirée et de retourner dans l'arg 'ret'
un strdup du resultat.
En fait, il est dispo dans la GNU LibC ainsi que dans uclibc. Il faut
juste faire un #define _GNU_SOURCE.
--
BOFH excuse #141:
disks spinning backwards - toggle the hemisphere jumper.
OoO Vers la fin de l'après-midi du samedi 18 décembre 2004, vers 16:26, Christian CAMIER disait:
VASPRINTF, définie ainsi : int vasprintf(char **ret, const char *format, va_list ap);
est un vsprintf qui écrit dans une chaine allouée dynamiquement. Pour la mettre simplement en oeuvre, sans être obligé de tout casser, il est possible d'utiliser un vsprintf dans un buffer static assez large dans le cadre de l'application désirée et de retourner dans l'arg 'ret' un strdup du resultat.
En fait, il est dispo dans la GNU LibC ainsi que dans uclibc. Il faut juste faire un #define _GNU_SOURCE. -- BOFH excuse #141: disks spinning backwards - toggle the hemisphere jumper.
Stephane Chazelas
2004-12-20, 08:50(+01), Etienne de Tocqueville: [...]
size_t strlcpy(char *dst, const char *src, size_t siz) { int l = strlen(src); strncpy(dst, src, siz); if (siz && l >= siz) dst[siz-1] = 0; }
C'est un peu moins performant (la chaîne est parcourue deux fois) mais ça prend beaucoup moins de place en mémoire
Pareil pour la première version alors, elle ne renvoit rien du tout.
Et d'ailleurs, dst[siz-1] est mauvais, on écrase le dernier caractère de la chaîne recopiée. 'dst[siz] = 0' est bon.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai appris il y a deux heures par un journaliste que cybercable.faq n'était pas un newsgroup public. je commence à comprendre pourquoi personne n'est au courant de l'escroquerie que nous vivons actuellement. -+- DM in : GNU - Le quatrième pouvoir au secours du neuneu -+-
On Mon, 20 Dec 2004, Nicolas George wrote:
Stephane Chazelas wrote in message
<slrncsdi4o.cbv.stephane.chazelas@spam.is.invalid>:
Pareil pour la première version alors, elle ne renvoit rien du tout.
Et d'ailleurs, dst[siz-1] est mauvais, on écrase le dernier caractère de
la chaîne recopiée. 'dst[siz] = 0' est bon.
--
Erwann ABALEA <erwann@abalea.com> - RSA PGP Key ID: 0x2D0EABD5
-----
J'ai appris il y a deux heures par un journaliste que cybercable.faq n'était pas
un newsgroup public. je commence à comprendre pourquoi personne n'est au
courant de l'escroquerie que nous vivons actuellement.
-+- DM in : GNU - Le quatrième pouvoir au secours du neuneu -+-
Pareil pour la première version alors, elle ne renvoit rien du tout.
Et d'ailleurs, dst[siz-1] est mauvais, on écrase le dernier caractère de la chaîne recopiée. 'dst[siz] = 0' est bon.
-- Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5 ----- J'ai appris il y a deux heures par un journaliste que cybercable.faq n'était pas un newsgroup public. je commence à comprendre pourquoi personne n'est au courant de l'escroquerie que nous vivons actuellement. -+- DM in : GNU - Le quatrième pouvoir au secours du neuneu -+-
Nicolas George
Erwann ABALEA wrote in message :
Et d'ailleurs, dst[siz-1] est mauvais, on écrase le dernier caractère de la chaîne recopiée.
Non, ça ne fait ça que si la source est trop longue, et ça fait partie de la spécification de strlcpy de le faire.
'dst[siz] = 0' est bon.
Bonjour le buffer overflow.
Erwann ABALEA wrote in message
<Pine.LNX.4.58.0412201437040.1626@shining.seclogd.org>:
Et d'ailleurs, dst[siz-1] est mauvais, on écrase le dernier caractère de
la chaîne recopiée.
Non, ça ne fait ça que si la source est trop longue, et ça fait partie de la
spécification de strlcpy de le faire.