Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
sanitize get/set_name functions for fortran use
authorAugustin Degomme <augustin.degomme@imag.fr>
Mon, 21 Jul 2014 13:22:50 +0000 (15:22 +0200)
committerAugustin Degomme <augustin.degomme@imag.fr>
Mon, 21 Jul 2014 13:22:50 +0000 (15:22 +0200)
src/smpi/private.h
src/smpi/smpi_f77.c
src/smpi/smpi_rma.c
teshsuite/smpi/mpich3-test/f77/rma/testlist
teshsuite/smpi/mpich3-test/f90/rma/testlist

index cbe5e55..4fa25f1 100644 (file)
@@ -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);
index 87fe053..e4c23e8 100644 (file)
@@ -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){
index dc311a5..72f4cc7 100644 (file)
@@ -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);
 }
index 7c99beb..0eb50f2 100644 (file)
@@ -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
index fce17ae..f2eb6fd 100644 (file)
@@ -5,7 +5,7 @@ winfencef90 4
 wingetf90 5
 #winscale2f90 4
 #winerrf90 1
-#winnamef90 1
+winnamef90 1
 #wingroupf90 4
 winaccf90 4
 #c2f2cwinf90 1