diff options
author | Robb Matzke <matzke@llnl.gov> | 1998-01-28 21:43:08 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1998-01-28 21:43:08 (GMT) |
commit | d4a3224c0fde991cdf65392aeeae326c46406121 (patch) | |
tree | 462dea6a59f895530173943dcf18930916868a8b /src/H5private.h | |
parent | c131a549dc1a9c8456d8cf0e44a56187dae1c268 (diff) | |
download | hdf5-d4a3224c0fde991cdf65392aeeae326c46406121.zip hdf5-d4a3224c0fde991cdf65392aeeae326c46406121.tar.gz hdf5-d4a3224c0fde991cdf65392aeeae326c46406121.tar.bz2 |
[svn-r193] Changes since 19980128
----------------------
./MANIFEST
Added new config files.
./src/H5private.h
Changed FUNC_ENTER() so it calls H5Eclear() for all API
functions but not for any private functions. It also prints
the names of all API functions on file 55 (just for the
prototype) so we can get a list of API functions called with
the Bourne shell commands like:
./testhdf5 55>api_list or
./testhdf5 55>&1 1>/dev/null 2>&1 | less
Otherwise the names are silently discarded.
./src/H5.c
./src/H5C.c
./src/H5D.c
./src/H5F.c
./src/H5G.c
./src/H5M.c
./src/H5P.c
./src/H5T.c
Removed `H5ECLEAR' from lots of places in the source code.
./src/H5E.c
./src/H5Eprivate.h
Recursion is a problem here, so to disable a call to
H5Eclear() from FUNC_ENTER just define a local variable like
this before you call FUNC_ENTER:
const H5E_clearable_g = FALSE;
Unfortunately this results in a warning: declaration of
`H5E_clearable_g' shadows global declaration. Good thing it's
only used in two places.
Diffstat (limited to 'src/H5private.h')
-rw-r--r-- | src/H5private.h | 75 |
1 files changed, 45 insertions, 30 deletions
diff --git a/src/H5private.h b/src/H5private.h index 9fa402e..995b53d 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -422,38 +422,53 @@ extern char *strdup(const char *s); extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */ extern hbool_t thread_initialize_g; /*don't decl interface_initialize_g */ +#define PRINT(N,S) { \ + write ((N), (S), strlen((S))); \ + write ((N), "\n", 1); \ +} + #define FUNC_ENTER(func_name,err) FUNC_ENTER_INIT(func_name,INTERFACE_INIT,err) -#define FUNC_ENTER_INIT(func_name,interface_init_func,err) { \ - CONSTR (FUNC, #func_name); \ - PABLO_SAVE (ID_ ## func_name); \ - \ - PABLO_TRACE_ON (PABLO_MASK, pablo_func_id); \ - \ - if (!library_initialize_g) { \ - library_initialize_g = TRUE; \ - if (H5_init_library()<0) { \ - HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ - "library initialization failed"); \ - } \ - } \ - \ - if (!thread_initialize_g) { \ - thread_initialize_g = TRUE; \ - if (H5_init_thread()<0) { \ - HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ - "thread initialization failed"); \ - } \ - } \ - \ - if (!interface_initialize_g) { \ - interface_initialize_g = TRUE; \ - if (interface_init_func && \ - ((herr_t(*)(void))interface_init_func)()<0) { \ - HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ - "interface initialization failed"); \ - } \ - } \ +#define FUNC_ENTER_INIT(func_name,interface_init_func,err) { \ + CONSTR (FUNC, #func_name); \ + PABLO_SAVE (ID_ ## func_name); \ + \ + PABLO_TRACE_ON (PABLO_MASK, pablo_func_id); \ + \ + /* Initialize the library */ \ + if (!library_initialize_g) { \ + library_initialize_g = TRUE; \ + if (H5_init_library()<0) { \ + HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ + "library initialization failed"); \ + } \ + } \ + \ + /* Initialize this thread */ \ + if (!thread_initialize_g) { \ + thread_initialize_g = TRUE; \ + if (H5_init_thread()<0) { \ + HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ + "thread initialization failed"); \ + } \ + } \ + \ + /* Initialize this interface */ \ + if (!interface_initialize_g) { \ + interface_initialize_g = TRUE; \ + if (interface_init_func && \ + ((herr_t(*)(void))interface_init_func)()<0) { \ + HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ + "interface initialization failed"); \ + } \ + } \ + \ + /* Clear thread error stack entering public functions */ \ + if (H5E_clearable_g && '_'!=#func_name[2] && '_'!=#func_name[3] && \ + (!#func_name[4] || '_'!=#func_name[4])) { \ + PRINT (55, #func_name); \ + H5Eclear (H5E_thrdid_g); \ + } \ { /*------------------------------------------------------------------------- |