--- rpl/src/instructions_o1.c 2012/02/29 12:07:47 1.49 +++ rpl/src/instructions_o1.c 2012/05/21 17:25:44 1.55 @@ -1,6 +1,6 @@ /* ================================================================================ - RPL/2 (R) version 4.1.6 + RPL/2 (R) version 4.1.9 Copyright (C) 1989-2012 Dr. BERTRAND Joël This file is part of RPL/2. @@ -1031,7 +1031,7 @@ instruction_open(struct_processus *s_eta " { \"stty\" { \"stty parameters\" ... } } } OPEN\n"); printf(" { \"sockettype\" { \"name\" \"local name\" } } OPEN\n"); printf(" { \"sockettype\" \"socketdomain\" \"protection\" } OPEN\n"); - printf(" \"/semaphore\" OPEN\n"); + printf(" \"/semaphore\" OPEN\n\n"); printf(" File type : NEW/OLD/REPLACE/UNKNOWN/SCRATCH\n"); printf(" File access : SEQUENTIAL/DIRECT/KEYED\n"); @@ -1069,7 +1069,7 @@ instruction_open(struct_processus *s_eta printf(" Port : { \"PORT\" port number }\n"); printf(" Protocol : { \"PROTOCOL\" \"protocol\" }\n\n"); - printf(" { { \"NAME\" \"filename\" } } OPEN\n"); + printf(" { { \"NAME\" \"filename\" } \"SEQUENTIAL\" } OPEN\n"); printf(" { \"SCRATCH\" } OPEN\n"); printf(" { { \"NAME\" \"filename\" } \"UNKNOWN\" \"FORMATTED\" " "\"DIRECT\" } OPEN\n"); @@ -4715,6 +4715,7 @@ instruction_open(struct_processus *s_eta = protection; (*(*((struct_socket *) (*s_objet_resultat).objet)) .format).objet = NULL; + (*((struct_socket *) (*s_objet_resultat).objet)).adresse = NULL; switch(type_socket) { @@ -4978,6 +4979,9 @@ instruction_open(struct_processus *s_eta return; } + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(22 * sizeof(unsigned char))) == NULL) @@ -5082,6 +5086,9 @@ instruction_open(struct_processus *s_eta return; } + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(55 * sizeof(unsigned char))) == NULL) @@ -5113,6 +5120,15 @@ instruction_open(struct_processus *s_eta printf("+++Warning : IPv6 support " "unavailable\n"); } + + liberation(s_etat_processus, s_objet_argument); + liberation(s_etat_processus, s_objet_resultat); + + freeaddrinfo(resolution); + + (*s_etat_processus).erreur_execution = + d_ex_instruction_indisponible; + return; # endif } @@ -5127,6 +5143,9 @@ instruction_open(struct_processus *s_eta { // Hôte défini par une adresse if (strcmp(protocole, "IPV4") == 0) { // Accès en IPv4 + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(22 * sizeof(unsigned char))) == NULL) @@ -5202,6 +5221,9 @@ instruction_open(struct_processus *s_eta else { // Accès en IPv6 # ifdef IPV6 + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(55 * sizeof(unsigned char))) == NULL) @@ -5283,6 +5305,13 @@ instruction_open(struct_processus *s_eta printf("+++Warning : IPv6 support " "unavailable\n"); } + + liberation(s_etat_processus, s_objet_argument); + liberation(s_etat_processus, s_objet_resultat); + + (*s_etat_processus).erreur_execution = + d_ex_instruction_indisponible; + return; # endif } } @@ -5516,6 +5545,9 @@ instruction_open(struct_processus *s_eta .socket_en_ecoute = 'N'; } + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(22 * sizeof(unsigned char))) == NULL) @@ -5622,6 +5654,9 @@ instruction_open(struct_processus *s_eta .socket_en_ecoute = 'N'; } + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(55 * sizeof(unsigned char))) == NULL) @@ -5653,6 +5688,15 @@ instruction_open(struct_processus *s_eta printf("+++Warning : IPv6 support " "unavailable\n"); } + + liberation(s_etat_processus, s_objet_argument); + liberation(s_etat_processus, s_objet_resultat); + + freeaddrinfo(resolution); + + (*s_etat_processus).erreur_execution = + d_ex_instruction_indisponible; + return; # endif } @@ -5669,6 +5713,9 @@ instruction_open(struct_processus *s_eta { // Accès en IPv4 if (type_adresse == '4') { + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(22 * sizeof(unsigned char))) == NULL) @@ -5698,6 +5745,9 @@ instruction_open(struct_processus *s_eta } else { + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc( sizeof(unsigned char))) == NULL) @@ -5765,6 +5815,9 @@ instruction_open(struct_processus *s_eta # ifdef IPV6 if (type_adresse == '6') { + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc(55 * sizeof(unsigned char))) == NULL) @@ -5795,6 +5848,9 @@ instruction_open(struct_processus *s_eta } else { + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc( sizeof(unsigned char))) == NULL) @@ -5865,10 +5921,20 @@ instruction_open(struct_processus *s_eta printf("+++Warning : IPv6 support " "unavailable\n"); } + + liberation(s_etat_processus, s_objet_argument); + liberation(s_etat_processus, s_objet_resultat); + + (*s_etat_processus).erreur_execution = + d_ex_instruction_indisponible; + return; # endif } else { // Socket UNIX + free((*((struct_socket *) (*s_objet_resultat) + .objet)).adresse); + if (((*((struct_socket *) (*s_objet_resultat) .objet)).adresse = malloc( sizeof(unsigned char))) == NULL)