From 604b749d4ec76332278e5ff70669818b11808408 Mon Sep 17 00:00:00 2001 From: "Arnaud G. GIBERT" Date: Sun, 14 Apr 2024 20:00:25 +0200 Subject: [PATCH] - Initial support for libnode-2.3.x - Start to cleanup the code... --- Makefile.rule | 2 +- demo/smdemo0.c | 2 +- include/shmem.h | 10 +- lib/libshmem.c | 1103 ++++++++++++++++++++++++++++------------------- lib/libshmem.h | 10 +- 5 files changed, 676 insertions(+), 451 deletions(-) diff --git a/Makefile.rule b/Makefile.rule index 2741dc6..867c8ea 100644 --- a/Makefile.rule +++ b/Makefile.rule @@ -20,7 +20,7 @@ default:all # Here are all the rules allowing to compile sources files # c -> o %.o:%.c - $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ + $(CC) $(CFLAGS) $(INCLUDE) -fPIC -c $< -o $@ # c -> executable .c : diff --git a/demo/smdemo0.c b/demo/smdemo0.c index a819812..bb518f7 100644 --- a/demo/smdemo0.c +++ b/demo/smdemo0.c @@ -31,7 +31,7 @@ #include #include #include - +#include #include diff --git a/include/shmem.h b/include/shmem.h index 3d0f1de..2ee8534 100644 --- a/include/shmem.h +++ b/include/shmem.h @@ -41,7 +41,7 @@ extern "C" { #include /* Code retour des fonctions constituant l'API */ - + typedef long SMT_Status; #define SMS_OK NDS_OK /* La fonction s'est correctement exécutée et a produit un résultat */ @@ -116,7 +116,11 @@ extern "C" { #define TRUE 1 #endif +#ifdef _LIBSHMEM_C_ char SM_Error_Msg [512]; +#else + extern char SM_Error_Msg [512]; +#endif #ifndef SM_MODE #define SM_MODE 0 @@ -189,7 +193,11 @@ extern "C" { /* Référence sur la base de heaps */ +#ifdef _LIBSHMEM_C_ SMT_Base * SM_Base; +#else + extern SMT_Base * SM_Base; +#endif /*------------------------------------------------------------------------------*/ /* Structure d'un MHH (Memory Heap Header) */ diff --git a/lib/libshmem.c b/lib/libshmem.c index 95f7e3a..690f7c8 100644 --- a/lib/libshmem.c +++ b/lib/libshmem.c @@ -647,7 +647,7 @@ SMT_Status SM_Heap_Open_I( const char *Heap_Name, SMT_Heap **Heap, size_t Se } /*Alloc du MHH qui fait l'alloccation du premier segment de donnees*/ - rc = ND_Value_Alloc( SM_Base->MHR, (void **)&MHH, Prefixed_Name, Seg_Size); + rc = ND_Value_Alloc( (void **)&MHH, SM_Base->MHR, Prefixed_Name, Seg_Size); if( rc != NDS_OK) { sprintf( SM_Error_Msg, "SM_Heap_Open : unable to alloc a new MHH structure"); @@ -726,16 +726,16 @@ SMT_Status SM_Heap_Open_I( const char *Heap_Name, SMT_Heap **Heap, size_t Se ND_Value_Free( MHH->DSR, New_DSH); Error7: - ND_Desallocator_Exec( MHH->FCR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( MHH->FCR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error6: - ND_Desallocator_Exec( MHH->ACR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( MHH->ACR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error5: - ND_Desallocator_Exec( MHH->DSR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( MHH->DSR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error4: - ND_Desallocator_Exec( MHH, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( MHH, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error3: semctl( SemId, 0, IPC_RMID, Sem_Ctl); @@ -1473,7 +1473,7 @@ SMT_Status SM_Chunk_Alloc_I ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr ) Seg_Size = Heap->MHH->Segment_Size; - rc = ND_Value_Alloc(Heap->MHH->DSR,(void**)&DSH,Heap->MHH, Seg_Size); + rc = ND_Value_Alloc( (void**)&DSH, Heap->MHH->DSR, Heap->MHH, Seg_Size); if (rc != NDS_OK ) { sprintf (SM_Error_Msg, "SM_Chunk_Alloc : unable to create a new data segment for heap \"%s\"", Heap->Name); @@ -1654,7 +1654,7 @@ SMT_Status SM_Chunk_Alloc_I ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr ) New_Node->Right = NULL; /* On crée le nouveau segment */ - rc = ND_Value_Alloc(Heap->MHH->DSR,(void**)&DSH,Heap->MHH,Heap->MHH->Segment_Size); + rc = ND_Value_Alloc( (void**)&DSH, Heap->MHH->DSR, Heap->MHH, Heap->MHH->Segment_Size); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "SM_Chunk_Alloc : unable to create un new data segment for the system heap (anticipation)"); @@ -1674,7 +1674,7 @@ SMT_Status SM_Chunk_Alloc_I ( SMT_Heap * Heap, size_t Alloc_Size, void ** Ptr ) SM_Error_Print (); - ND_Value_Free(Heap->MHH->DSR, DSH); + ND_Value_Free( Heap->MHH->DSR, DSH); return rc; } @@ -2676,21 +2676,21 @@ SMT_Status SM_Base_Init ( void ) */ strcpy( SM_Base->MHR->Allocator_Name, "SM_System_Alloc"); - strcpy( SM_Base->MHR->Desallocator_Name, "SM_System_Free"); + strcpy( SM_Base->MHR->Deallocator_Name, "SM_System_Free"); /* - On change les fonctions Allocator et Desallocator du DSR, ACR + On change les fonctions Allocator et Deallocator du DSR, ACR et FCR du heap système afin que désormais, les allocations des nouveaux segments et chunks soient faites dans le segment de données du heap système. */ strcpy( System_Heap->MHH->DSR->Allocator_Name, "SM_System_Alloc"); - strcpy( System_Heap->MHH->DSR->Desallocator_Name, "SM_System_Free"); + strcpy( System_Heap->MHH->DSR->Deallocator_Name, "SM_System_Free"); strcpy( System_Heap->MHH->ACR->Allocator_Name, "SM_System_Alloc"); - strcpy( System_Heap->MHH->ACR->Desallocator_Name, "SM_System_Free"); + strcpy( System_Heap->MHH->ACR->Deallocator_Name, "SM_System_Free"); strcpy( System_Heap->MHH->FCR->Allocator_Name, "SM_System_Alloc"); - strcpy( System_Heap->MHH->FCR->Desallocator_Name, "SM_System_Free"); + strcpy( System_Heap->MHH->FCR->Deallocator_Name, "SM_System_Free"); /* Verrouillage de la base en lecture */ @@ -2785,7 +2785,7 @@ SMT_Status SM_Base_End ( void ) if( !Previous_Node) { - strcpy( SM_Base->MHR->Desallocator_Name, "SM_Base_Free"); + strcpy( SM_Base->MHR->Deallocator_Name, "SM_Base_Free"); } /* Retrait du heap de la structure du MHR */ @@ -3121,7 +3121,7 @@ SMT_Status SM_Base_Unlock ( SMT_Flags Lock_Mode ) /* Fonction manager de la liste des heaps ouverts */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args) +NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr) { NDT_Command_Name Command_Name; @@ -3130,7 +3130,7 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde { case NDD_CMD_MANAGER_VERSION: { - NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *); + ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *); Command_Name = "NDD_CMD_MANAGER_VERSION"; @@ -3143,16 +3143,16 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_INDEX_GET: { /* - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); */ - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); Command_Name = "NDD_CMD_INDEX_GET"; @@ -3183,14 +3183,18 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_ALLOC: { - /* - void **Value_Ptr_Ptr = (void **)va_arg( Args, void **); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); - */ + /* + ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **); + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + */ + + Command_Name = "NDD_CMD_VALUE_ALLOC"; return( NDS_OK); @@ -3199,13 +3203,17 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_FREE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_Heap *Heap_Ptr = (SMT_Heap *)va_arg( Args, SMT_Heap *); + ND_VA_ARG_GET( Heap_Ptr, *Args_Ptr, SMT_Heap *); Command_Name = "NDD_CMD_VALUE_FREE"; @@ -3219,15 +3227,19 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_COMP: { /* - void *Value1_Ptr = (void *)va_arg( Args, void *); - void *Value2_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *); + ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_Heap *Heap1_Ptr = (SMT_Heap *)va_arg( Args, SMT_Heap *); - SMT_Heap *Heap2_Ptr = (SMT_Heap *)va_arg( Args, SMT_Heap *); + ND_VA_ARG_GET( Heap1_Ptr, *Args_Ptr, SMT_Heap *); + ND_VA_ARG_GET( Heap2_Ptr, *Args_Ptr, SMT_Heap *); long comp; @@ -3246,10 +3258,14 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_ADD: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -3261,10 +3277,14 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_REMOVE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -3275,26 +3295,37 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_VALUE_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_CLOSE( lib_args); SMT_Heap *Heap_Ptr = ( SMT_Heap *)( Node_Ptr->Value); @@ -3309,18 +3340,25 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde case NDD_CMD_INFO_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ @@ -3348,7 +3386,7 @@ NDT_Status SM_Opened_Heap_List_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Inde /* Fonction manager du MHR (Memory Heap Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args) +NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr) { NDT_Command_Name Command_Name; @@ -3357,7 +3395,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node { case NDD_CMD_MANAGER_VERSION: { - NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *); + ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *); Command_Name = "NDD_CMD_MANAGER_VERSION"; @@ -3370,16 +3408,16 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INDEX_GET: { /* - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); */ - - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); Command_Name = "NDD_CMD_INDEX_GET"; @@ -3400,7 +3438,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node default: { *Reply_Index_Id_Ptr = Index_Id; - *Reply_Command_Ptr = Cmd; + *Reply_Command_Ptr = Cmd; break; } } @@ -3410,16 +3448,25 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ALLOC: { - /* - void **Value_Ptr_Ptr = (void **)va_arg( Args, void **); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); - */ - SMT_MHH **MHH_Ptr_Ptr = (SMT_MHH **)va_arg( Args, SMT_MHH **); - va_list user_args = (va_list)va_arg( Args, va_list ); - char *Prefixed_Name = (char*)va_arg( user_args, char *); - size_t Seg_Size = (size_t)va_arg( user_args, size_t ); + /* + ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + */ + + ND_VA_ARG_GET( MHH_Ptr_Ptr, *Args_Ptr, SMT_MHH **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( Prefixed_Name, user_args, char *); + ND_VA_ARG_GET( Seg_Size, user_args, size_t); + + ND_VA_LIST_CLOSE( user_args); union semun Sem_Ctl; int SemId; @@ -3457,7 +3504,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node } SM_Error_Print(); - return(NDS_ERRMEM); + return( NDS_ERRMEM); } /* Initialisation du sémaphore à 1 (équivaut à aucun verrou posé) */ @@ -3503,7 +3550,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node - dans le heap système pour les autres heaps */ - rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->DSR), 1, &index_type, "SM_DSR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Desallocator_Name, NULL, TRUE, NULL); + rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->DSR), 1, &index_type, "SM_DSR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Deallocator_Name, NULL, TRUE, NULL); if (rc != NDS_OK) { sprintf( SM_Error_Msg, "SM_Heap_Open : unable to create the DSR structure"); @@ -3518,7 +3565,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node - dans le heap système pour les autres heaps */ - rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->ACR), 1, &index_type, "SM_ACR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Desallocator_Name, NULL, TRUE, NULL); + rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->ACR), 1, &index_type, "SM_ACR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Deallocator_Name, NULL, TRUE, NULL); if (rc != NDS_OK) { sprintf( SM_Error_Msg, "SM_Heap_Open : unable to create the ACR structure"); @@ -3534,7 +3581,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node - dans le heap système pour les autres heaps */ - rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->FCR), 1, &index_type, "SM_FCR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Desallocator_Name, NULL, TRUE, NULL); + rc = ND_DataStruct_Open( &( (*MHH_Ptr_Ptr)->FCR), 1, &index_type, "SM_FCR_Manager", NULL, SM_Base->MHR->Allocator_Name, NULL, SM_Base->MHR->Deallocator_Name, NULL, TRUE, NULL); if( rc != NDS_OK) { sprintf( SM_Error_Msg, "SM_Heap_Open : unable to create the FCR structure"); @@ -3544,7 +3591,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node } /*alloction du premier segement de donnee pour le heap*/ - rc = ND_Value_Alloc( (*MHH_Ptr_Ptr)->DSR, (void **)&DSH_Ptr, *MHH_Ptr_Ptr, (*MHH_Ptr_Ptr)->Segment_Size); + rc = ND_Value_Alloc( (void **)&DSH_Ptr, (*MHH_Ptr_Ptr)->DSR, *MHH_Ptr_Ptr, (*MHH_Ptr_Ptr)->Segment_Size); if( rc != NDS_OK) { sprintf( SM_Error_Msg, "MHR_Manager : unable to create the DSH structure"); @@ -3576,16 +3623,16 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node ND_Value_Free( (*MHH_Ptr_Ptr)->DSR, DSH_Ptr); Error7: - ND_Desallocator_Exec( (*MHH_Ptr_Ptr)->FCR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( (*MHH_Ptr_Ptr)->FCR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error6: - ND_Desallocator_Exec( (*MHH_Ptr_Ptr)->ACR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( (*MHH_Ptr_Ptr)->ACR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error5: - ND_Desallocator_Exec( (*MHH_Ptr_Ptr)->DSR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( (*MHH_Ptr_Ptr)->DSR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error4: - ND_Desallocator_Exec( *MHH_Ptr_Ptr, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( *MHH_Ptr_Ptr, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); Error3: semctl( SemId, 0, IPC_RMID, Sem_Ctl); @@ -3598,13 +3645,18 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_FREE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_MHH *MHH_Ptr = (SMT_MHH *)va_arg( Args, SMT_MHH *); + ND_VA_ARG_GET( MHH_Ptr, *Args_Ptr, SMT_MHH *); + SMT_Status rc; SMT_Heap To_Find; union semun Sem_Ctl; @@ -3641,7 +3693,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node if( !Previous_Node) { - strcpy( MHH_Ptr->DSR->Desallocator_Name, "SM_Base_Free"); + strcpy( MHH_Ptr->DSR->Deallocator_Name, "SM_Base_Free"); } /* Retrait du segment du DSR */ @@ -3687,14 +3739,14 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node leur racine. */ - rc = ND_Desallocator_Exec( MHH_Ptr->ACR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH_Ptr->ACR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "MHR_Manager NDD_CMD_VALUE_FREE : unable to free the ACR root of heap \"%s\"", MHH_Ptr->Name); SM_Error_Print (); } - rc = ND_Desallocator_Exec( MHH_Ptr->FCR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH_Ptr->FCR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "MHR_Manager NDD_CMD_VALUE_FREE : unable to free the FCR root of heap \"%s\"", MHH_Ptr->Name); @@ -3731,7 +3783,7 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node /* Désallocation de la structure du MHH */ - rc = ND_Desallocator_Exec( MHH_Ptr, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH_Ptr, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != SMS_OK) { sprintf (SM_Error_Msg, "MHR_Manager NDD_CMD_VALUE_FREE : unable to free the header of heap \"%s\"", MHH_Ptr->Name); @@ -3739,21 +3791,25 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node } - return(NDS_OK); + return( NDS_OK); } case NDD_CMD_VALUE_COMP: { /* - void *Value1_Ptr = (void *)va_arg( Args, void *); - void *Value2_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *); + ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_MHH *MHH1_Ptr = (SMT_MHH *)va_arg( Args, SMT_MHH *); - SMT_MHH *MHH2_Ptr = (SMT_MHH *)va_arg( Args, SMT_MHH *); + ND_VA_ARG_GET( MHH1_Ptr, *Args_Ptr, SMT_MHH *); + ND_VA_ARG_GET( MHH2_Ptr, *Args_Ptr, SMT_MHH *); long comp; @@ -3772,10 +3828,14 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ADD: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -3787,10 +3847,14 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_REMOVE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -3801,26 +3865,37 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_CLOSE( lib_args); SMT_MHH *MHH_Ptr = (SMT_MHH *)( Node_Ptr->Value); @@ -3902,25 +3977,34 @@ NDT_Status MHR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INFO_PRINT: { /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_CLOSE( lib_args); Command_Name = "NDD_CMD_INFO_PRINT"; @@ -3984,7 +4068,7 @@ SMT_Status SM_MHH_End( SMT_MHH *MHH) if( !Previous_Node) { - strcpy( MHH->DSR->Desallocator_Name, "SM_Base_Free"); + strcpy( MHH->DSR->Deallocator_Name, "SM_Base_Free"); } /* Retrait du segment du DSR */ @@ -4030,14 +4114,14 @@ SMT_Status SM_MHH_End( SMT_MHH *MHH) leur racine. */ - rc = ND_Desallocator_Exec( MHH->ACR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH->ACR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "SM_MHH_End : unable to free the ACR root of heap \"%s\"", MHH->Name); SM_Error_Print (); } - rc = ND_Desallocator_Exec( MHH->FCR, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH->FCR, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "SM_MHH_End : unable to free the FCR root of heap \"%s\"", MHH->Name); @@ -4074,7 +4158,7 @@ SMT_Status SM_MHH_End( SMT_MHH *MHH) /* Désallocation de la structure du MHH */ - rc = ND_Desallocator_Exec( MHH, SM_Base->MHR->Desallocator_Name, SM_Base->MHR->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( MHH, SM_Base->MHR->Deallocator_Name, SM_Base->MHR->Deallocator_Ptr, NULL); if (rc != SMS_OK) { sprintf (SM_Error_Msg, "SM_MHH_End : unable to free the header of heap \"%s\"", MHH->Name); @@ -4100,7 +4184,7 @@ SMT_Status SM_MHH_End( SMT_MHH *MHH) /* Fonction manager pour un DSR (Data Segment Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args) +NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr) { NDT_Command_Name Command_Name; NDT_Node * Chunk_Node; @@ -4111,7 +4195,7 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node { case NDD_CMD_MANAGER_VERSION: { - NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *); + ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *); Command_Name = "NDD_CMD_MANAGER_VERSION"; @@ -4124,16 +4208,16 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INDEX_GET: { /* - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); */ - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); Command_Name = "NDD_CMD_INDEX_GET"; @@ -4164,16 +4248,25 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ALLOC: { - /* - void **Value_Ptr_Ptr = (void **)va_arg( Args, void **); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); - */ - SMT_DSH **DSH_Ptr_Ptr = (SMT_DSH **)va_arg( Args, SMT_DSH **); - va_list user_args = (va_list)va_arg( Args, va_list ); - SMT_MHH *MHH_Ptr = (SMT_MHH*)va_arg( user_args, SMT_MHH *); - size_t Segment_Size = (size_t)va_arg( user_args, size_t ); + /* + ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + */ + + ND_VA_ARG_GET( DSH_Ptr_Ptr, *Args_Ptr, SMT_DSH **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( MHH_Ptr, user_args, SMT_MHH *); + ND_VA_ARG_GET( Segment_Size, user_args, size_t); + + ND_VA_LIST_CLOSE( user_args); Command_Name = "NDD_CMD_VALUE_ALLOC"; @@ -4190,7 +4283,9 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node sprintf (SM_Error_Msg, "SM_DSR_Manager NDD_CMD_VALUE_ALLOC : the heap limit size would be exceeded"); SM_Error_Print (); - return NULL; + *DSH_Ptr_Ptr = NULL; + + return( NDS_KO); } } @@ -4201,7 +4296,7 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node sprintf (SM_Error_Msg, "SM_DSR_Manager NDD_CMD_VALUE_ALLOC : unable to allocate memory for the new data segment header"); SM_Error_Print (); - return NULL; + return( NDS_KO); } /* Création d'un segment de mémoire partagée */ @@ -4228,10 +4323,10 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node SM_Error_Print (); - ND_Desallocator_Exec( (*DSH_Ptr_Ptr), MHH_Ptr->DSR->Desallocator_Name, MHH_Ptr->DSR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( (*DSH_Ptr_Ptr), MHH_Ptr->DSR->Deallocator_Name, MHH_Ptr->DSR->Deallocator_Ptr, NULL); - return NULL; - } + return( NDS_KO); + } /* On attache le segment de mémoire partagée au processus courant */ @@ -4248,9 +4343,9 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node shmctl ((*DSH_Ptr_Ptr)->MemId, IPC_RMID, 0); - ND_Desallocator_Exec( *DSH_Ptr_Ptr, MHH_Ptr->DSR->Desallocator_Name, MHH_Ptr->DSR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( *DSH_Ptr_Ptr, MHH_Ptr->DSR->Deallocator_Name, MHH_Ptr->DSR->Deallocator_Ptr, NULL); - return NULL; + return( NDS_KO); } SM_Base->Attach = (*DSH_Ptr_Ptr)->Start; @@ -4280,9 +4375,9 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node shmctl ((*DSH_Ptr_Ptr)->MemId, IPC_RMID, 0); - ND_Desallocator_Exec( (*DSH_Ptr_Ptr), MHH_Ptr->DSR->Desallocator_Name, MHH_Ptr->DSR->Desallocator_Ptr, NULL); + ND_Deallocator_Exec( (*DSH_Ptr_Ptr), MHH_Ptr->DSR->Deallocator_Name, MHH_Ptr->DSR->Deallocator_Ptr, NULL); - return NULL; + return( NDS_KO); } return( NDS_OK); @@ -4291,13 +4386,18 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_FREE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_DSH *DSH_Ptr = (SMT_DSH *)va_arg( Args, SMT_DSH *); + ND_VA_ARG_GET( DSH_Ptr, *Args_Ptr, SMT_DSH *); + SMT_Status rc; Command_Name = "NDD_CMD_VALUE_FREE"; @@ -4329,7 +4429,7 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node /* Désallocation de l'entête */ - rc = ND_Desallocator_Exec( DSH_Ptr, Root_Ptr->Desallocator_Name, Root_Ptr->Desallocator_Ptr, NULL); + rc = ND_Deallocator_Exec( DSH_Ptr, Root_Ptr->Deallocator_Name, Root_Ptr->Deallocator_Ptr, NULL); if (rc != NDS_OK) { sprintf (SM_Error_Msg, "SM_DSR_Manager NDD_CMD_VALUE_FREE : the data segment header is nul"); @@ -4345,16 +4445,20 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_COMP: { /* - void *Value1_Ptr = (void *)va_arg( Args, void *); - void *Value2_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *); + ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_DSH *DSH1_Ptr = (SMT_DSH *)va_arg( Args, SMT_DSH *); - SMT_DSH *DSH2_Ptr = (SMT_DSH *)va_arg( Args, SMT_DSH *); - + ND_VA_ARG_GET( DSH1_Ptr, *Args_Ptr, SMT_DSH *); + ND_VA_ARG_GET( DSH2_Ptr, *Args_Ptr, SMT_DSH *); + Command_Name = "NDD_CMD_VALUE_COMP"; @@ -4368,10 +4472,14 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ADD: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -4383,10 +4491,14 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_REMOVE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -4397,28 +4509,39 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); - SMT_DSH *DSH_Ptr = (SMT_DSH *)( Node_Ptr->Value); + ND_VA_LIST_CLOSE( lib_args); + + SMT_DSH *DSH_Ptr = (SMT_DSH *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_PRINT"; @@ -4432,25 +4555,34 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INFO_PRINT: { /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_CLOSE( lib_args); Command_Name = "NDD_CMD_INFO_PRINT"; @@ -4460,25 +4592,30 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_SUM: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list user_args = (va_list)va_arg( Args, va_list); - size_t *Total_Size = (size_t *)va_arg( user_args, size_t *); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( Total_Size, user_args, size_t *); + + ND_VA_LIST_CLOSE( user_args); + - SMT_DSH *DSH_Ptr = (SMT_DSH *)( Node_Ptr->Value); + SMT_DSH *DSH_Ptr = (SMT_DSH *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_SUM"; @@ -4500,6 +4637,7 @@ NDT_Status SM_DSR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node } + /*------------------------------------------------------------------------------*/ /* Ouverture d'un segment de données */ /*------------------------------------------------------------------------------*/ @@ -4634,7 +4772,7 @@ size_t SM_DataSegment_Compress ( SMT_DSH *DSH, NDT_Root *FCR) /* Fonction manager pour un ACR (Allocated Chunk Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args) +NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr) { NDT_Command_Name Command_Name; @@ -4643,7 +4781,7 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node { case NDD_CMD_MANAGER_VERSION: { - NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *); + ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *); Command_Name = "NDD_CMD_MANAGER_VERSION"; @@ -4656,16 +4794,16 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INDEX_GET: { /* - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); */ - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); Command_Name = "NDD_CMD_INDEX_GET"; @@ -4696,12 +4834,16 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ALLOC: { - /* - void **Value_Ptr_Ptr = (void **)va_arg( Args, void **); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); - */ + /* + ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + */ Command_Name = "NDD_CMD_VALUE_ALLOC"; @@ -4712,10 +4854,14 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_FREE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ Command_Name = "NDD_CMD_VALUE_FREE"; @@ -4726,15 +4872,19 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_COMP: { /* - void *Value1_Ptr = (void *)va_arg( Args, void *); - void *Value2_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *); + ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_Chunk *Chunk1_Ptr = (SMT_Chunk *)va_arg( Args, SMT_Chunk *); - SMT_Chunk *Chunk2_Ptr = (SMT_Chunk *)va_arg( Args, SMT_Chunk *); + ND_VA_ARG_GET( Chunk1_Ptr, *Args_Ptr, SMT_Chunk *); + ND_VA_ARG_GET( Chunk2_Ptr, *Args_Ptr, SMT_Chunk *); Command_Name = "NDD_CMD_VALUE_COMP"; @@ -4751,10 +4901,14 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ADD: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -4766,10 +4920,14 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_REMOVE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -4780,28 +4938,37 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); - SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); + SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_PRINT"; @@ -4815,27 +4982,34 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INFO_PRINT: { /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); */ + + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - - + Command_Name = "NDD_CMD_INFO_PRINT"; return( NDS_OK); @@ -4843,30 +5017,33 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_SUM: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list user_args = (va_list)va_arg( Args, va_list); - size_t *Total_Size = (size_t *)va_arg( user_args, size_t *); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( Total_Size_Ptr, user_args, size_t *); + + ND_VA_LIST_CLOSE( user_args); + + SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_SUM"; - *Total_Size += Chunk_Ptr->Size; + *Total_Size_Ptr += Chunk_Ptr->Size; return( NDS_OK); } @@ -4890,7 +5067,7 @@ NDT_Status SM_ACR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node /* Fonction manager pour un FCR (Free Chunk Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args) +NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr) { NDT_Command_Name Command_Name; @@ -4899,7 +5076,7 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node { case NDD_CMD_MANAGER_VERSION: { - NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *); + ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *); Command_Name = "NDD_CMD_MANAGER_VERSION"; @@ -4912,17 +5089,17 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INDEX_GET: { /* - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); */ - NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *); - NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *); - NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command); - void *Value_ptr = (void *)va_arg( Args, void *); - + ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *); + ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *); + ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + Command_Name = "NDD_CMD_INDEX_GET"; @@ -4952,12 +5129,16 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ALLOC: { - /* - void **Value_Ptr_Ptr = (void **)va_arg( Args, void **); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); - */ + /* + ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + */ Command_Name = "NDD_CMD_VALUE_ALLOC"; @@ -4968,12 +5149,17 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_FREE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ + Command_Name = "NDD_CMD_VALUE_FREE"; return( NDS_OK); @@ -4982,15 +5168,19 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_COMP: { /* - void *Value1_Ptr = (void *)va_arg( Args, void *); - void *Value2_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *); + ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ - SMT_Chunk *Chunk1_Ptr = (SMT_Chunk *)va_arg( Args, SMT_Chunk *); - SMT_Chunk *Chunk2_Ptr = (SMT_Chunk *)va_arg( Args, SMT_Chunk *); + ND_VA_ARG_GET( Chunk1_Ptr, *Args_Ptr, SMT_Chunk *); + ND_VA_ARG_GET( Chunk2_Ptr, *Args_Ptr, SMT_Chunk *); Command_Name = "NDD_CMD_VALUE_COMP"; @@ -5010,10 +5200,14 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_ADD: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -5025,10 +5219,14 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_REMOVE: { /* - void *Value_Ptr = (void *)va_arg( Args, void *); - va_list user_args = (va_list)va_arg( Args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *); + + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); */ @@ -5039,28 +5237,37 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_PRINT: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); - SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); + SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_PRINT"; @@ -5073,25 +5280,32 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_INFO_PRINT: { /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); + + ND_VA_LIST_OPEN( user_args, lib_args); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + ND_VA_LIST_CLOSE( lib_args); */ + + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); + ND_VA_LIST_OPEN( lib_args, *Args_Ptr); + + ND_VA_ARG_GET( Out, lib_args, FILE *); + ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode); + ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth); + ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset); Command_Name = "NDD_CMD_INFO_PRINT"; @@ -5102,30 +5316,33 @@ NDT_Status SM_FCR_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node case NDD_CMD_VALUE_SUM: { - /* - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list lib_args = (va_list)va_arg( Args, va_list); - FILE *Out = (FILE *)va_arg( lib_args, FILE *); - NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode); - NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth); - NDT_Recursive_Offset Recursive_Offset = (NDT_Recursive_Offset)va_arg( lib_args, NDT_Recursive_Offset); - va_list user_args = (va_list)va_arg( lib_args, va_list); - user_type user_data = (user_type)va_arg( user_args, user_type); - ... = (...)va_arg( user_args, ...); + /* + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); - void *Value_Ptr = Node_Ptr->Value; + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( user_data, user_args, user_type); + ND_VA_ARG_GET( ..., user_args, ...); + + ND_VA_LIST_CLOSE( user_args); + + void *Value_Ptr = Node_Ptr->Value; */ - NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *); - va_list user_args = (va_list)va_arg( Args, va_list); - size_t *Total_Size = (size_t *)va_arg( user_args, size_t *); + ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *); + ND_VA_LIST_OPEN( user_args, *Args_Ptr); + + ND_VA_ARG_GET( Total_Size_Ptr, user_args, size_t *); + + ND_VA_LIST_CLOSE( user_args); + SMT_Chunk *Chunk_Ptr = (SMT_Chunk *)( Node_Ptr->Value); Command_Name = "NDD_CMD_VALUE_SUM"; - *Total_Size += Chunk_Ptr->Size; + *Total_Size_Ptr += Chunk_Ptr->Size; return( NDS_OK); } diff --git a/lib/libshmem.h b/lib/libshmem.h index ca466ae..2a373cb 100644 --- a/lib/libshmem.h +++ b/lib/libshmem.h @@ -217,12 +217,12 @@ SMT_Status SM_Base_Unlock (SMT_Flags); /*------------------------------------------------------------------------------*/ /* Fonction manager de la liste des heaps ouverts */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_Opened_Heap_List_Manager ( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list); +NDT_Status SM_Opened_Heap_List_Manager ( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); /*------------------------------------------------------------------------------*/ /* Fonction manager du MHR (Memory Heap Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status MHR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list); +NDT_Status MHR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); /*------------------------------------------------------------------------------*/ /* Destruction d'un MHH (Memory Heap Header) */ @@ -232,7 +232,7 @@ SMT_Status SM_MHH_End (SMT_MHH *); /*------------------------------------------------------------------------------*/ /* Fonction manager pour un DSR (Data Segment Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_DSR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list); +NDT_Status SM_DSR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); /*------------------------------------------------------------------------------*/ /* Ouverture d'un segment de données */ @@ -252,12 +252,12 @@ size_t SM_DataSegment_Compress (SMT_DSH *, NDT_Root *); /*------------------------------------------------------------------------------*/ /* Fonction manager pour un ACR (Allocated Chunk Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_ACR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list); +NDT_Status SM_ACR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); /*------------------------------------------------------------------------------*/ /* Fonction manager pour un FCR (Free Chunk Root) */ /*------------------------------------------------------------------------------*/ -NDT_Status SM_FCR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list); +NDT_Status SM_FCR_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); /*------------------------------------------------------------------------------*/ /* Pose d'un verrou sur un heap : */