This source file includes following definitions.
- ADIOI_ZOIDFS_End
- ADIOI_ZOIDFS_End_call
- ADIOI_ZOIDFS_Init
- ADIOI_ZOIDFS_makeattribs
- ADIOI_ZOIDFS_error_convert
   1 
   2 
   3 
   4 
   5 
   6 
   7 #include "ad_zoidfs.h"
   8 #include "ad_zoidfs_common.h"
   9 #include <unistd.h>
  10 #include <sys/types.h>
  11 
  12 
  13 
  14 int ADIOI_ZOIDFS_Initialized = MPI_KEYVAL_INVALID;
  15 
  16 void ADIOI_ZOIDFS_End(int *error_code)
  17 {
  18     int ret;
  19     static char myname[] = "ADIOI_ZOIDFS_END";
  20 
  21     ret = zoidfs_finalize();
  22 
  23     
  24     if (ret != 0 ) {
  25         *error_code = MPIO_Err_create_code(MPI_SUCCESS,
  26                                            MPIR_ERR_RECOVERABLE,
  27                                            myname, __LINE__,
  28                                            ADIOI_ZOIDFS_error_convert(ret),
  29                                            "Error in zoidfs_finalize", 0);
  30         return;
  31     }
  32     
  33 
  34     *error_code = MPI_SUCCESS;
  35 }
  36 
  37 int ADIOI_ZOIDFS_End_call(MPI_Comm comm, int keyval, 
  38                          void *attribute_val, void *extra_state)
  39 {
  40     int error_code;
  41     ADIOI_ZOIDFS_End(&error_code);
  42     MPI_Keyval_free(&keyval);
  43     return error_code;
  44 }
  45 
  46 void ADIOI_ZOIDFS_Init(int rank, int *error_code )
  47 {
  48     int ret;
  49     static char myname[] = "ADIOI_ZOIDFS_INIT";
  50 
  51     
  52     if (ADIOI_ZOIDFS_Initialized != MPI_KEYVAL_INVALID) {
  53         *error_code = MPI_SUCCESS;
  54         return;
  55     }
  56 
  57     ret = zoidfs_init();
  58     if (ret < 0 ) {
  59         *error_code = MPIO_Err_create_code(MPI_SUCCESS,
  60                                            MPIR_ERR_RECOVERABLE,
  61                                            myname, __LINE__,
  62                                            ADIOI_ZOIDFS_error_convert(ret),
  63                                            "Error in zoidfs_init",
  64                                            0);
  65         return;
  66     }
  67     
  68     MPI_Keyval_create(MPI_NULL_COPY_FN, ADIOI_ZOIDFS_End_call,
  69                       &ADIOI_ZOIDFS_Initialized, (void *)0); 
  70     
  71 
  72     MPI_Attr_put(MPI_COMM_SELF, ADIOI_ZOIDFS_Initialized, (void *)0);
  73 }
  74 
  75 void ADIOI_ZOIDFS_makeattribs(zoidfs_sattr_t * attribs)
  76 {
  77     memset(attribs, 0, sizeof(zoidfs_sattr_t));
  78 
  79     attribs->mask = ZOIDFS_ATTR_MODE;
  80     attribs->mode = 0644;
  81 }
  82 
  83 int ADIOI_ZOIDFS_error_convert(int error)
  84 {
  85     switch (error)
  86     {
  87         case ZFSERR_PERM: 
  88         case ZFSERR_ACCES:
  89             return MPI_ERR_ACCESS;
  90         case ZFSERR_NOENT:
  91         case ZFSERR_NXIO: 
  92         case ZFSERR_NODEV: 
  93             return MPI_ERR_NO_SUCH_FILE;
  94         case ZFSERR_IO:
  95             return MPI_ERR_IO;
  96         case ZFSERR_EXIST:
  97             return MPI_ERR_FILE_EXISTS;
  98         case ZFSERR_NOTDIR: 
  99         case ZFSERR_ISDIR: 
 100         case ZFSERR_NAMETOOLONG:
 101             return MPI_ERR_BAD_FILE;
 102         case ZFSERR_INVAL:
 103         case ZFSERR_STALE:
 104             return MPI_ERR_FILE;
 105         case ZFSERR_FBIG: 
 106         case ZFSERR_NOSPC:
 107             return MPI_ERR_NO_SPACE;
 108         case ZFSERR_ROFS:
 109             return MPI_ERR_READ_ONLY;
 110         case ZFSERR_NOTIMPL:
 111             return MPI_ERR_UNSUPPORTED_OPERATION;
 112         case ZFSERR_DQUOT:
 113             return MPI_ERR_QUOTA;
 114         
 115         
 116         
 117         case ZFSERR_NOMEM:
 118             return MPI_ERR_INTERN;
 119         default:
 120             return MPI_UNDEFINED;
 121     }
 122 }
 123 
 124 
 125 
 126