Diff for /rpl/src/rpl.h between versions 1.317 and 1.344

version 1.317, 2017/08/21 12:17:20 version 1.344, 2022/06/15 06:45:44
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.1.28    RPL/2 (R) version 4.1.33
   Copyright (C) 1989-2017 Dr. BERTRAND Joël    Copyright (C) 1989-2021 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 186 Line 186
 #   include "zlib.h"  #   include "zlib.h"
   
 #   include "openssl/evp.h"  #   include "openssl/evp.h"
 #   ifndef OPENSSL_NO_MD2  #   ifndef RPLCXX
 #       include "openssl/md2.h"  #       ifndef OPENSSL_NO_MD2
 #   endif  #           include "openssl/md2.h"
 #   ifndef OPENSSL_NO_MD4  #       endif
 #       include "openssl/md4.h"  #       ifndef OPENSSL_NO_MD4
 #   endif  #           include "openssl/md4.h"
 #   ifndef OPENSSL_NO_MD5  #       endif
 #       include "openssl/md5.h"  #       ifndef OPENSSL_NO_MD5
 #   endif  #           include "openssl/md5.h"
 #   ifndef OPENSSL_NO_MDC2  #       endif
 #       include "openssl/mdc2.h"  #       ifndef OPENSSL_NO_MDC2
 #   endif  #           include "openssl/mdc2.h"
 #   ifndef OPENSSL_NO_RIPEMD  #       endif
 #       include "openssl/ripemd.h"  #       ifndef OPENSSL_NO_RIPEMD
 #   endif  #           include "openssl/ripemd.h"
 #   ifndef OPENSSL_NO_SHA  #       endif
 #       include "openssl/sha.h"  #       ifndef OPENSSL_NO_SHA
 #   endif  #           include "openssl/sha.h"
 #   ifndef OPENSSL_NO_WHIRLPOOL  #       endif
 #       include "openssl/whrlpool.h"  #       ifndef OPENSSL_NO_WHIRLPOOL
 #   endif  #           include "openssl/whrlpool.h"
 #   ifndef OPENSSL_NO_AES  #       endif
 #       include "openssl/aes.h"  #       ifndef OPENSSL_NO_AES
 #   endif  #           include "openssl/aes.h"
 #   ifndef OPENSSL_NO_CAMELLIA  #       endif
 #       include "openssl/camellia.h"  #       ifndef OPENSSL_NO_CAMELLIA
 #   endif  #           include "openssl/camellia.h"
 #   ifndef OPENSSL_NO_RC2  #       endif
 #       include "openssl/rc2.h"  #       ifndef OPENSSL_NO_RC2
 #   endif  #           include "openssl/rc2.h"
 #   ifndef OPENSSL_NO_IDEA  #       endif
 #       include "openssl/idea.h"  #       ifndef OPENSSL_NO_IDEA
   #           include "openssl/idea.h"
   #       endif
 #   endif  #   endif
   
 #   include "sqlite3.h"  #   include "sqlite3.h"
Line 269 Line 271
   
 #ifndef RPLARGS  #ifndef RPLARGS
 #   ifndef UNIX_PATH_MAX  #   ifndef UNIX_PATH_MAX
         struct sockaddr_un sizecheck;  #       pragma GCC diagnostic push
   #       pragma GCC diagnostic ignored "-Wunused-variable"
           static struct sockaddr_un sizecheck;
 #       define UNIX_PATH_MAX sizeof(sizecheck.sun_path)  #       define UNIX_PATH_MAX sizeof(sizecheck.sun_path)
   #       pragma GCC diagnostic pop
 #   endif  #   endif
 #endif  #endif
   
Line 325  enum signaux_rpl Line 330  enum signaux_rpl
     rpl_sighup,      rpl_sighup,
     rpl_sigtstp,      rpl_sigtstp,
     rpl_sigexcept,      rpl_sigexcept,
     rpl_sigmax      rpl_sigmax,
       rpl_siguser         // Base des signaux à la discrétion de l'utilisateur
 };  };
   
 #define LONGUEUR_QUEUE_SIGNAUX          1024  #define LONGUEUR_QUEUE_SIGNAUX          1024
