00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _H5Eprivate_H
00020 #define _H5Eprivate_H
00021
00022 #include "H5Epublic.h"
00023
00024
00025 #include "H5private.h"
00026
00027
00028 typedef struct H5E_t H5E_t;
00029
00030
00031
00032
00033
00034
00035 #define HERROR(maj_id, min_id, ...) H5E_printf_stack(NULL, __FILE__, FUNC, __LINE__, H5E_ERR_CLS_g, maj_id, min_id, __VA_ARGS__)
00036
00037
00038
00039
00040
00041 #define HCOMMON_ERROR(maj, min, ...) \
00042 HERROR(maj, min, __VA_ARGS__); \
00043 err_occurred = TRUE;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 #define HDONE_ERROR(maj, min, ret_val, ...) { \
00055 HCOMMON_ERROR(maj, min, __VA_ARGS__); \
00056 ret_value = ret_val; \
00057 }
00058
00059
00060
00061
00062
00063
00064
00065
00066 #define HGOTO_ERROR(maj, min, ret_val, ...) { \
00067 HCOMMON_ERROR(maj, min, __VA_ARGS__); \
00068 HGOTO_DONE(ret_val) \
00069 }
00070
00071
00072
00073
00074
00075
00076
00077 #define HGOTO_DONE(ret_val) {ret_value = ret_val; goto done;}
00078
00079
00080 H5_DLL herr_t H5E_init(void);
00081 H5_DLL herr_t H5E_push_stack(H5E_t *estack, const char *file, const char *func,
00082 unsigned line, hid_t cls_id, hid_t maj_id, hid_t min_id, const char *desc);
00083 H5_DLL herr_t H5E_printf_stack(H5E_t *estack, const char *file, const char *func,
00084 unsigned line, hid_t cls_id, hid_t maj_id, hid_t min_id, const char *fmt, ...);
00085 H5_DLL herr_t H5E_clear_stack(H5E_t *estack);
00086 H5_DLL herr_t H5E_dump_api_stack(int is_api);
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 #define HSYS_DONE_ERROR(majorcode, minorcode, retcode, str) { \
00097 int myerrno = errno; \
00098 HDONE_ERROR(majorcode, minorcode, retcode, "%s, errno = %d, error message = '%s'", str, myerrno, HDstrerror(myerrno)); \
00099 }
00100 #define HSYS_GOTO_ERROR(majorcode, minorcode, retcode, str) { \
00101 int myerrno = errno; \
00102 HGOTO_ERROR(majorcode, minorcode, retcode, "%s, errno = %d, error message = '%s'", str, myerrno, HDstrerror(myerrno)); \
00103 }
00104
00105 #ifdef H5_HAVE_PARALLEL
00106
00107
00108
00109
00110 extern char H5E_mpi_error_str[MPI_MAX_ERROR_STRING];
00111 extern int H5E_mpi_error_str_len;
00112
00113 #define HMPI_ERROR(mpierr){ \
00114 MPI_Error_string(mpierr, H5E_mpi_error_str, &H5E_mpi_error_str_len); \
00115 HERROR(H5E_INTERNAL, H5E_MPIERRSTR, H5E_mpi_error_str); \
00116 }
00117 #define HMPI_DONE_ERROR(retcode, str, mpierr){ \
00118 HMPI_ERROR(mpierr); \
00119 HDONE_ERROR(H5E_INTERNAL, H5E_MPI, retcode, str); \
00120 }
00121 #define HMPI_GOTO_ERROR(retcode, str, mpierr){ \
00122 HMPI_ERROR(mpierr); \
00123 HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, retcode, str); \
00124 }
00125 #endif
00126
00127 #endif
00128