From: Augustin Degomme Date: Mon, 21 Jul 2014 13:22:50 +0000 (+0200) Subject: sanitize get/set_name functions for fortran use X-Git-Tag: v3_12~893^2~12 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/222e859267fcc500d3c420c30e00be8f30dfc0ab sanitize get/set_name functions for fortran use --- diff --git a/src/smpi/private.h b/src/smpi/private.h index cbe5e55ddf..4fa25f18ae 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -475,7 +475,7 @@ void mpi_type_ub_(int* datatype, MPI_Aint * extent, int* ierr); void mpi_win_fence_( int* assert, int* win, int* ierr); void mpi_win_free_( int* win, int* ierr); void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* comm, int *win, int* ierr); -void mpi_win_set_name_ (int* win, char * name, int* ierr); +void mpi_win_set_name_ (int* win, char * name, int* ierr, int size); void mpi_win_get_name_ (int* win, char * name, int* len, int* ierr); void mpi_info_create_( int *info, int* ierr); void mpi_info_set_( int *info, char *key, char *value, int* ierr); @@ -499,7 +499,7 @@ void mpi_is_thread_main_ (int *flag, int* ierr); void mpi_address_ (void *location, MPI_Aint * address, int* ierr); void mpi_get_address_ (void *location, MPI_Aint * address, int* ierr); void mpi_type_dup_ (int* datatype, int* newdatatype, int* ierr); -void mpi_type_set_name_ (int* datatype, char * name, int* ierr); +void mpi_type_set_name_ (int* datatype, char * name, int* ierr, int size); void mpi_type_get_name_ (int* datatype, char * name, int* len, int* ierr); void mpi_type_get_attr_ (int* type, int* type_keyval, void *attribute_val, int* flag, int* ierr); void mpi_type_set_attr_ (int* type, int* type_keyval, void *attribute_val, int* ierr); @@ -609,7 +609,7 @@ void mpi_type_match_size_ (int* typeclass,int* size,int*datatype, int* ierr); void mpi_alltoallw_ ( void *sendbuf, int *sendcnts, int *sdispls, int*sendtypes, void *recvbuf, int *recvcnts, int *rdispls, int*recvtypes, int* comm, int* ierr); void mpi_exscan_ (void *sendbuf, void *recvbuf, int* count, int* datatype, int* op, int* comm, int* ierr); -void mpi_comm_set_name_ (int* comm, char* name, int* ierr); +void mpi_comm_set_name_ (int* comm, char* name, int* ierr, int size); void mpi_comm_dup_with_info_ (int* comm, int* info, int* newcomm, int* ierr); void mpi_comm_split_type_ (int* comm, int* split_type, int* key, int* info, int*newcomm, int* ierr); void mpi_comm_set_info_ (int* comm, int* info, int* ierr); diff --git a/src/smpi/smpi_f77.c b/src/smpi/smpi_f77.c index 87fe053d2b..e4c23e812f 100644 --- a/src/smpi/smpi_f77.c +++ b/src/smpi/smpi_f77.c @@ -719,14 +719,17 @@ void mpi_win_create_( int *base, MPI_Aint* size, int* disp_unit, int* info, int* } } -void mpi_win_set_name_ (int* win, char * name, int* ierr){ - - *ierr = MPI_Win_set_name(get_win(*win), name); +void mpi_win_set_name_ (int* win, char * name, int* ierr, int size){ + char* tname = xbt_malloc((size+1)*sizeof(char)); + strncpy(tname, name, size); + tname[size]='\0'; + *ierr = MPI_Win_set_name(get_win(*win), tname); + xbt_free(tname); } void mpi_win_get_name_ (int* win, char * name, int* len, int* ierr){ - *ierr = MPI_Win_get_name(get_win(*win),name,len); + if(*len>0) name[*len]=' ';//blank padding, not \0 } void mpi_info_create_( int *info, int* ierr){ @@ -843,14 +846,17 @@ void mpi_type_dup_ (int* datatype, int* newdatatype, int* ierr){ } } -void mpi_type_set_name_ (int* datatype, char * name, int* ierr){ - - *ierr = MPI_Type_set_name(get_datatype(*datatype), name); +void mpi_type_set_name_ (int* datatype, char * name, int* ierr, int size){ + char* tname = xbt_malloc((size+1)*sizeof(char)); + strncpy(tname, name, size); + tname[size]='\0'; + *ierr = MPI_Type_set_name(get_datatype(*datatype), tname); + xbt_free(tname); } void mpi_type_get_name_ (int* datatype, char * name, int* len, int* ierr){ - *ierr = MPI_Type_get_name(get_datatype(*datatype),name,len); + if(*len>0) name[*len]=' '; } void mpi_type_get_attr_ (int* type, int* type_keyval, void *attribute_val, int* flag, int* ierr){ @@ -1011,8 +1017,8 @@ void mpi_comm_free_keyval_ (int* keyval, int* ierr) { } void mpi_comm_get_name_ (int* comm, char* name, int* len, int* ierr){ - *ierr = MPI_Comm_get_name(get_comm(*comm), name, len); + if(*len>0) name[*len]=' '; } void mpi_comm_compare_ (int* comm1, int* comm2, int *result, int* ierr){ @@ -1488,8 +1494,12 @@ void mpi_exscan_ (void *sendbuf, void *recvbuf, int* count, int* datatype, int* *ierr = MPI_Exscan(sendbuf, recvbuf, *count, get_datatype(*datatype), get_op(*op), get_comm(*comm)); } -void mpi_comm_set_name_ (int* comm, char* name, int* ierr){ - *ierr = MPI_Comm_set_name (get_comm(*comm), name); +void mpi_comm_set_name_ (int* comm, char* name, int* ierr, int size){ + char* tname = xbt_malloc((size+1)*sizeof(char)); + strncpy(tname, name, size); + tname[size]='\0'; + *ierr = MPI_Comm_set_name (get_comm(*comm), tname); + xbt_free(tname); } void mpi_comm_dup_with_info_ (int* comm, int* info, int* newcomm, int* ierr){ diff --git a/src/smpi/smpi_rma.c b/src/smpi/smpi_rma.c index dc311a5abe..72f4cc7d0a 100644 --- a/src/smpi/smpi_rma.c +++ b/src/smpi/smpi_rma.c @@ -85,6 +85,11 @@ int smpi_mpi_win_free( MPI_Win* win){ } void smpi_mpi_win_get_name(MPI_Win win, char* name, int* length){ + if(win->name==NULL){ + *length=0; + name=NULL; + return; + } *length = strlen(win->name); strcpy(name, win->name); } diff --git a/teshsuite/smpi/mpich3-test/f77/rma/testlist b/teshsuite/smpi/mpich3-test/f77/rma/testlist index 7c99beb049..0eb50f2f11 100644 --- a/teshsuite/smpi/mpich3-test/f77/rma/testlist +++ b/teshsuite/smpi/mpich3-test/f77/rma/testlist @@ -6,8 +6,7 @@ wingetf 5 #winscale2f 4 #Needs win error handling #winerrf 1 -#Needs win set/get name -#winnamef 1 +winnamef 1 #Needs win get group #wingroupf 4 winaccf 4 diff --git a/teshsuite/smpi/mpich3-test/f90/rma/testlist b/teshsuite/smpi/mpich3-test/f90/rma/testlist index fce17ae129..f2eb6fd88a 100644 --- a/teshsuite/smpi/mpich3-test/f90/rma/testlist +++ b/teshsuite/smpi/mpich3-test/f90/rma/testlist @@ -5,7 +5,7 @@ winfencef90 4 wingetf90 5 #winscale2f90 4 #winerrf90 1 -#winnamef90 1 +winnamef90 1 #wingroupf90 4 winaccf90 4 #c2f2cwinf90 1