--- rpl/src/instructions_r4.c 2013/03/11 15:41:05 1.73 +++ rpl/src/instructions_r4.c 2013/03/20 22:24:37 1.76 @@ -96,8 +96,8 @@ instruction_r_vers_b(struct_processus *s } else { - (*((logical8 *) (*s_objet_resultat).objet)) = (*((integer8 *) - (*s_objet_argument).objet)); + (*((logical8 *) (*s_objet_resultat).objet)) = (logical8) + (*((integer8 *) (*s_objet_argument).objet)); } } else @@ -1051,9 +1051,9 @@ instruction_read(struct_processus *s_eta * Fichiers séquentiels */ - longueur_questure = 256; + longueur_questure = 4096; - if ((tampon_lecture = malloc(longueur_questure * + if ((tampon_lecture = malloc(((size_t) longueur_questure) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -1072,8 +1072,8 @@ instruction_read(struct_processus *s_eta do { - longueur_effective = fread(tampon_lecture, - (size_t) sizeof(unsigned char), longueur_questure, + longueur_effective = (integer8) fread(tampon_lecture, + sizeof(unsigned char), (size_t) longueur_questure, (*descripteur).descripteur_c); pointeur = 0; @@ -1123,8 +1123,8 @@ instruction_read(struct_processus *s_eta do { - longueur_effective = fread(tampon_lecture, - (size_t) sizeof(unsigned char), longueur_questure, + longueur_effective = (integer8) fread(tampon_lecture, + sizeof(unsigned char), (size_t) longueur_questure, (*descripteur).descripteur_c); pointeur = 0; @@ -1192,7 +1192,8 @@ instruction_read(struct_processus *s_eta free(tampon_lecture); longueur_enregistrement = position_finale - position_initiale; - if ((tampon_lecture = malloc((longueur_enregistrement + 1) * + if ((tampon_lecture = malloc(((size_t) + (longueur_enregistrement + 1)) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -1210,9 +1211,8 @@ instruction_read(struct_processus *s_eta return; } - longueur_effective = fread(tampon_lecture, - (size_t) sizeof(unsigned char), - (size_t) longueur_enregistrement, + longueur_effective = (integer8) fread(tampon_lecture, + sizeof(unsigned char), (size_t) longueur_enregistrement, (*descripteur).descripteur_c); if (longueur_effective != longueur_enregistrement) @@ -1302,7 +1302,7 @@ instruction_read(struct_processus *s_eta } if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, - commande, strlen(commande), &ppStmt, &queue) + commande, (int) strlen(commande), &ppStmt, &queue) != SQLITE_OK) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -1473,7 +1473,7 @@ instruction_read(struct_processus *s_eta } if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, - commande, strlen(commande), &ppStmt, &queue) + commande, (int) strlen(commande), &ppStmt, &queue) != SQLITE_OK) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -1547,7 +1547,7 @@ instruction_read(struct_processus *s_eta } if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, - commande, strlen(commande), &ppStmt, &queue) + commande, (int) strlen(commande), &ppStmt, &queue) != SQLITE_OK) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -1640,7 +1640,7 @@ instruction_read(struct_processus *s_eta } if (sqlite3_prepare_v2((*descripteur).descripteur_sqlite, - commande, strlen(commande), &ppStmt, &queue) + commande, (int) strlen(commande), &ppStmt, &queue) != SQLITE_OK) { (*s_etat_processus).erreur_systeme = d_es_erreur_fichier; @@ -2028,7 +2028,7 @@ instruction_read(struct_processus *s_eta return; } - longueur = strlen(format_chaine); + longueur = (integer8) strlen(format_chaine); if (format_chaine[longueur - 1] != ')') { @@ -2090,16 +2090,17 @@ instruction_read(struct_processus *s_eta longueur_enregistrement = longueur; } - if ((tampon_lecture = malloc((longueur_enregistrement) - * sizeof(unsigned char))) == NULL) + if ((tampon_lecture = malloc(((size_t) + longueur_enregistrement) * sizeof(unsigned char))) + == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; return; } - longueur_effective = fread(tampon_lecture, - (size_t) sizeof(unsigned char), + longueur_effective = (integer8) fread(tampon_lecture, + sizeof(unsigned char), (size_t) longueur_enregistrement, (*descripteur).descripteur_c); @@ -2233,7 +2234,7 @@ instruction_read(struct_processus *s_eta presence_indicateur = d_faux; if ((tampon_lecture = realloc(tampon_lecture, - (longueur_effective + longueur_questure + 1) + ((size_t) (longueur_effective + longueur_questure + 1)) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -2258,10 +2259,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) (longueur_effective + + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_unix, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2273,10 +2274,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) (longueur_effective + + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv4, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2289,10 +2290,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) (longueur_effective + + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2335,11 +2336,10 @@ instruction_read(struct_processus *s_eta return; } - if (ios < 0) + if (ios <= 0) { nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); - scrutation_injection(s_etat_processus); } else { @@ -2347,11 +2347,13 @@ instruction_read(struct_processus *s_eta attente.tv_nsec = GRANULARITE_us * 1000; } + scrutation_injection(s_etat_processus); + if ((*s_etat_processus).var_volatile_requete_arret == -1) { if (ios >= 0) { - longueur_effective += ios; + longueur_effective = ios; } break; @@ -2361,7 +2363,7 @@ instruction_read(struct_processus *s_eta if (ios >= 0) { - longueur_effective += ios; + longueur_effective = ios; position_initiale = 0; presence_indicateur = d_faux; @@ -2443,7 +2445,8 @@ instruction_read(struct_processus *s_eta longueur_adresse = sizeof(adresse_unix); recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, + tampon_lecture, + (size_t) longueur_effective, 0, (struct sockaddr *) &adresse_unix, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2456,7 +2459,8 @@ instruction_read(struct_processus *s_eta longueur_adresse = sizeof(adresse_ipv4); recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, + tampon_lecture, + (size_t) longueur_effective, 0, (struct sockaddr *) &adresse_ipv4, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2470,7 +2474,8 @@ instruction_read(struct_processus *s_eta longueur_adresse = sizeof(adresse_ipv6); recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, + tampon_lecture, + (size_t) longueur_effective, 0, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2835,7 +2840,7 @@ instruction_read(struct_processus *s_eta longueur_adresse = 0; recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture, - position_finale, MSG_DONTWAIT, + (size_t) position_finale, MSG_DONTWAIT, NULL, &longueur_adresse); } @@ -2866,7 +2871,7 @@ instruction_read(struct_processus *s_eta presence_indicateur = d_faux; if ((tampon_lecture = realloc(tampon_lecture, - (longueur_effective + longueur_questure + 1) + ((size_t) (longueur_effective + longueur_questure) + 1) * sizeof(unsigned char))) == NULL) { (*s_etat_processus).erreur_systeme = @@ -2891,10 +2896,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) + (longueur_effective + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_unix, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2906,10 +2911,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) + (longueur_effective + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv4, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2922,10 +2927,10 @@ instruction_read(struct_processus *s_eta do { - ios = recvfrom((*((struct_socket *) + ios = (int) recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, - tampon_lecture, - longueur_effective + longueur_questure, + tampon_lecture, (size_t) + (longueur_effective + longueur_questure), MSG_PEEK | MSG_DONTWAIT, (struct sockaddr *) &adresse_ipv6, &longueur_adresse); } while((ios == -1) && (errno == EINTR)); @@ -2968,11 +2973,10 @@ instruction_read(struct_processus *s_eta return; } - if (ios < 0) + if (ios <= 0) { nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); - scrutation_injection(s_etat_processus); } else { @@ -2980,6 +2984,8 @@ instruction_read(struct_processus *s_eta attente.tv_nsec = GRANULARITE_us * 1000; } + scrutation_injection(s_etat_processus); + if ((*s_etat_processus).var_volatile_requete_arret == -1) { if (ios >= 0) @@ -2992,181 +2998,71 @@ instruction_read(struct_processus *s_eta // Une donnée a été reçue. - if (ios >= 0) + if (ios == (longueur_effective + longueur_questure)) { - longueur_effective += ios; + longueur_effective = ios; position_initiale = 0; presence_indicateur = d_faux; + } + else if (ios > 0) + { + // On retire une trame du buffer. - do + if ((*((struct_socket *) (*s_objet_argument_1).objet)) + .domaine == PF_UNIX) { - if (tampon_lecture[position_initiale] == '{') + do { - presence_indicateur = d_vrai; - break; - } - - position_initiale++; - } while(position_initiale < longueur_effective); - - if (presence_indicateur == d_vrai) + longueur_adresse = sizeof(adresse_unix); + recvfrom((*((struct_socket *) + (*s_objet_argument_1).objet)).socket, + tampon_lecture, (size_t) longueur_effective, + 0, (struct sockaddr *) + &adresse_unix, &longueur_adresse); + } while((ios == -1) && (errno == EINTR)); + } + else if ((*((struct_socket *) (*s_objet_argument_1) + .objet)).domaine == PF_INET) { - position_finale = position_initiale + 1; - presence_chaine = d_faux; - presence_indicateur = d_faux; - niveau = 1; - - while(position_finale < longueur_effective) + do { - caractere = tampon_lecture[position_finale]; - - if (caractere == '"') - { - if (position_finale > 0) - { - if (tampon_lecture[position_finale - 1] - != '\\') - { - presence_chaine = (presence_chaine == - d_vrai) ? d_faux : d_vrai; - } - } - else - { - presence_chaine = - (presence_chaine == d_vrai) - ? d_faux : d_vrai; - } - } - else - { - if (presence_chaine == d_faux) - { - if (caractere == '{') - { - niveau++; - } - else if (caractere == '}') - { - niveau--; - } - } - } - - if (niveau == 0) - { - presence_indicateur = d_vrai; - trame_complete = d_vrai; - break; - } - - position_finale++; - } + longueur_adresse = sizeof(adresse_ipv4); + recvfrom((*((struct_socket *) + (*s_objet_argument_1).objet)).socket, + tampon_lecture, (size_t) longueur_effective, + 0, (struct sockaddr *) + &adresse_ipv4, &longueur_adresse); + } while((ios == -1) && (errno == EINTR)); } - - // On retire une trame du buffer. - - if (trame_complete == d_vrai) + else if ((*((struct_socket *) (*s_objet_argument_1) + .objet)) .domaine == PF_INET6) { - if ((*((struct_socket *) (*s_objet_argument_1).objet)) - .domaine == PF_UNIX) +# ifdef IPV6 + do { - do - { - longueur_adresse = sizeof(adresse_unix); - recvfrom((*((struct_socket *) - (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, - 0, (struct sockaddr *) - &adresse_unix, &longueur_adresse); - } while((ios == -1) && (errno == EINTR)); - } - else if ((*((struct_socket *) (*s_objet_argument_1) - .objet)).domaine == PF_INET) + longueur_adresse = sizeof(adresse_ipv6); + recvfrom((*((struct_socket *) + (*s_objet_argument_1).objet)).socket, + tampon_lecture, (size_t) longueur_effective, + 0, (struct sockaddr *) + &adresse_ipv6, &longueur_adresse); + } while((ios == -1) && (errno == EINTR)); +# else + if ((*s_etat_processus).langue == 'F') { - do - { - longueur_adresse = sizeof(adresse_ipv4); - recvfrom((*((struct_socket *) - (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, - 0, (struct sockaddr *) - &adresse_ipv4, &longueur_adresse); - } while((ios == -1) && (errno == EINTR)); + printf("+++Attention : Support du protocole" + " IPv6 indisponible\n"); } - else if ((*((struct_socket *) (*s_objet_argument_1) - .objet)) .domaine == PF_INET6) + else { -# ifdef IPV6 - do - { - longueur_adresse = sizeof(adresse_ipv6); - recvfrom((*((struct_socket *) - (*s_objet_argument_1).objet)).socket, - tampon_lecture, longueur_effective, - 0, (struct sockaddr *) - &adresse_ipv6, &longueur_adresse); - } while((ios == -1) && (errno == EINTR)); -# else - if ((*s_etat_processus).langue == 'F') - { - printf("+++Attention : Support du protocole" - " IPv6 indisponible\n"); - } - else - { - printf("+++Warning : IPv6 support " - "unavailable\n"); - } - -# endif + printf("+++Warning : IPv6 support " + "unavailable\n"); } - - longueur_effective = ios; +# endif } - else - { - // Installation d'un timeout pour sortir de - // l'instruction dans le cas où la transmission serait - // invalide et que la trame reçue serait erronée. - - poll_fd.fd = (*((struct_socket *) - (*s_objet_argument_1).objet)).socket; - poll_fd.events = POLLIN; - - while((ios = poll(&poll_fd, 1, 10000)) <= 0) - { - // La fin de la trame n'est pas atteinte. - switch(ios) - { - case EINTR: - { - if ((*s_etat_processus) - .var_volatile_requete_arret == -1) - { - liberation(s_etat_processus, - s_objet_argument_1); - free(tampon_lecture); - return; - } - - break; - } - - case 0: - { - liberation(s_etat_processus, - s_objet_argument_1); - free(tampon_lecture); - - (*s_etat_processus).erreur_execution = - d_ex_fin_de_fichier_atteinte; - return; - } - } - } - } + longueur_effective = ios; + trame_complete = d_vrai; } # ifndef SEMAPHORES_NOMMES @@ -3208,57 +3104,18 @@ instruction_read(struct_processus *s_eta } } while(trame_complete == d_faux); - tampon_lecture[++position_finale] = d_code_fin_chaine; - tampon = (*s_etat_processus).instruction_courante; - (*s_etat_processus).instruction_courante = tampon_lecture; - - indicateur_48 = test_cfsf(s_etat_processus, 48); - cf(s_etat_processus, 48); - - recherche_type(s_etat_processus); - - if ((*s_etat_processus).erreur_execution != d_ex) - { - (*s_etat_processus).instruction_courante = tampon; - free(tampon_lecture); - - if (indicateur_48 == d_vrai) - { - sf(s_etat_processus, 48); - } - else - { - cf(s_etat_processus, 48); - } - - if ((*s_etat_processus).var_volatile_requete_arret == -1) - { - (*s_etat_processus).erreur_execution = d_ex; - } - - liberation(s_etat_processus, s_objet_argument_1); - return; - } - - if (indicateur_48 == d_vrai) - { - sf(s_etat_processus, 48); - } - else - { - cf(s_etat_processus, 48); - } - - (*s_etat_processus).instruction_courante = tampon; - /* * Création de la liste de sortie */ - if (depilement(s_etat_processus, &((*s_etat_processus).l_base_pile), - &s_objet_type) == d_erreur) + ptr = tampon_lecture; + + if ((s_objet_type = lecture_fichier_non_formate(s_etat_processus, + &ptr, longueur_effective, d_faux)) == NULL) { - (*s_etat_processus).erreur_execution = d_ex_manque_argument; + free(tampon_lecture); + + (*s_etat_processus).erreur_execution = d_ex_syntaxe; return; } @@ -3468,7 +3325,7 @@ instruction_read(struct_processus *s_eta longueur_adresse = 0; recvfrom((*((struct_socket *) (*s_objet_argument_1).objet)).socket, tampon_lecture, - position_finale, MSG_DONTWAIT, + (size_t) position_finale, MSG_DONTWAIT, NULL, &longueur_adresse); }