This source file includes following definitions.
- MPI_Register_datarep
   1 
   2 
   3 
   4 
   5 
   6 
   7 #include "mpioimpl.h"
   8 #include "adio_extern.h"
   9 
  10 #ifdef HAVE_WEAK_SYMBOLS
  11 
  12 #if defined(HAVE_PRAGMA_WEAK)
  13 #pragma weak MPI_Register_datarep = PMPI_Register_datarep
  14 #elif defined(HAVE_PRAGMA_HP_SEC_DEF)
  15 #pragma _HP_SECONDARY_DEF PMPI_Register_datarep MPI_Register_datarep
  16 #elif defined(HAVE_PRAGMA_CRI_DUP)
  17 #pragma _CRI duplicate MPI_Register_datarep as PMPI_Register_datarep
  18 
  19 #elif defined(HAVE_WEAK_ATTRIBUTE)
  20 int MPI_Register_datarep(const char *datarep, MPI_Datarep_conversion_function *read_conversion_fn,
  21                          MPI_Datarep_conversion_function *write_conversion_fn,
  22                          MPI_Datarep_extent_function *dtype_file_extent_fn, void *extra_state) __attribute__((weak,alias("PMPI_Register_datarep")));
  23 #endif
  24 
  25 
  26 #define MPIO_BUILD_PROFILING
  27 #include "mpioprof.h"
  28 #endif
  29 
  30 
  31 
  32 
  33 
  34 
  35 
  36 
  37 
  38 
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 
  48 
  49 
  50 
  51 
  52 
  53 
  54 
  55 int MPI_Register_datarep(ROMIO_CONST char *datarep,
  56                          MPI_Datarep_conversion_function *read_conversion_fn,
  57                          MPI_Datarep_conversion_function *write_conversion_fn,
  58                          MPI_Datarep_extent_function *dtype_file_extent_fn,
  59                          void *extra_state)
  60 {
  61     int error_code;
  62     ADIOI_Datarep *adio_datarep;
  63     static char myname[] = "MPI_REGISTER_DATAREP";
  64 
  65     ROMIO_THREAD_CS_ENTER();
  66 
  67     
  68     
  69 
  70     if (datarep == NULL ||
  71         strlen(datarep) < 1 ||
  72         strlen(datarep) > MPI_MAX_DATAREP_STRING)
  73     {
  74         error_code = MPIO_Err_create_code(MPI_SUCCESS,
  75                                           MPIR_ERR_RECOVERABLE,
  76                                           myname, __LINE__,
  77                                           MPI_ERR_ARG,
  78                                           "**datarepname", 0);
  79         error_code = MPIO_Err_return_file(MPI_FILE_NULL, error_code);
  80         goto fn_exit;
  81     }
  82     
  83 
  84     MPIR_MPIOInit(&error_code);
  85     if (error_code != MPI_SUCCESS) goto fn_exit;
  86 
  87     
  88     
  89     for (adio_datarep = ADIOI_Datarep_head; adio_datarep; adio_datarep = adio_datarep->next) {
  90         if (!strncmp(datarep, adio_datarep->name, MPI_MAX_DATAREP_STRING)) {
  91             error_code = MPIO_Err_create_code(MPI_SUCCESS,
  92                                               MPIR_ERR_RECOVERABLE,
  93                                               myname, __LINE__,
  94                                               MPI_ERR_DUP_DATAREP,
  95                                               "**datarepused",
  96                                               "**datarepused %s",
  97                                               datarep);
  98             error_code = MPIO_Err_return_file(MPI_FILE_NULL, error_code);
  99             goto fn_exit;
 100         }
 101     }
 102 
 103     
 104     
 105     if ( (read_conversion_fn != NULL) || (write_conversion_fn != NULL) )
 106     {
 107         error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
 108                                           myname, __LINE__,
 109                                           MPI_ERR_CONVERSION,
 110                                           "**drconvnotsupported", 0);
 111 
 112         error_code = MPIO_Err_return_file(MPI_FILE_NULL, error_code);
 113         goto fn_exit;
 114     }
 115 
 116     
 117     if (dtype_file_extent_fn == NULL)
 118     {
 119         error_code = MPIO_Err_create_code(MPI_SUCCESS,
 120                                           MPIR_ERR_RECOVERABLE,
 121                                           myname, __LINE__,
 122                                           MPI_ERR_ARG,
 123                                           "**datarepextent", 0);
 124         error_code = MPIO_Err_return_file(MPI_FILE_NULL, error_code);
 125         goto fn_exit;
 126     }
 127     
 128 
 129     adio_datarep = ADIOI_Malloc(sizeof(ADIOI_Datarep));
 130     adio_datarep->name = ADIOI_Strdup(datarep);
 131     adio_datarep->state         = extra_state;
 132     adio_datarep->read_conv_fn  = read_conversion_fn;
 133     adio_datarep->write_conv_fn = write_conversion_fn;
 134     adio_datarep->extent_fn     = dtype_file_extent_fn;
 135     adio_datarep->next          = ADIOI_Datarep_head;
 136 
 137     ADIOI_Datarep_head = adio_datarep;
 138 
 139     error_code = MPI_SUCCESS;
 140 
 141 fn_exit:
 142     ROMIO_THREAD_CS_EXIT();
 143 
 144     return error_code;
 145 }