(Courriels de diversion: <petrins@allongerez-economisent.com> <reservistes@affinerais-referait.com> <embrayerais@phonologique-appela.com> <brilleront@hispanophone-clopiner.com> <pal@retombez-confirmes.com> <impunie@propageons-geniale.com> <demaquillerait@purgeons-ecuelles.com> <tintouin@toquer-suintant.com> <concerto@devoyee-remontrerait.com> <accouplerons@reevaluerions-impulsivement.com> )
Bonsoir, Le vendredi 17 novembre 2006 23:22, Jean-Michel a écrit : > Je viens de jeter un coup d'oeil sur le source ddrescue de debian > testing, et je ne comprends pas bien comme l'outil peut supporter > l'accès au partitions de plus de 2Go, avec la ligne suivante( #if 0): > > ddrescue-1.10: > > /* Large file support on kernel 2.4 glibc 2.1 systems */ > /* _FILE_OFFSET_BITS=64 should take care of it */ > #if 0 && defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ == 1 && > defined(O_LARGEFILE) > const unsigned int olarge = O_LARGEFILE; > #else > const unsigned int olarge = 0; > #endif La réponse est dans la question : /* _FILE_OFFSET_BITS=64 should take care of it */ Plus haut, il y a effectivement : #define _LARGEFILE_SOURCE #define _FILE_OFFSET_BITS 64 Cela ordonne à la libc de mapper toutes les fonctions relative aux fichiers vers leurs versions 64 bits. Ces deux lignes permettent de porter un code en 64 bits sans avoir à le modifier. En contrepartie, cela casse la compatibilité binaire avec le code compilé sans ces defines. L'autre solution est d'utiliser : #define _LARGEFILE64_SOURCE Cela active les fonction 64 bits en plus des fonctions 32 bits habituelles. Il faut donc transformer les off_t en off64_t, open() en open64(), etc. > man open: > O_LARGEFILE > (LFS) Allow files whose sizes cannot be represented in an > off_t (but can be represented in an off64_t) to be opened. Ce flag sert à l'implémentation du open() 64 bits sous certaines plateformes dont Linux. Si l'on veut être portable, il ne faut pas l'utiliser directement. Au départ, le code de ddrescue utilisait O_LARGEFILE. Ensuite, FILE_OFFSET_BITS=64 a été ajouté et olarge a été forcé à 0 par un #define. Il aurait été plus judicieux de retirer totalement la variable olarge. Gaël -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>