--- rpl/src/formateur_fichiers.c 2013/03/21 12:07:38 1.62 +++ rpl/src/formateur_fichiers.c 2013/03/23 18:00:09 1.66 @@ -4364,7 +4364,7 @@ formateur_fichier_reel(struct_processus pow(10, (double) exposant); } - longueur_utile = longueur; + longueur_utile = (long) longueur; longueur_utile_limite = 15; if (longueur_utile > longueur_utile_limite) @@ -5257,13 +5257,69 @@ lecture_fichier_non_formate(struct_proce return(NULL); } - (*((integer8 *) (*s_objet).objet)) = 0; + // Récupération des données avec extension de signe. - for(i = 0; i < (signed) deplacement; i++) { - (*((integer8 *) (*s_objet).objet)) |= - ((integer8) octets[i]) - << (8 * ((((signed) deplacement) - 1) - i)); + integer1 i1; + integer2 i2; + integer4 i4; + integer8 i8; + + i1 = 0; + i2 = 0; + i4 = 0; + i8 = 0; + + for(i = 0; i < (signed) deplacement; i++) + { + switch(deplacement) + { + case 1: + i1 = (integer1) octets[0]; + break; + + case 2: + i2 |= (integer2) (((integer8) octets[i]) << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 4: + i4 |= (integer4) (((integer8) octets[i]) << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 8: + i8 |= (integer8) (((integer8) octets[i]) << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + } + } + + switch(deplacement) + { + case 1: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i1; + break; + + case 2: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i2; + break; + + case 4: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i4; + break; + + case 8: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i8; + break; + } } break;