--- rpl/src/instructions_w1.c 2010/03/08 16:44:10 1.9 +++ rpl/src/instructions_w1.c 2011/01/03 12:08:08 1.31 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.12 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.0.20 + Copyright (C) 1989-2011 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -124,7 +124,7 @@ instruction_while(struct_processus *s_et void instruction_warranty(struct_processus *s_etat_processus) { -# include "garanties.conv.h" +# include "garanties-conv.h" (*s_etat_processus).erreur_execution = d_ex; @@ -226,8 +226,7 @@ instruction_wait(struct_processus *s_eta return; } - if (((*s_objet).type == INT) || - ((*s_objet).type == REL)) + if (((*s_objet).type == INT) || ((*s_objet).type == REL)) { if ((*s_objet).type == INT) { @@ -262,16 +261,28 @@ instruction_wait(struct_processus *s_eta do { +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif code_retour = nanosleep(&temporisation, &temporisation); erreur = errno; +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -408,7 +419,9 @@ instruction_write(struct_processus *s_et struct sigaction registre; struct sockaddr_in adresse_ipv4; +# ifdef IPV6 struct sockaddr_in6 adresse_ipv6; +# endif struct sockaddr_un adresse_unix; struct flock lock; @@ -1364,8 +1377,11 @@ instruction_write(struct_processus *s_et return; } - if (sem_post(&((*s_etat_processus).semaphore_fork)) - != 0) +# ifndef SEMAPHORES_NOMMES + if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) +# endif { if (sigaction(SIGPIPE, ®istre, NULL) != 0) { @@ -1388,7 +1404,11 @@ instruction_write(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1408,7 +1428,11 @@ instruction_write(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1457,22 +1481,36 @@ instruction_write(struct_processus *s_et adresse_unix.sun_family = AF_UNIX; strncpy(adresse_unix.sun_path, (*((struct_socket *) (*s_objet_argument_1).objet)).adresse_distante, - 108); - adresse_unix.sun_path[108 - 1] = d_code_fin_chaine; + UNIX_PATH_MAX); + adresse_unix.sun_path[UNIX_PATH_MAX - 1] = + d_code_fin_chaine; +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (sendto((*((struct_socket *) (*s_objet_argument_1).objet)).socket, chaine, strlen(chaine), 0, (struct sockaddr *) &adresse_unix, sizeof(adresse_unix)) < 0) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1487,7 +1525,11 @@ instruction_write(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1514,20 +1556,33 @@ instruction_write(struct_processus *s_et adresse_ipv4.sin_port = htons(port); adresse_ipv4.sin_addr.s_addr = htonl(calcul_adresse); +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus) .semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus) .semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (sendto((*((struct_socket *) (*s_objet_argument_1).objet)).socket, chaine, strlen(chaine), 0, (struct sockaddr *) &adresse_ipv4, sizeof(adresse_ipv4)) < 0) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1542,8 +1597,13 @@ instruction_write(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1576,6 +1636,7 @@ instruction_write(struct_processus *s_et &(adresse[12]), &(adresse[13]), &(adresse[14]), &(adresse[15]), &port)== 17) { // Adresse IPv6 +# ifdef IPV6 memset(&adresse_ipv6, 0, sizeof(adresse_ipv6)); adresse_ipv6.sin6_family = AF_INET6; adresse_ipv6.sin6_port = htons((uint16_t) port); @@ -1584,20 +1645,33 @@ instruction_write(struct_processus *s_et adresse_ipv6.sin6_addr.s6_addr[i] = adresse[i], i++); +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus) .semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus) .semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (sendto((*((struct_socket *) (*s_objet_argument_1).objet)).socket, chaine, strlen(chaine), 0, (struct sockaddr *) &adresse_ipv6, sizeof(adresse_ipv6)) < 0) { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1612,8 +1686,13 @@ instruction_write(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus) .semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus) + .semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -1622,6 +1701,18 @@ instruction_write(struct_processus *s_et return; } } +# else + if ((*s_etat_processus).langue == 'F') + { + printf("+++Attention : Support du protocole" + " IPv6 indisponible\n"); + } + else + { + printf("+++Warning : IPv6 support " + "unavailable\n"); + } +# endif } else { @@ -1819,13 +1910,25 @@ instruction_wflock(struct_processus *s_e return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2134,15 +2237,27 @@ instruction_wfproc(struct_processus *s_e registre_instruction_valide; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif nanosleep(&attente, NULL); +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2393,15 +2508,27 @@ instruction_wfdata(struct_processus *s_e return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif nanosleep(&attente, NULL); +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2511,7 +2638,9 @@ instruction_wfsock(struct_processus *s_e struct_objet *s_objet_resultat; struct sockaddr_in adresse_ipv4; +# ifdef IPV6 struct sockaddr_in6 adresse_ipv6; +# endif unsigned long i; @@ -2585,11 +2714,19 @@ instruction_wfsock(struct_processus *s_e { drapeau = d_vrai; +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (((*((struct_socket *) (*s_objet_resultat).objet)).socket = accept((*((struct_socket *) (*s_objet_argument).objet)) @@ -2598,7 +2735,11 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2630,7 +2771,11 @@ instruction_wfsock(struct_processus *s_e } else { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2661,17 +2806,26 @@ instruction_wfsock(struct_processus *s_e else if ((*((struct_socket *) (*s_objet_resultat).objet)).domaine == PF_INET6) { +# ifdef IPV6 longueur = sizeof(adresse_ipv6); do { drapeau = d_vrai; +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (((*((struct_socket *) (*s_objet_resultat).objet)).socket = accept((*((struct_socket *) (*s_objet_argument).objet)) @@ -2680,7 +2834,11 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2712,7 +2870,11 @@ instruction_wfsock(struct_processus *s_e } else { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2748,6 +2910,18 @@ instruction_wfsock(struct_processus *s_e .objet)).adresse_distante, "%s(%u)", (*((struct_socket *) (*s_objet_resultat) .objet)).adresse_distante, ntohs(adresse_ipv6.sin6_port)); +# else + if ((*s_etat_processus).langue == 'F') + { + printf("+++Attention : Support du protocole" + " IPv6 indisponible\n"); + } + else + { + printf("+++Warning : IPv6 support " + "unavailable\n"); + } +# endif } else { @@ -2757,11 +2931,19 @@ instruction_wfsock(struct_processus *s_e { drapeau = d_vrai; +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif if (((*((struct_socket *) (*s_objet_resultat).objet)).socket = accept((*((struct_socket *) (*s_objet_argument).objet)) @@ -2769,7 +2951,11 @@ instruction_wfsock(struct_processus *s_e { erreur = errno; +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -2801,7 +2987,11 @@ instruction_wfsock(struct_processus *s_e } else { +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3087,15 +3277,27 @@ instruction_wfpoke(struct_processus *s_e do { +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif nanosleep(&attente, NULL); +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) { @@ -3237,16 +3439,28 @@ instruction_wfack(struct_processus *s_et return; } +# ifndef SEMAPHORES_NOMMES if (sem_post(&((*s_etat_processus).semaphore_fork)) != 0) { (*s_etat_processus).erreur_systeme = d_es_processus; return; } +# else + if (sem_post((*s_etat_processus).semaphore_fork) != 0) + { + (*s_etat_processus).erreur_systeme = d_es_processus; + return; + } +# endif nanosleep(&attente, NULL); INCR_GRANULARITE(attente.tv_nsec); +# ifndef SEMAPHORES_NOMMES while(sem_wait(&((*s_etat_processus).semaphore_fork)) == -1) +# else + while(sem_wait((*s_etat_processus).semaphore_fork) == -1) +# endif { if (errno != EINTR) {