-int PMPI_File_open(MPI_Comm comm, char *filename, int amode, MPI_Info info, MPI_File *fh){
- if (comm == MPI_COMM_NULL)
- return MPI_ERR_COMM;
- if (filename == nullptr)
- return MPI_ERR_FILE;
+XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_pmpi);
+#define CHECK_FLAGS(fh) \
+ if ((fh)->flags() & MPI_MODE_SEQUENTIAL) \
+ return MPI_ERR_AMODE;
+#define CHECK_RDONLY(fh) \
+ if ((fh)->flags() & MPI_MODE_RDONLY) \
+ return MPI_ERR_AMODE;
+#define PASS_ZEROCOUNT(count) \
+ if ((count) == 0) { \
+ status->count = 0; \
+ return MPI_SUCCESS; \
+ }
+
+#define CHECK_FILE_INPUTS \
+ CHECK_FILE(1, fh) \
+ CHECK_BUFFER(2, buf, count) \
+ CHECK_COUNT(3, count) \
+ CHECK_TYPE(4, datatype) \
+ CHECK_NULL(5, MPI_ERR_ARG, status)
+
+#define CHECK_FILE_INPUT_OFFSET \
+ CHECK_FILE(1, fh) \
+ CHECK_BUFFER(2, buf, count) \
+ CHECK_OFFSET(3, offset) \
+ CHECK_COUNT(4, count) \
+ CHECK_TYPE(5, datatype) \
+ CHECK_NULL(6, MPI_ERR_ARG, status)
+
+extern MPI_Errhandler SMPI_default_File_Errhandler;
+
+int PMPI_File_open(MPI_Comm comm, const char *filename, int amode, MPI_Info info, MPI_File *fh){
+ CHECK_COMM(1)
+ CHECK_NULL(2, MPI_ERR_FILE, filename)