--- rpl/src/instructions_b1.c 2010/03/04 10:17:49 1.4 +++ rpl/src/instructions_b1.c 2010/03/06 18:29:07 1.5 @@ -241,7 +241,7 @@ instruction_b_vers_r(struct_processus *s void instruction_backspace(struct_processus *s_etat_processus) { - file *descripteur; + struct_descripteur_fichier *descripteur; integer8 position_finale; integer8 position_initiale; @@ -304,44 +304,45 @@ instruction_backspace(struct_processus * if ((*s_objet_argument).type == FCH) { /* - * Vérification des verrous + * Fichiers à accès séquentiel */ - lock.l_type = F_RDLCK; - lock.l_whence = SEEK_SET; - lock.l_start = 0; - lock.l_len = 0; - lock.l_pid = getpid(); - - if ((descripteur = descripteur_fichier(s_etat_processus, - (struct_fichier *) (*s_objet_argument).objet)) == NULL) + if ((*((struct_fichier *) (*s_objet_argument).objet)).acces == 'S') { - liberation(s_etat_processus, s_objet_argument); - return; - } + /* + * Vérification des verrous + */ - if (fcntl(fileno(descripteur), F_GETLK, &lock) == -1) - { - liberation(s_etat_processus, s_objet_argument); + lock.l_type = F_RDLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + lock.l_pid = getpid(); - (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; - return; - } + if ((descripteur = descripteur_fichier(s_etat_processus, + (struct_fichier *) (*s_objet_argument).objet)) == NULL) + { + liberation(s_etat_processus, s_objet_argument); + return; + } - if (lock.l_type != F_UNLCK) - { - liberation(s_etat_processus, s_objet_argument); + if (fcntl(fileno((*descripteur).descripteur_c), F_GETLK, &lock) + == -1) + { + liberation(s_etat_processus, s_objet_argument); - (*s_etat_processus).erreur_execution = - d_ex_fichier_verrouille; - return; - } + (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; + return; + } - if ((*((struct_fichier *) (*s_objet_argument).objet)).acces == 'S') - { - /* - * Fichiers à accès séquentiel - */ + if (lock.l_type != F_UNLCK) + { + liberation(s_etat_processus, s_objet_argument); + + (*s_etat_processus).erreur_execution = + d_ex_fichier_verrouille; + return; + } if ((*((struct_fichier *) (*s_objet_argument).objet)).binaire == 'N') @@ -350,7 +351,8 @@ instruction_backspace(struct_processus * * Fichiers formatés */ - if ((position_finale = ftell(descripteur)) == -1) + if ((position_finale = ftell((*descripteur).descripteur_c)) + == -1) { liberation(s_etat_processus, s_objet_argument); @@ -381,7 +383,8 @@ instruction_backspace(struct_processus * longueur_effective = longueur_questure; } - if (fseek(descripteur, position_initiale, SEEK_SET) != 0) + if (fseek((*descripteur).descripteur_c, position_initiale, + SEEK_SET) != 0) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -390,7 +393,7 @@ instruction_backspace(struct_processus * longueur_effective = fread(tampon_lecture, (size_t) sizeof(unsigned char), longueur_effective, - descripteur); + (*descripteur).descripteur_c); pointeur = longueur_effective - 1; presence_indicateur = d_faux; @@ -416,7 +419,7 @@ instruction_backspace(struct_processus * * Le début du fichier est atteint. */ - if (fseek(descripteur, 0, SEEK_SET) != 0) + if (fseek((*descripteur).descripteur_c, 0, SEEK_SET) != 0) { liberation(s_etat_processus, s_objet_argument); free(tampon_lecture); @@ -463,7 +466,8 @@ instruction_backspace(struct_processus * position_finale--; } - if (fseek(descripteur, position_initiale, SEEK_SET) != 0) + if (fseek((*descripteur).descripteur_c, position_initiale, + SEEK_SET) != 0) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -472,7 +476,7 @@ instruction_backspace(struct_processus * longueur_effective = fread(tampon_lecture, (size_t) sizeof(unsigned char), longueur_effective, - descripteur); + (*descripteur).descripteur_c); pointeur = longueur_effective - 1; presence_indicateur = d_faux; @@ -519,7 +523,8 @@ instruction_backspace(struct_processus * return; } - if (fseek(descripteur, position_finale, SEEK_SET) != 0) + if (fseek((*descripteur).descripteur_c, position_finale, + SEEK_SET) != 0) { liberation(s_etat_processus, s_objet_argument); free(tampon_lecture);