summaryrefslogtreecommitdiffstats
path: root/src/H5Eproto.h
blob: cd3f58a314a356701f6280ac7594d6575ff89ac3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/****************************************************************************
 * NCSA HDF                                                                 *
 * Software Development Group                                               *
 * National Center for Supercomputing Applications                          *
 * University of Illinois at Urbana-Champaign                               *
 * 605 E. Springfield, Champaign IL 61820                                   *
 *                                                                          *
 * For conditions of distribution and use, see the accompanying             *
 * hdf/COPYING file.                                                        *
 *                                                                          *
 ****************************************************************************/

/* $Id$ */

/*
 * This file contains function prototypes for each exported function in the H5E module
 */

#ifndef H5EPROTO_H
#define H5EPROTO_H

/* HERROR macro, used to facilitate error reporting.  Assumes that
   there's a variable called FUNC which holds the function name.
   Assume that func and file are both stored in static space, or at
   least be not corrupted in the meanwhile. */

#define HERROR(maj, min) H5Epush(maj, min, FUNC, __FILE__, __LINE__)

/* HRETURN_ERROR macro, used to facilitate error reporting.  Makes
   same assumptions as HERROR.  IN ADDITION, this macro causes
   a return from the calling routine */

#define HRETURN_ERROR(maj, min, ret_val) {				      \
   HERROR (maj, min);							      \
   PABLO_TRACE_OFF (PABLO_MASK, pablo_func_id);				      \
   return (ret_val);							      \
}

/* HRETURN macro, similar to HRETURN_ERROR() except for success */

#define HRETURN(ret_val) {						      \
   PABLO_TRACE_OFF (PABLO_MASK, pablo_func_id);				      \
   return (ret_val);							      \
}

/* HGOTO_ERROR macro, used to facilitate error reporting.  Makes
   same assumptions as HERROR.  IN ADDITION, this macro causes
   a jump to the label 'done' which should be in every fucntion
   Also there is an assumption of a variable 'ret_value' */

#define HGOTO_ERROR(maj, min, ret_val) {				      \
   HERROR (maj, min);							      \
   ret_value = ret_val;							      \
   goto done;								      \
}

/* HGOTO_DONE macro, used to facilitate the new error reporting model.  
   This macro is just a wrapper to set the return value and jump to the 'done'
   label.  Also assumption of a variable 'ret_value' */

#define HGOTO_DONE(ret_val) {ret_value = ret_val; goto done;}

/* H5ECLEAR macro, used to facilitate the new error reporting model.  
   This macro is just a wrapper to clear the error stack with the thread
   error ID */

#define H5ECLEAR H5Eclear(thrderrid)

/* Declare an enumerated type which holds all the valid major HDF error codes */
typedef enum
  {
      H5E_NONE_MAJOR = 0,      /* special zero, no error */
      H5E_ARGS,                /* Invalid arguments to routine */
      H5E_RESOURCE,            /* Resource unavailable */
      H5E_INTERNAL,            /* Internal error (too specific to document in detail) */
      H5E_FILE,                /* File Accessability */
      H5E_IO,                  /* Low-level I/O */
      H5E_FUNC,                /* Function Entry/Exit */
      H5E_ATOM,                /* Object Atom */
      H5E_CACHE,	       /* Object Cache */
      H5E_BTREE,	       /* B-Tree Node */
      H5E_SYM,		       /* Symbol Table */
      H5E_HEAP,		       /* Heap */
      H5E_OHDR,		       /* Object Header */
      H5E_DIRECTORY	       /* Directory */
  }
hdf_maj_err_code_t;

/* Declare an enumerated type which holds all the valid minor HDF error codes */
typedef enum
  {
      H5E_NONE_MINOR = 0,      /* special zero, no error */

    /* Argument errors */
      H5E_UNINITIALIZED,       /* Information is unitialized */
      H5E_UNSUPPORTED,         /* Feature is unsupported */
      H5E_BADTYPE,             /* Incorrect type found */
      H5E_BADRANGE,            /* Argument out of range */
      H5E_BADVALUE,            /* Bad value for argument */

    /* Resource errors */
      H5E_NOSPACE,             /* No space available for allocation */

    /* File accessability errors */
      H5E_FILEEXISTS,          /* File already exists */
      H5E_FILEOPEN,            /* File already open */
      H5E_CANTCREATE,          /* Can't create file */
      H5E_CANTOPEN,            /* Can't open file */
      H5E_NOTHDF5,             /* Not an HDF5 format file */
      H5E_BADFILE,             /* Bad file ID accessed */

    /* Generic low-level file I/O errors */
      H5E_SEEKERROR,           /* Seek failed */
      H5E_READERROR,           /* Read failed */
      H5E_WRITEERROR,          /* Write failed */

    /* Function entry/exit interface errors */
      H5E_CANTINIT,            /* Can't initialize interface */
      H5E_ALREADYINIT,         /* Object already initialized */

    /* Object atom related errors */
      H5E_BADATOM,             /* Can't find atom information */
      H5E_CANTREGISTER,        /* Can't register new atom */

    /* Cache related errors */
      H5E_CANTFLUSH,	       /* Can't flush object from cache */
      H5E_CANTLOAD,	       /* Can't load object into cache */

    /* B-tree related errors */
      H5E_NOTFOUND,	       /* Object not found */
      H5E_EXISTS,	       /* Object already exists */
      H5E_CANTENCODE,	       /* Can't encode value */
      H5E_CANTDECODE,	       /* Can't decode value */
      H5E_CANTSPLIT,	       /* Can't split node */
      H5E_CANTINSERT,	       /* Can't insert object */
      H5E_CANTLIST,	       /* Can't list node */

    /* Object header related errors */
      H5E_LINKCOUNT,	       /* Bad object header link count */
      H5E_VERSION,	       /* Wrong version number */
      H5E_ALIGNMENT,	       /* Alignment error */
      H5E_BADMESG,	       /* Unrecognized message */

    /* Directory related errors */
      H5E_COMPLEN,	       /* Name component is too long */
      H5E_LINK		       /* Link count failure */
  }
hdf_min_err_code_t;

/* Function pointer to report errors through */
typedef herr_t (*H5E_push_func_t)(int32 errid, hdf_maj_err_code_t maj, hdf_min_err_code_t min, const char *function_name, const char *file_name, intn line);

#if defined c_plusplus || defined __cplusplus
extern      "C"
{
#endif                          /* c_plusplus || __cplusplus */

/* Functions in H5E.c */
int32 H5Enew_err_stack(uintn initial_stack_size);
intn H5Edelete_err_stack(int32 err_hand);
#ifdef H5_ERROR_DEBUG
H5E_push_func_t H5Eset_push(H5E_push_func_t func);
#endif /* H5_ERROR_DEBUG */
herr_t H5Epush(hdf_maj_err_code_t maj, hdf_min_err_code_t min, const char *function_name, const char *file_name, intn line);
herr_t H5Eclear(int32 err_hand);

#if defined c_plusplus || defined __cplusplus
}
#endif                          /* c_plusplus || __cplusplus */

#endif /* H5EPROTO_H */