--- rpl/src/instructions_s1.c 2012/12/13 16:59:42 1.58 +++ rpl/src/instructions_s1.c 2016/03/16 11:10:47 1.85 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.11 - Copyright (C) 1989-2012 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.25 + Copyright (C) 1989-2016 Dr. BERTRAND Joël This file is part of RPL/2. @@ -147,9 +147,9 @@ instruction_sq(struct_processus *s_etat_ struct_objet *s_objet_argument; struct_objet *s_objet_resultat; - unsigned long i; - unsigned long j; - unsigned long k; + integer8 i; + integer8 j; + integer8 k; void *accumulateur; @@ -310,8 +310,8 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_colonnes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_lignes * sizeof(integer8 *))) == NULL) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_lignes) * sizeof(integer8 *))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -323,8 +323,8 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_lignes; i++) { if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_colonnes * sizeof(integer8))) == NULL) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_colonnes) * sizeof(integer8))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -366,8 +366,8 @@ instruction_sq(struct_processus *s_etat_ (*s_objet_resultat).type = MRL; (*((struct_matrice *) (*s_objet_resultat).objet)).type = 'R'; - if ((accumulateur = malloc((*(((struct_matrice *) - (*s_objet_argument).objet))).nombre_colonnes * + if ((accumulateur = malloc(((size_t) (*(((struct_matrice *) + (*s_objet_argument).objet))).nombre_colonnes) * sizeof(real8))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -381,8 +381,8 @@ instruction_sq(struct_processus *s_etat_ (*s_objet_resultat).objet)).tableau)[i]); if (((*((struct_matrice *) (*s_objet_resultat).objet)) - .tableau[i] = malloc((*(((struct_matrice *) - (*s_objet_resultat).objet))).nombre_colonnes * + .tableau[i] = malloc(((size_t) (*(((struct_matrice *) + (*s_objet_resultat).objet))).nombre_colonnes) * sizeof(real8))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -457,15 +457,15 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_colonnes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_lignes * sizeof(real8 *))) == NULL) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_lignes) * sizeof(real8 *))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if ((accumulateur = malloc((*(((struct_matrice *) - (*s_objet_argument).objet))).nombre_colonnes * sizeof(real8))) + if ((accumulateur = malloc(((size_t) (*(((struct_matrice *) + (*s_objet_argument).objet))).nombre_colonnes) * sizeof(real8))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -476,8 +476,8 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_lignes; i++) { if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_colonnes * sizeof(real8))) == NULL) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_colonnes) * sizeof(real8))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -549,15 +549,16 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_colonnes; if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_lignes * sizeof(struct_complexe16 *))) == NULL) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_lignes) * sizeof(struct_complexe16 *))) + == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - if ((accumulateur = malloc((*(((struct_matrice *) - (*s_objet_argument).objet))).nombre_colonnes * + if ((accumulateur = malloc(((size_t) (*(((struct_matrice *) + (*s_objet_argument).objet))).nombre_colonnes) * sizeof(complex16))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -568,8 +569,8 @@ instruction_sq(struct_processus *s_etat_ .objet))).nombre_lignes; i++) { if (((*((struct_matrice *) (*s_objet_resultat).objet)).tableau[i] = - malloc((*(((struct_matrice *) (*s_objet_resultat) - .objet))).nombre_colonnes * sizeof(struct_complexe16))) + malloc(((size_t) (*(((struct_matrice *) (*s_objet_resultat) + .objet))).nombre_colonnes) * sizeof(struct_complexe16))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -1216,9 +1217,9 @@ instruction_same(struct_processus *s_eta logical1 difference; - unsigned long i; - unsigned long j; - unsigned long nombre_elements; + integer8 i; + integer8 j; + integer8 nombre_elements; (*s_etat_processus).erreur_execution = d_ex; @@ -3088,10 +3089,11 @@ instruction_stof(struct_processus *s_eta for(i = 1; i <= 64; i++) { - indice_drapeau = i - 1; + indice_drapeau = (unsigned char) (i - 1); indice_bloc = indice_drapeau / taille_bloc; indice_bit = indice_drapeau % taille_bloc; - masque = ((t_8_bits) 1) << (taille_bloc - indice_bit - 1); + masque = (t_8_bits) (((t_8_bits) 1) << + (taille_bloc - indice_bit - 1)); if (((*((logical8 *) (*s_objet).objet)) & ((logical8) 1) << indice_drapeau) != 0) @@ -3223,7 +3225,7 @@ instruction_sto(struct_processus *s_etat (*(*s_etat_processus).pointeur_variable_courante).nom, (*(*s_etat_processus).pointeur_variable_courante) .variable_partagee, (*(*s_etat_processus) - .pointeur_variable_courante).origine) == d_faux) + .pointeur_variable_courante).origine) == NULL) { if (((*s_etat_processus).autorisation_nom_implicite == 'N') && ((*((struct_nom *) (*s_objet_1).objet)).symbole @@ -3381,12 +3383,13 @@ instruction_syseval(struct_processus *s_ int pipes_sortie[2]; int status; + integer8 longueur_ecriture; + integer8 longueur_traitee; + logical1 drapeau_fin; logical1 presence_stdin; long i; - long longueur_ecriture; - long longueur_traitee; long nombre_arguments; pid_t pid; @@ -3411,12 +3414,12 @@ instruction_syseval(struct_processus *s_ unsigned char *registre_programme; unsigned char *tampon; - unsigned long longueur_lecture; - unsigned long longueur_tampon; - unsigned long nombre_iterations; - unsigned long nombre_lignes; - unsigned long pointeur; - unsigned long registre_position_courante; + integer8 longueur_lecture; + integer8 longueur_tampon; + integer8 nombre_iterations; + integer8 nombre_lignes; + integer8 pointeur; + integer8 registre_position_courante; (*s_etat_processus).erreur_execution = d_ex; @@ -3632,7 +3635,8 @@ instruction_syseval(struct_processus *s_ (*s_etat_processus).definitions_chainees = registre_programme; (*s_etat_processus).position_courante = registre_position_courante; - if ((arguments = malloc(nombre_arguments * sizeof(char *))) == NULL) + if ((arguments = malloc(((size_t) nombre_arguments) * sizeof(char *))) + == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; @@ -3686,7 +3690,6 @@ instruction_syseval(struct_processus *s_ verrouillage_threads_concurrents(s_etat_processus); pid = fork(); - deverrouillage_threads_concurrents(s_etat_processus); if (pid < 0) { @@ -3731,6 +3734,8 @@ instruction_syseval(struct_processus *s_ } else if (pid == 0) { + (*s_etat_processus).erreur_systeme = d_es; + if (close(pipes_entree[1]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3816,6 +3821,8 @@ instruction_syseval(struct_processus *s_ } else { + deverrouillage_threads_concurrents(s_etat_processus); + if (close(pipes_entree[0]) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; @@ -3862,7 +3869,7 @@ instruction_syseval(struct_processus *s_ while(write_atomic(s_etat_processus, pipes_entree[1], ligne, - longueur_ecriture) != longueur_ecriture) + (size_t) longueur_ecriture) != longueur_ecriture) { # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) @@ -3981,21 +3988,25 @@ instruction_syseval(struct_processus *s_ return; } - if (waitpid(pid, &status, 0) == -1) + while(waitpid(pid, &status, 0) == -1) { -# ifndef SEMAPHORES_NOMMES - if (sem_post(&((*s_etat_processus).semaphore_fork)) - != 0) -# else - if (sem_post((*s_etat_processus).semaphore_fork) != 0) -# endif + if (errno != EINTR) { +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) + != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) + != 0) +# endif + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } + (*s_etat_processus).erreur_systeme = d_es_processus; return; } - - (*s_etat_processus).erreur_systeme = d_es_processus; - return; } # ifndef SEMAPHORES_NOMMES @@ -4016,7 +4027,7 @@ instruction_syseval(struct_processus *s_ pointeur = 0; nombre_iterations = 1; - if ((tampon = malloc((longueur_lecture + 1) * + if ((tampon = malloc(((size_t) (longueur_lecture + 1)) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -4035,9 +4046,9 @@ instruction_syseval(struct_processus *s_ return; } - while((ios = read_atomic(s_etat_processus, + while((ios = (int) read_atomic(s_etat_processus, pipes_sortie[0], &(tampon[pointeur]), - longueur_lecture)) > 0) + (size_t) longueur_lecture)) > 0) { # ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) != 0) @@ -4054,8 +4065,8 @@ instruction_syseval(struct_processus *s_ nombre_iterations++; if ((tampon = realloc(tampon, - ((nombre_iterations * longueur_lecture) + 1) * - sizeof(unsigned char))) == NULL) + ((size_t) ((nombre_iterations * longueur_lecture) + 1)) + * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -4102,10 +4113,10 @@ instruction_syseval(struct_processus *s_ * Transformation de la chaîne en liste */ - longueur_tampon = strlen(tampon); + longueur_tampon = (integer8) strlen(tampon); for(i = 0, ptr = tampon, nombre_lignes = 0; - i < (long) longueur_tampon; i++, ptr++) + i < longueur_tampon; i++, ptr++) { if ((*ptr) == d_code_retour_chariot) { @@ -4139,7 +4150,7 @@ instruction_syseval(struct_processus *s_ l_element_courant = (struct_liste_chainee *) (*s_objet_resultat).objet; - for(i = 0, ptr = tampon; i < (long) nombre_lignes; i++) + for(i = 0, ptr = tampon; i < nombre_lignes; i++) { if (((*l_element_courant).donnee = allocation(s_etat_processus, CHN)) == NULL) @@ -4151,7 +4162,7 @@ instruction_syseval(struct_processus *s_ if (((*(*l_element_courant).donnee).objet = analyse_flux(s_etat_processus, ptr, - strlen(ptr))) == NULL) + (integer8) strlen(ptr))) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -4875,7 +4886,7 @@ instruction_sci(struct_processus *s_etat return; } - (*((logical8 *) (*s_objet).objet)) = + (*((logical8 *) (*s_objet).objet)) = (logical8) (*((integer8 *) (*s_objet_argument).objet)); i43 = test_cfsf(s_etat_processus, 43); @@ -4913,15 +4924,15 @@ instruction_sci(struct_processus *s_etat { if (valeur_binaire[i] == '0') { - cf(s_etat_processus, j++); + cf(s_etat_processus, (unsigned char) j++); } else { - sf(s_etat_processus, j++); + sf(s_etat_processus, (unsigned char) j++); } } - for(; j <= 56; cf(s_etat_processus, j++)); + for(; j <= 56; cf(s_etat_processus, (unsigned char) j++)); cf(s_etat_processus, 49); sf(s_etat_processus, 50);