Line 394  union semun Line 400  union semun
   
 #ifdef IPCS_SYSV  #ifdef IPCS_SYSV
 #   ifdef DEBUG_SEMAPHORES  #   ifdef DEBUG_SEMAPHORES
   #       define sem_init(a, b, c) ({ \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                           "initialization at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                   sem_init_SysV(a, b, c); })
 #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \
                 uprintf("[%d-%llu] Semaphore %s (%p) "\                  uprintf("[%d-%llu] Semaphore %s (%p) "\
                 "waiting at %s() " \                  "waiting at %s() " \
                 "line #%d\n", (int) getpid(), (unsigned long long) i\                  "line #%d <%d>\n", (int) getpid(), (unsigned long long) i\
                         pthread_self(), \                          pthread_self(), \
                 #a, a, __FUNCTION__, __LINE__), fflush(stdout); \                  #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value > 1) BUG(1, uprintf("Value %d\n", value)); \  
                 sem_wait_SysV(a); })                  sem_wait_SysV(a); })
 #   define sem_post(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_trywait(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "trywaiting at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) i\
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                   sem_trywait_SysV(a); })
   #       define sem_post(a) ({ int value; sem_getvalue(a, &value); \
                 uprintf("[%d-%llu] Semaphore %s (%p) "\                  uprintf("[%d-%llu] Semaphore %s (%p) "\
                 "posting at %s() " \                  "posting at %s() " \
                 "line #%d\n", (int) getpid(), (unsigned long long) \                  "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                         pthread_self(), \                          pthread_self(), \
                 #a, a, __FUNCTION__, __LINE__), fflush(stdout); \                  #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value > 0) BUG(1, uprintf("Value %d\n", value)); \  
                 sem_post_SysV(a); })                  sem_post_SysV(a); })
 #   define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "destroying at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value == 0) BUG(1, uprintf("Value %d\n", value)); \                  if (value == 0) BUG(1, uprintf("Value %d\n", value)); \
                 sem_destroy_SysV(a); })                  sem_destroy_SysV(a); })
 #   else  #   else
