[Kos-dev] [FAT] Mes remarques sur le travail de Thomas

Thomas Petazzoni kos-dev@enix.org
26 Feb 2002 13:33:13 +0100


Herv=E9 Poussineau <herve.poussineau@cgey.com> writes:

> * [fat] Name/extension is too long : impossible for FAT16
> (_fat_analyze_name)
> Pas du tout : FAT12, 16, 32 sont le nombre de bits utilis=E9s pour co=
der le
> num=E9ro d'un cluster ; les noms longs peuvent se trouver sur ces tro=
is types
> de filesystem, gr=E2ce =E0 la VFAT. (pour info, les noms longs sont s=
tock=E9s dans
> des entr=E9es de r=E9pertoire dont l'attribut est 0xf, que tu sautes =
d=E9j=E0). Les
> limites des noms longs sont name < 255 caract=E8res, ext < 255 caract=
=E8res et
> name+'.'+ext < 255 caracteres.

Oui effectivement, j'avais des prejuges sur l'histoire FAT12/16/32 et
les noms longs, mais je me suis apercu (plus tard) que j'avais des
noms longs sur ma FAT16. Il faut effectivement que je revoie ma copie
sur ce plan la.

> * parcours du r=E9pertoire (fat_open_file)
> Ta boucle est for(i =3D 0; direntry[i].filename[0] !=3D 0; i++) { ...=
 }
> Tu auras des erreurs si le r=E9pertoire tient sur plus d'un cluster e=
t que ce
> n'est pas le r=E9pertoire racine. Je te propose plut=F4t le code suiv=
ant
> :

Le code de fat_open_file ne marche que si le fichier est dans le
repertoire racine, pour l'instant je ne me suis pas embete avec les
sous repertoires (c'est pour un peu plus tard, pour l'instant j'essaie
de bosser un peu sur la memoire, et les problemes de synchro).

> Ces valeurs sont des valeurs maximales, et ne sont pas toujours respe=
ct=E9es
> (surtout pr=E8s des limite, ou apr=E8s le redimensionnement de partit=
ions). La
> m=E9thode pr=E9conis=E9e est de regarder la valeur de  bs_filsystype[=
8].
>   if (!memcmp((fat16_bpb_t *)boot_sector->bs_filsystype, "FAT12   ", =
8)
>     fat_data->type =3D FAT12;
>   else if (!memcmp((fat16_bpb_t *)boot_sector->bs_filsystype, "FAT16 =
  ", 8)
>     fat_data->type =3D FAT16;
>   else if (!memcmp((fat32_bpb_t *)boot_sector->bs_filsystype, "FAT32 =
  ", 8)
>     fat_data->type =3D FAT32;
>   else
>     puts("Error !");

Non, non, non et renon ! La specification de chez Microsoft specifie
clairement qu'utiliser le champ filsystype n'est pas correct. Ils
donnent exactement la methode pour detecter si c'est du FAT12/16/32
dans leur spec, et c'est exactement ce que je fais !

Ceci etant dit, je te remercie beaucoup pour tes remarques, je ne
modifierais peut etre pas le code tout de suite, mais ca me servira
beaucoup pour la suite !

Thomas
--=20
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso)      http://www.enix.org/~thomas/
(KOS)        http://kos.enix.org/=20
(Club LinUT) http://club-linut.enix.org