Line 428  union semun Line 451  union semun
 #   define sem_unlink(a)        sem_unlink_SysV(a)  #   define sem_unlink(a)        sem_unlink_SysV(a)
 #else  #else
 #   ifdef DEBUG_SEMAPHORES  #   ifdef DEBUG_SEMAPHORES
   #       define sem_init(a, b, c) ({ \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                           "initialization at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, c), fflush(stdout); \
                   sem_init(a, b, c); })
 #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_wait(a) ({ int value; sem_getvalue(a, &value); \
                 uprintf("[%d-%llu] Semaphore %s (%p) "\                  uprintf("[%d-%llu] Semaphore %s (%p) "\
                 "waiting at %s() " \                  "waiting at %s() " \
                 "line #%d\n", (int) getpid(), (unsigned long long) \                  "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                         pthread_self(), \                          pthread_self(), \
                 #a, a, __FUNCTION__, __LINE__), fflush(stdout); \                  #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value > 1) BUG(1, uprintf("Value %d\n", value)); sem_wait(a); })                  sem_wait(a); })
   #       define sem_trywait(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "trywaiting at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                   sem_trywait(a); })
 #       define sem_post(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_post(a) ({ int value; sem_getvalue(a, &value); \
                 uprintf("[%d-%llu] Semaphore %s (%p) "\                  uprintf("[%d-%llu] Semaphore %s (%p) "\
                 "posting at %s() " \                  "posting at %s() " \
                 "line #%d\n", (int) getpid(), (unsigned long long) \                  "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                         pthread_self(), \                          pthread_self(), \
                 #a, a, __FUNCTION__, __LINE__), fflush(stdout); \                  #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value > 0) BUG(1, uprintf("Value %d\n", value)); sem_post(a); })                  sem_post(a); })
 #       define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \  #       define sem_destroy(a) ({ int value; sem_getvalue(a, &value); \
                   uprintf("[%d-%llu] Semaphore %s (%p) "\
                   "destroying at %s() " \
                   "line #%d <%d>\n", (int) getpid(), (unsigned long long) \
                           pthread_self(), \
                   #a, a, __FUNCTION__, __LINE__, value), fflush(stdout); \
                 if (value == 0) BUG(1, uprintf("Value %d\n", value)); \                  if (value == 0) BUG(1, uprintf("Value %d\n", value)); \
                 sem_destroy(a); })                  sem_destroy(a); })
 #   endif  #   endif
Line 531  union semun Line 573  union semun
   
     __EXTERN__ pid_t                pid_processus_pere;      __EXTERN__ pid_t                pid_processus_pere;
   
       __EXTERN__ pthread_mutex_t      mutex_sigaction;
     __EXTERN__ pthread_mutex_t      mutex_liste_threads;      __EXTERN__ pthread_mutex_t      mutex_liste_threads;
       __EXTERN__ pthread_mutex_t      mutex_liste_threads_surveillance;
     __EXTERN__ pthread_mutex_t      mutex_creation_variable_partagee      __EXTERN__ pthread_mutex_t      mutex_creation_variable_partagee
                                             __STATIC_MUTEX_INITIALIZATION__;                                              __STATIC_MUTEX_INITIALIZATION__;
     __EXTERN__ pthread_mutex_t      mutex_sections_critiques;      __EXTERN__ pthread_mutex_t      mutex_sections_critiques;
Line 539  union semun Line 583  union semun
     __EXTERN__ pthread_mutex_t      mutex_sem __STATIC_MUTEX_INITIALIZATION__;      __EXTERN__ pthread_mutex_t      mutex_sem __STATIC_MUTEX_INITIALIZATION__;
   
     __EXTERN__ volatile int         routine_recursive;      __EXTERN__ volatile int         routine_recursive;
     __EXTERN__ volatile int         nombre_thread_surveillance_processus;      __EXTERN__ volatile int         nombre_threads_surveillance_processus;
   
 #   define SEM_FORK                 0  #   define SEM_FORK                 0
 #   define SEM_QUEUE                1  #   define SEM_QUEUE                1
Line 692  void *debug_memoire_modification(void *p Line 736  void *debug_memoire_modification(void *p
 void debug_memoire_retrait(void *ptr);  void debug_memoire_retrait(void *ptr);
 void debug_memoire_verification();  void debug_memoire_verification();
   
 pid_t debug_fork();  
   
 #define malloc(s) debug_memoire_ajout(s, __FUNCTION__, __LINE__, #s)  
 #define free(s) debug_memoire_retrait(s)  #define free(s) debug_memoire_retrait(s)
 #define realloc(s, t) debug_memoire_modification(s, t, \  #ifdef RPLCXX
             __FUNCTION__, __LINE__, #t)  #   define malloc(s) debug_memoire_ajout(s, \
 #define fork() debug_fork()                  const_cast<const unsigned char *> \
                   (reinterpret_cast<unsigned char *> \
                   (const_cast<char *>(__FUNCTION__))), __LINE__, \
                   const_cast<const unsigned char *> \
                   (reinterpret_cast<unsigned char *> \
                   (const_cast<char *>(#s))))
   #   define realloc(s, t) debug_memoire_modification(s, t, \
                   const_cast<const unsigned char *> \
                   (reinterpret_cast<unsigned char *> \
                   (const_cast<char *>(__FUNCTION__))), __LINE__, \
                   const_cast<const unsigned char *> \
                   (reinterpret_cast<unsigned char *> \
                   (const_cast<char *>(#t))))
   #else
   #   define malloc(s) debug_memoire_ajout(s, __FUNCTION__, __LINE__, \
                   (const unsigned char *) #s)
   #   define realloc(s, t) debug_memoire_modification(s, t, \
                   __FUNCTION__, __LINE__, (const unsigned char *) #t)
   #endif
   #define fork() debug_fork(s_etat_processus)
 #endif  #endif
   
 #ifdef DEBUG_RETURN  #ifdef DEBUG_RETURN
Line 775  pid_t debug_fork(); Line 835  pid_t debug_fork();
 #define d_SPH                   "Semaphore $n 'name'"  #define d_SPH                   "Semaphore $n 'name'"
 #define d_TAB                   "<[ table ]>"  #define d_TAB                   "<[ table ]>"
 #define d_MTX                   "Mutex $n"  #define d_MTX                   "Mutex $n"
 #define d_REC                   "Record /'name_1', ..., 'name_n'/"  #define d_REC                   "|[ record ]|"
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
Line 1023  pid_t debug_fork(); Line 1083  pid_t debug_fork();
 #   define d_ex_taille_message                  __erreur(92)  #   define d_ex_taille_message                  __erreur(92)
 #   define d_ex_type_externe_dup                __erreur(93)  #   define d_ex_type_externe_dup                __erreur(93)
 #   define d_ex_type_externe_drop               __erreur(94)  #   define d_ex_type_externe_drop               __erreur(94)
   #   define d_ex_simplification                  __erreur(95)
 #endif  #endif
   
   
Line 1075  pid_t debug_fork(); Line 1136  pid_t debug_fork();
 #define VIN __RPL_VIN  #define VIN __RPL_VIN
 #define VRL __RPL_VRL  #define VRL __RPL_VRL
   
 enum t_rplcas_commandes     { RPLCAS_INTEGRATION = 0, RPLCAS_LIMITE };  enum t_rplcas_commandes     { RPLCAS_INTEGRATION = 0, RPLCAS_LIMITE,
                               RPLCAS_SIMPLIFICATION };
   
 enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, EXT, FCH, FCT, INT, LST,  enum t_type     { ADR = 0, ALG, BIN, CHN, CPL, EXT, FCH, FCT, INT, LST,
                 MCX, MIN, MRL, MTX, NOM, NON, PRC, REC, REL, RPN, SCK,                  MCX, MIN, MRL, MTX, NOM, NON, PRC, REC, REL, RPN, SCK,
Line 1137  enum t_type  { ADR = 0, ALG, BIN, CHN, C Line 1199  enum t_type  { ADR = 0, ALG, BIN, CHN, C
     PRC : processus (struct_processus_fils *)      PRC : processus (struct_processus_fils *)
             Sans objet.              Sans objet.
   
       REC : enregistrement (struct_record *)
   
     REL : reel sur 64 bits (real*8, real8 *)      REL : reel sur 64 bits (real*8, real8 *)
             Sans objet.              Sans objet.
   
Line 1582  typedef struct liste_pile_systeme Line 1646  typedef struct liste_pile_systeme
     logical1                    creation_variables_statiques;      logical1                    creation_variables_statiques;
     logical1                    creation_variables_partagees;      logical1                    creation_variables_partagees;
     logical1                    evaluation_expression;      logical1                    evaluation_expression;
       logical1                    debug_programme;
   
     unsigned char               clause;      unsigned char               clause;
   
Line 1762  typedef struct tableau Line 1827  typedef struct tableau
   
 /*  /*
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
     Structure enregistrement
   --------------------------------------------------------------------------------
   */
   
   typedef struct record
   {
       struct_objet        *noms;
       struct_objet        *donnees;
   } struct_record;
   
   
   /*
   --------------------------------------------------------------------------------
   Structure arbre    Structure arbre
 --------------------------------------------------------------------------------  --------------------------------------------------------------------------------
 */  */
Line 1828  typedef struct rpl_arguments Line 1906  typedef struct rpl_arguments
     unsigned char               test_instruction;      unsigned char               test_instruction;
   
     integer8                    nombre_arguments;      integer8                    nombre_arguments;
     // Nombre d'arguments de la fonction, positif ou nul.      // Nombre d'arguments de la fonction
       // 0       : instruction infixe
       // positif : nombre d'arguments (notation algébrique possible)
       // -1      : notation algrébrique non autorisée
   
     void                        *s_etat_processus;      void                        *s_etat_processus;
 } struct_rpl_arguments;  } struct_rpl_arguments;
Line 2478  typedef struct processus Line 2559  typedef struct processus
     CACHE(integer8, int)      CACHE(integer8, int)
     CACHE(struct_matrice, mat)      CACHE(struct_matrice, mat)
     CACHE(struct_nom, nom)      CACHE(struct_nom, nom)
       CACHE(struct_record, rec)
     CACHE(real8, rel)      CACHE(real8, rel)
     CACHE(struct_tableau, tab)      CACHE(struct_tableau, tab)
     CACHE(struct_vecteur, vec)      CACHE(struct_vecteur, vec)
Line 2497  typedef struct processus Line 2579  typedef struct processus
 } struct_processus;  } struct_processus;
 #endif  #endif
   
   #ifdef DEBUG_MEMOIRE
   pid_t debug_fork(struct_processus *s_etat_processus);
   #endif
   
   
 /*  /*
 ================================================================================  ================================================================================
Line 2893  void instruction_rdz(struct_processus *s Line 2979  void instruction_rdz(struct_processus *s
 void instruction_re(struct_processus *s_etat_processus);  void instruction_re(struct_processus *s_etat_processus);
 void instruction_read(struct_processus *s_etat_processus);  void instruction_read(struct_processus *s_etat_processus);
 void instruction_recode(struct_processus *s_etat_processus);  void instruction_recode(struct_processus *s_etat_processus);
   void instruction_record(struct_processus *s_etat_processus);
 void instruction_recv(struct_processus *s_etat_processus);  void instruction_recv(struct_processus *s_etat_processus);
 void instruction_redraw(struct_processus *s_etat_processus);  void instruction_redraw(struct_processus *s_etat_processus);
 void instruction_regex(struct_processus *s_etat_processus);  void instruction_regex(struct_processus *s_etat_processus);
Line 3263  int envoi_signal_contexte(struct_process Line 3350  int envoi_signal_contexte(struct_process
         enum signaux_rpl signal);          enum signaux_rpl signal);
 int envoi_signal_processus(pid_t pid, enum signaux_rpl signal,  int envoi_signal_processus(pid_t pid, enum signaux_rpl signal,
         logical1 test_ouverture);          logical1 test_ouverture);
 int envoi_signal_thread(pthread_t tid, enum signaux_rpl signal);  int envoi_signal_thread(struct_processus *s_etat_processus,
           pthread_t tid, enum signaux_rpl signal);
 #endif  #endif
   
 /*  /*
Line 3347  struct_liste_chainee *sauvegarde_argumen Line 3435  struct_liste_chainee *sauvegarde_argumen
 #ifndef RPLARGS  #ifndef RPLARGS
 unsigned char *analyse_algebrique(struct_processus *s_etat_processus,  unsigned char *analyse_algebrique(struct_processus *s_etat_processus,
         unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste);          unsigned char *chaine_algebrique, struct_liste_chainee **l_base_liste);
   #endif
 unsigned char *analyse_flux(struct_processus *s_etat_processus,  unsigned char *analyse_flux(struct_processus *s_etat_processus,
         unsigned char *flux, integer8 longueur);          unsigned char *flux, integer8 longueur);
   #ifndef RPLARGS
 unsigned char *chiffrement(struct_processus *s_etat_processus,  unsigned char *chiffrement(struct_processus *s_etat_processus,
         const EVP_CIPHER *type_chiffrement,          const EVP_CIPHER *type_chiffrement,
         logical1 encodage, unsigned char *message, integer8 longueur_message,          logical1 encodage, unsigned char *message, integer8 longueur_message,
Line 3371  unsigned char *formateur_fichier(struct_ Line 3461  unsigned char *formateur_fichier(struct_
         integer8 longueur, integer8 longueur_champ, unsigned char format,          integer8 longueur, integer8 longueur_champ, unsigned char format,
         unsigned char type, integer8 *longueur_effective, integer8 *recursivite,          unsigned char type, integer8 *longueur_effective, integer8 *recursivite,
         logical1 export_fichier);          logical1 export_fichier);
   #endif
 unsigned char *formateur_flux(struct_processus *s_etat_processus,  unsigned char *formateur_flux(struct_processus *s_etat_processus,
         unsigned char *donnees, integer8 *longueur);          unsigned char *donnees, integer8 *longueur);
   #ifndef RPLARGS
 unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus,  unsigned char *formateur_fichier_nombre(struct_processus *s_etat_processus,
         void *valeur_numerique, unsigned char type,          void *valeur_numerique, unsigned char type,
         integer8 longueur, integer8 longueur_champ, unsigned char format);          integer8 longueur, integer8 longueur_champ, unsigned char format);
Line 3495  logical1 validation_chaine(unsigned char Line 3587  logical1 validation_chaine(unsigned char
 #ifndef RPLARGS  #ifndef RPLARGS
 ssize_t read_atomic(struct_processus *s_etat_processus,  ssize_t read_atomic(struct_processus *s_etat_processus,
         int fd, void *buf, size_t count);          int fd, void *buf, size_t count);
   ssize_t read_atomic_signal(struct_processus *s_etat_processus,
           int fd, void *buf, size_t count);
 ssize_t write_atomic(struct_processus *s_etat_processus,  ssize_t write_atomic(struct_processus *s_etat_processus,
         int fd, void *buf, size_t count);          int fd, void *buf, size_t count);
 #endif  #endif

Removed from v.1.317  
changed lines
  Added in v.1.344


CVSweb interface <joel.bertrand@systella.fr>