diff options
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | src/H5.c | 329 | ||||
-rw-r--r-- | src/H5A.c | 32 | ||||
-rw-r--r-- | src/H5AC.c | 2 | ||||
-rw-r--r-- | src/H5B.c | 2 | ||||
-rw-r--r-- | src/H5D.c | 57 | ||||
-rw-r--r-- | src/H5Distore.c | 2 | ||||
-rw-r--r-- | src/H5E.c | 2 | ||||
-rw-r--r-- | src/H5F.c | 61 | ||||
-rw-r--r-- | src/H5Farray.c | 2 | ||||
-rw-r--r-- | src/H5Fcore.c | 2 | ||||
-rw-r--r-- | src/H5Ffamily.c | 9 | ||||
-rw-r--r-- | src/H5Fistore.c | 2 | ||||
-rw-r--r-- | src/H5Flow.c | 2 | ||||
-rw-r--r-- | src/H5Fmpio.c | 2 | ||||
-rw-r--r-- | src/H5Fsec2.c | 2 | ||||
-rw-r--r-- | src/H5Fsplit.c | 2 | ||||
-rw-r--r-- | src/H5Fstdio.c | 2 | ||||
-rw-r--r-- | src/H5G.c | 29 | ||||
-rw-r--r-- | src/H5Gent.c | 2 | ||||
-rw-r--r-- | src/H5Gnode.c | 2 | ||||
-rw-r--r-- | src/H5Gstab.c | 2 | ||||
-rw-r--r-- | src/H5HG.c | 2 | ||||
-rw-r--r-- | src/H5HL.c | 2 | ||||
-rw-r--r-- | src/H5I.c | 35 | ||||
-rw-r--r-- | src/H5Iprivate.h | 1 | ||||
-rw-r--r-- | src/H5MF.c | 2 | ||||
-rw-r--r-- | src/H5MM.c | 2 | ||||
-rw-r--r-- | src/H5O.c | 2 | ||||
-rw-r--r-- | src/H5Oattr.c | 2 | ||||
-rw-r--r-- | src/H5Ocomp.c | 2 | ||||
-rw-r--r-- | src/H5Ocont.c | 2 | ||||
-rw-r--r-- | src/H5Odtype.c | 2 | ||||
-rw-r--r-- | src/H5Oefl.c | 2 | ||||
-rw-r--r-- | src/H5Ofill.c | 2 | ||||
-rw-r--r-- | src/H5Olayout.c | 2 | ||||
-rw-r--r-- | src/H5Omtime.c | 2 | ||||
-rw-r--r-- | src/H5Oname.c | 2 | ||||
-rw-r--r-- | src/H5Osdspace.c | 2 | ||||
-rw-r--r-- | src/H5Oshared.c | 2 | ||||
-rw-r--r-- | src/H5Ostab.c | 2 | ||||
-rw-r--r-- | src/H5P.c | 26 | ||||
-rw-r--r-- | src/H5R.c | 30 | ||||
-rw-r--r-- | src/H5RA.c | 28 | ||||
-rw-r--r-- | src/H5S.c | 188 | ||||
-rw-r--r-- | src/H5Sall.c | 2 | ||||
-rw-r--r-- | src/H5Shyper.c | 2 | ||||
-rw-r--r-- | src/H5Smpio.c | 2 | ||||
-rw-r--r-- | src/H5Snone.c | 2 | ||||
-rw-r--r-- | src/H5Spoint.c | 2 | ||||
-rw-r--r-- | src/H5Sselect.c | 54 | ||||
-rw-r--r-- | src/H5T.c | 228 | ||||
-rw-r--r-- | src/H5TB.c | 46 | ||||
-rw-r--r-- | src/H5Tbit.c | 2 | ||||
-rw-r--r-- | src/H5Tconv.c | 2 | ||||
-rw-r--r-- | src/H5V.c | 2 | ||||
-rw-r--r-- | src/H5Z.c | 111 | ||||
-rw-r--r-- | src/H5detect.c | 11 | ||||
-rw-r--r-- | src/H5private.h | 39 | ||||
-rw-r--r-- | test/.distdep | 245 | ||||
-rw-r--r-- | test/Makefile.in | 11 | ||||
-rw-r--r-- | test/bittests.c | 198 | ||||
-rw-r--r-- | test/chunk.c | 2 | ||||
-rw-r--r-- | test/cmpd_dset.c | 205 | ||||
-rw-r--r-- | test/dsets.c | 442 | ||||
-rw-r--r-- | test/dtypes.c | 643 | ||||
-rw-r--r-- | test/extend.c | 114 | ||||
-rw-r--r-- | test/external.c | 119 | ||||
-rw-r--r-- | test/flush1.c | 12 | ||||
-rw-r--r-- | test/flush2.c | 2 | ||||
-rw-r--r-- | test/h5test.c | 366 | ||||
-rw-r--r-- | test/h5test.h | 69 | ||||
-rw-r--r-- | test/iopipe.c | 2 | ||||
-rw-r--r-- | test/overhead.c | 28 | ||||
-rw-r--r-- | test/ragged.c | 20 |
75 files changed, 1898 insertions, 1976 deletions
@@ -317,6 +317,8 @@ ./test/flush1.c ./test/flush2.c ./test/gheap.c +./test/h5test.c +./test/h5test.h ./test/hyperslab.c ./test/iopipe.c ./test/istore.c @@ -16,26 +16,6 @@ static char RcsId[] = "@(#)$Revision$"; /* $Id$ */ -/*LINTLIBRARY */ -/*+ - FILE - hdf5.c - HDF library support routines - - EXPORTED ROUTINES - H5dont_atexit -- Indicate that an 'atexit' routine is _not_ to be installed - H5get_libversion -- Check the version of the library - - LIBRARY-SCOPED ROUTINES - H5_init_library -- initialize the HDF5 library - H5_term_library -- shut-down the HDF5 library - H5_init_thread -- initialize thread-specific information - - LOCAL ROUTINES - H5_init_interface -- initialize the H5 interface - + */ - - /* private headers */ #include <H5private.h> /*library */ #include <H5ACprivate.h> /*cache */ @@ -44,7 +24,7 @@ static char RcsId[] = "@(#)$Revision$"; #include <H5Iprivate.h> /*atoms */ #include <H5MMprivate.h> /*memory management */ #include <H5Pprivate.h> /*property lists */ -#include <H5Rpublic.h> /* References */ +#include <H5Rpublic.h> /*references */ #include <H5Sprivate.h> /*data spaces */ #include <H5Tprivate.h> /*data types */ #include <H5Zprivate.h> /*filters */ @@ -55,22 +35,13 @@ FILE *fdopen(int fd, const char *mode); #define PABLO_MASK H5_mask hbool_t library_initialize_g = FALSE; -hbool_t thread_initialize_g = FALSE; -hbool_t install_atexit_g = TRUE; +hbool_t dont_atexit_g = FALSE; H5_debug_t H5_debug_g; /*debugging info */ static void H5_debug_mask(const char*); -typedef struct H5_exit { - void (*func) (void); /* Interface function to call during exit */ - struct H5_exit *next; /* Pointer to next node with exit function */ -} H5_exit_t; - -H5_exit_t *lib_exit_head; /* Pointer to the head of the list of 'atexit' functions */ - /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; -#define INTERFACE_INIT H5_init_interface -static herr_t H5_init_interface(void); +static intn interface_initialize_g = 0; +#define INTERFACE_INIT NULL /*-------------------------------------------------------------------------- NAME @@ -112,13 +83,17 @@ H5_init_library(void) H5_debug_g.pkg[H5_PKG_V].name = "v"; H5_debug_g.pkg[H5_PKG_Z].name = "z"; - /* Install atexit() library cleanup routine */ - if (install_atexit_g == TRUE && - HDatexit(&H5_term_library) != 0) { - HRETURN_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, - "unable to register atexit function"); + /* + * Install atexit() library cleanup routine unless the H5dont_atexit() + * has been called. Once we add something to the atexit() list it stays + * there permanently, so we set dont_atexit_g after we add it to prevent + * adding it again later if the library is cosed and reopened. + */ + if (!dont_atexit_g) { + atexit(H5_term_library); + dont_atexit_g = TRUE; } - + /* * Initialize interfaces that might not be able to initialize themselves * soon enough. @@ -135,187 +110,113 @@ H5_init_library(void) FUNC_LEAVE(SUCCEED); } -/*-------------------------------------------------------------------------- - NAME - H5_add_exit - PURPOSE - Add an exit routine to the list of routines to call during 'atexit' - USAGE - herr_t H5_add_exit(func) - void (*func)(void); IN: Function pointer of routine to add to chain - - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Pre-pend the new function to the list of function to call during the exit - process. These routines are responsible for free'ing static buffers, etc. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Don't make assumptions about the environment during the exit procedure... - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ -herr_t -H5_add_exit(void (*func)(void)) -{ - H5_exit_t *new_exit; - - FUNC_ENTER_INIT(H5_add_exit, NULL, FAIL); - - assert(func); - - if (NULL==(new_exit = H5MM_calloc(sizeof(H5_exit_t)))) { - HRETURN_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, - "memory allocation failed"); - } - - new_exit->func = func; - new_exit->next = lib_exit_head; - lib_exit_head = new_exit; - - FUNC_LEAVE(SUCCEED); -} /* end H5_add_exit() */ - -/*-------------------------------------------------------------------------- - NAME - H5_term_library - PURPOSE - Terminate various static buffers and shutdown the library. - USAGE - void H5_term_library() - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Walk through the shutdown routines for the various interfaces and - terminate them all. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Should only ever be called by the "atexit" function, or real power-users. - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * Function: H5_term_library + * + * Purpose: Terminate interfaces in a well-defined order due to + * dependencies among the interfaces, then terminate + * library-specific data. + * + * Return: void + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ void H5_term_library(void) { - H5_exit_t *temp; - - temp = lib_exit_head; - while (lib_exit_head != NULL) { - (*lib_exit_head->func) (); - lib_exit_head = lib_exit_head->next; - HDfree(temp); - temp = lib_exit_head; - } /* end while */ -} /* end H5_term_library() */ - -/*-------------------------------------------------------------------------- -NAME - H5_init_thread -- Initialize thread-specific information -USAGE - void H5_init_thread() - -RETURNS - Non-negative on success/Negative on failure -DESCRIPTION - Initializes any thread-specific data or routines. - ---------------------------------------------------------------------------*/ -herr_t -H5_init_thread(void) -{ - FUNC_ENTER_INIT(H5_init_thread, NULL, FAIL); - - /* Add the "thread termination" routine to the exit chain */ - if (H5_add_exit(&H5_term_thread)<0) - HRETURN_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, - "unable to set thread atexit function"); - - FUNC_LEAVE(SUCCEED); -} /* H5_init_thread */ - -/*-------------------------------------------------------------------------- - NAME - H5_term_thread - PURPOSE - Terminate various thread-specific objects - USAGE - void H5_term_thread() - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Release the error stack and any other thread-specific resources allocated - on a "per thread" basis. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Can't report errors... - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ -void -H5_term_thread(void) -{/*void*/} + /* Don't do anything if the library is already closed */ + if (!library_initialize_g) return; -/*-------------------------------------------------------------------------- -NAME - H5_init_interface -- Initialize interface-specific information -USAGE - herr_t H5_init_interface() - -RETURNS - Non-negative on success/Negative on failure -DESCRIPTION - Initializes any interface-specific data or routines. + /* + * Close interfaces in a well-defined order based on dependencies. The + * goal is that closing one interface doesn't reopen another that was + * just closed. In order to help us track down dependencies that we + * didn't know about, we close the interfaces in a two step process. The + * first step does the real work and makes the interface unusable. The + * second step doesn't do any work but makes it possible to reopen the + * interface later. + */ ---------------------------------------------------------------------------*/ -static herr_t -H5_init_interface(void) -{ - FUNC_ENTER(H5_init_interface, FAIL); + /* Function What depends on it? */ + /*------------------------- ------------------------------- */ + H5D_term_interface(-1); /* */ + H5TB_term_interface(-1); /* */ + H5Z_term_interface(-1); /* */ + H5A_term_interface(-1); /* */ + H5RA_term_interface(-1); /* */ + H5F_term_interface(-1); /* T */ + H5G_term_interface(-1); /* */ + H5R_term_interface(-1); /* */ + H5S_term_interface(-1); /* */ + H5T_native_close(-1); /* D RA */ + H5T_term_interface(-1); /* D RA */ + H5P_term_interface(-1); /* D */ + H5I_term_interface(-1); /* A D F G P RA S T TB Z */ + /*------------------------- --------------------------------- */ - FUNC_LEAVE(SUCCEED); -} /* H5_init_interface */ + /* + * Finalize the closing by calling all the functions again but with an + * argument of zero. This allows the interface to be reopened later. + */ + H5A_term_interface(0); + H5D_term_interface(0); + H5F_term_interface(0); + H5G_term_interface(0); + H5I_term_interface(0); + H5P_term_interface(0); + H5RA_term_interface(0); + H5R_term_interface(0); + H5S_term_interface(0); + H5TB_term_interface(0); + H5T_native_close(0); + H5T_term_interface(0); + H5Z_term_interface(0); + + /* Mark library as closed */ + library_initialize_g = FALSE; +} -/*-------------------------------------------------------------------------- - NAME - H5dont_atexit - PURPOSE - Indicates to the library that an 'atexit()' routine is _not_ to be installed - USAGE - herr_t H5dont_atexit(void) - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - This routine indicates to the library that an 'atexit()' cleanip routine - should not be installed. The major (only?) purpose for this is in - situations where the library is dynamically linked into an application and - is un-linked from the application before 'exit()' gets callled. In those - situations, a routine installed with 'atexit()' would jump to a routine - which was no longer in memory, causing errors. - In order to be effective, this routine _must_ be called before any other - HDF function calls, and must be called each time the library is loaded/ - linked into the application. (the first time and after it's been un-loaded) - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - If this routine is used, certain memory buffers will not be de-allocated, - although in theory a user could call HPend on their own... - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------- + * Function: H5dont_atexit + * + * Purpose: Indicates that the library is not to clean up after itself + * when the application exits by calling exit() or returning + * from main(). This function must be called before any other + * HDF5 function or constant is used or it will have no effect. + * + * If this function is used then certain memory buffers will not + * be de-allocated nor will open files be flushed automatically. + * The application may still call H5close() explicitly to + * accomplish these things. + * + * Return: Success: non-negative + * + * Failure: negative if this function is called more than + * once or if it is called too late. + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ herr_t H5dont_atexit(void) { -#ifdef DONT_DO_THIS - FUNC_ENTER_INIT(H5dont_atexit, NULL, FAIL); -#endif /* DONT_DO_THIS */ - - if (install_atexit_g == TRUE) - install_atexit_g = FALSE; - -#ifdef DONT_DO_THIS - FUNC_LEAVE(SUCCEED); -#else /* DONT_DO_THIS */ + /* FUNC_ENTER_INIT() should not be called */ + H5_trace(FALSE, "H5dont_atexit", ""); + if (dont_atexit_g) return FAIL; + dont_atexit_g = TRUE; + H5_trace(TRUE, NULL, "e", SUCCEED); return(SUCCEED); -#endif /* DONT_DO_THIS */ } @@ -531,7 +432,7 @@ H5close (void) * thing just to release it all right away. It is safe to call this * function for an uninitialized library. */ - H5_term_library (); + H5_term_library(); return SUCCEED; } @@ -1138,6 +1039,12 @@ H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds) * Note: The TYPE string is meant to be terse and is generated by a * separate perl script. * + * WARNING: DO NOT CALL ANY HDF5 FUNCTION THAT CALLS FUNC_ENTER(). DOING + * SO MAY CAUSE H5_trace() TO BE INVOKED RECURSIVELY OR MAY + * CAUSE LIBRARY INITIALIZATIONS THAT ARE NOT DESIRED. DO NOT + * USE THE H5T_*_* CONSTANTS SINCE THEY CALL H5_open() WHICH + * INVOKES FUNC_ENTER(). + * * Return: void * * Programmer: Robb Matzke @@ -1159,6 +1066,8 @@ H5_trace (hbool_t returning, const char *func, const char *type, ...) void *vp = NULL; FILE *out = H5_debug_g.trace; + /* FUNC_ENTER() should not be called */ + if (!out) return; /*tracing is off*/ va_start (ap, type); @@ -34,12 +34,11 @@ static char RcsId[] = "$Revision$"; #define PABLO_MASK H5A_mask /* Is the interface initialized? */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5A_init_interface static herr_t H5A_init_interface(void); /* PRIVATE PROTOTYPES */ -static void H5A_term_interface(void); static hid_t H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type, const H5S_t *space); static hid_t H5A_open(H5G_entry_t *ent, unsigned idx); @@ -63,26 +62,18 @@ DESCRIPTION static herr_t H5A_init_interface(void) { - herr_t ret_value = SUCCEED; - FUNC_ENTER(H5A_init_interface, FAIL); /* - * Register cleanup function. + * Create attribute group. */ - if ((ret_value = H5I_init_group(H5I_ATTR, H5I_ATTRID_HASHSIZE, - H5A_RESERVED_ATOMS, - (herr_t (*)(void *)) H5A_close))<0) { + if (H5I_init_group(H5I_ATTR, H5I_ATTRID_HASHSIZE, H5A_RESERVED_ATOMS, + (herr_t (*)(void *)) H5A_close)<0) { HRETURN_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, - "unable to initialize attribute group"); - } - - if (H5_add_exit(H5A_term_interface) < 0) { - HRETURN_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, - "unable to install atexit function"); + "unable to initialize interface"); } - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } @@ -94,7 +85,6 @@ H5A_init_interface(void) USAGE void H5A_term_interface() RETURNS - Non-negative on success/Negative on failure DESCRIPTION Release any other resources allocated. GLOBAL VARIABLES @@ -103,11 +93,13 @@ H5A_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5A_term_interface(void) +void +H5A_term_interface(intn status) { - H5I_destroy_group(H5I_ATTR); - interface_initialize_g = FALSE; + if (interface_initialize_g>0) { + H5I_destroy_group(H5I_ATTR); + } + interface_initialize_g = status; } @@ -36,7 +36,7 @@ */ #define PABLO_MASK H5AC_mask #define INTERFACE_INIT NULL -static int interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #ifdef H5AC_SORT_BY_ADDR static H5AC_t *current_cache_g = NULL; /*for sorting */ @@ -139,7 +139,7 @@ static const H5AC_class_t H5AC_BT[1] = {{ /* Interface initialization? */ #define INTERFACE_INIT NULL -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; /*------------------------------------------------------------------------- @@ -91,10 +91,9 @@ const H5D_xfer_t H5D_xfer_dflt = { }; /* Interface initialization? */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5D_init_interface static herr_t H5D_init_interface(void); -static void H5D_term_interface(void); static herr_t H5D_init_storage(H5D_t *dataset, const H5S_t *space); H5D_t * H5D_new(const H5D_create_t *create_parms); @@ -114,42 +113,42 @@ DESCRIPTION static herr_t H5D_init_interface(void) { - herr_t ret_value = SUCCEED; FUNC_ENTER(H5D_init_interface, FAIL); /* Initialize the atom group for the dataset IDs */ - if ((ret_value = H5I_init_group(H5I_DATASET, H5I_DATASETID_HASHSIZE, - H5D_RESERVED_ATOMS, - (herr_t (*)(void *)) H5D_close)) >=0) { - ret_value = H5_add_exit(H5D_term_interface); + if (H5I_init_group(H5I_DATASET, H5I_DATASETID_HASHSIZE, H5D_RESERVED_ATOMS, + (herr_t (*)(void *)) H5D_close)<0) { + HRETURN_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } - FUNC_LEAVE(ret_value); + + FUNC_LEAVE(SUCCEED); } -/*-------------------------------------------------------------------------- - NAME - H5D_term_interface - PURPOSE - Terminate various H5D objects - USAGE - void H5D_term_interface() - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Release the atom group and any other resources allocated. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Can't report errors... - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ -static void -H5D_term_interface(void) +/*------------------------------------------------------------------------- + * Function: H5D_term_interface + * + * Purpose: Terminate this interface. + * + * Return: void + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +H5D_term_interface(intn status) { - H5I_destroy_group(H5I_DATASET); - interface_initialize_g = FALSE; + if (interface_initialize_g>0) { + H5I_destroy_group(H5I_DATASET); + } + interface_initialize_g = status; } + /*------------------------------------------------------------------------- * Function: H5Dcreate diff --git a/src/H5Distore.c b/src/H5Distore.c index 92c0dd3..89d087c 100644 --- a/src/H5Distore.c +++ b/src/H5Distore.c @@ -65,7 +65,7 @@ /* Interface initialization */ #define PABLO_MASK H5F_istore_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /* @@ -110,7 +110,7 @@ static const H5E_minor_mesg_t H5E_minor_mesg_g[] = { }; /* Interface initialization? */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL const hbool_t H5E_clearable_g = TRUE; /* DO NOT CHANGE */ @@ -98,9 +98,8 @@ const H5F_mprop_t H5F_mount_dflt = { }; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5F_init_interface -static void H5F_term_interface(void); /* PRIVATE PROTOTYPES */ static H5F_t *H5F_new(H5F_file_t *shared, const H5F_create_t *fcpl, @@ -112,28 +111,27 @@ static herr_t H5F_locate_signature(H5F_low_t *f_handle, haddr_t *addr/*out*/); -/*-------------------------------------------------------------------------- -NAME - H5F_init_interface -- Initialize interface-specific information -USAGE - herr_t H5F_init_interface() - -RETURNS - Non-negative on success/Negative on failure -DESCRIPTION - Initializes any interface-specific data or routines. - -ERRORS - -Modifications: - Robb Matzke, 4 Aug 1997 - Changed pablo mask from H5_mask to H5F_mask for the FUNC_LEAVE call. - It was already H5F_mask for the PABLO_TRACE_ON call. - - rky 980816 - Added .disp, .btype, .ftype to H5F_access_t. - ---------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------- + * Function: H5F_init_interface + * + * Purpose: Initialize interface-specific information. + * + * Return: Success: non-negative + * + * Failure: negative + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * Robb Matzke, 4 Aug 1997 + * Changed pablo mask from H5_mask to H5F_mask for the FUNC_LEAVE call. + * It was already H5F_mask for the PABLO_TRACE_ON call. + * + * rky 980816 + * Added .disp, .btype, .ftype to H5F_access_t. + *------------------------------------------------------------------------- + */ herr_t H5F_init_interface(void) { @@ -154,9 +152,8 @@ H5F_init_interface(void) /* Initialize the atom group for the file IDs */ if (H5I_init_group(H5I_FILE, H5I_FILEID_HASHSIZE, 0, - (herr_t (*)(void*))H5F_close)<0 || - H5_add_exit(H5F_term_interface)<0) { - HRETURN_ERROR (H5E_ATOM, H5E_CANTINIT, FAIL, + (herr_t (*)(void*))H5F_close)<0) { + HRETURN_ERROR (H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface"); } @@ -211,11 +208,13 @@ H5F_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5F_term_interface(void) +void +H5F_term_interface(intn status) { - H5I_destroy_group(H5I_FILE); - interface_initialize_g = FALSE; + if (interface_initialize_g>0) { + H5I_destroy_group(H5I_FILE); + } + interface_initialize_g = status; } diff --git a/src/H5Farray.c b/src/H5Farray.c index 38f3f07..c38709a 100644 --- a/src/H5Farray.c +++ b/src/H5Farray.c @@ -22,7 +22,7 @@ /* Interface initialization */ #define PABLO_MASK H5F_arr_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; diff --git a/src/H5Fcore.c b/src/H5Fcore.c index 557aed2..4cdd1ec 100644 --- a/src/H5Fcore.c +++ b/src/H5Fcore.c @@ -22,7 +22,7 @@ #define H5F_CORE_DEV 0xffff /*pseudo dev for core until we fix things */ #define PABLO_MASK H5F_core -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL static htri_t H5F_core_access(const char *name, diff --git a/src/H5Ffamily.c b/src/H5Ffamily.c index d9fb032..0a035e2 100644 --- a/src/H5Ffamily.c +++ b/src/H5Ffamily.c @@ -27,7 +27,7 @@ #include <H5MMprivate.h> #define PABLO_MASK H5F_family -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL #define H5F_FAM_OFFSET(LF,ADDR) ((off_t)((ADDR)->offset % \ @@ -454,11 +454,14 @@ H5F_fam_write(H5F_low_t *lf, const H5F_access_t *access_parms, /* * Make sure the logical eof is large enough to handle the request. + * Do not decrease the EOF */ max_addr = cur_addr; H5F_addr_inc(&max_addr, (hsize_t)nbytes); - H5F_low_seteof(lf->u.fam.memb[membno], &max_addr); - + if (H5F_addr_gt(&max_addr, &(lf->u.fam.memb[membno]->eof))) { + H5F_low_seteof(lf->u.fam.memb[membno], &max_addr); + } + /* Write the data to the member */ if (H5F_low_write(lf->u.fam.memb[membno], access_parms->u.fam.memb_access, xfer_mode, diff --git a/src/H5Fistore.c b/src/H5Fistore.c index 92c0dd3..89d087c 100644 --- a/src/H5Fistore.c +++ b/src/H5Fistore.c @@ -65,7 +65,7 @@ /* Interface initialization */ #define PABLO_MASK H5F_istore_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /* diff --git a/src/H5Flow.c b/src/H5Flow.c index 3bed7f0..3211886 100644 --- a/src/H5Flow.c +++ b/src/H5Flow.c @@ -18,7 +18,7 @@ #define addr_defined(X) (((uint64_t)(-1)!=(X)->offset) ? TRUE : FALSE) #define PABLO_MASK H5F_low -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Fmpio.c b/src/H5Fmpio.c index dc67fba..27d0871 100644 --- a/src/H5Fmpio.c +++ b/src/H5Fmpio.c @@ -63,7 +63,7 @@ #include <mpio.h> #define PABLO_MASK H5F_mpio -static hbool_t interface_initialize_g = FALSE; /* rky??? */ +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /* Global var to allow elimination of redundant metadata writes diff --git a/src/H5Fsec2.c b/src/H5Fsec2.c index 97ecaeb..ef54477 100644 --- a/src/H5Fsec2.c +++ b/src/H5Fsec2.c @@ -20,7 +20,7 @@ #include <H5MMprivate.h> #define PABLO_MASK H5F_sec2 -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL static H5F_low_t *H5F_sec2_open(const char *name, diff --git a/src/H5Fsplit.c b/src/H5Fsplit.c index 7655054..e4298ff 100644 --- a/src/H5Fsplit.c +++ b/src/H5Fsplit.c @@ -22,7 +22,7 @@ #define H5F_SPLIT_RAW_EXT ".raw" #define PABLO_MASK H5F_split -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL static htri_t H5F_split_access(const char *name, diff --git a/src/H5Fstdio.c b/src/H5Fstdio.c index eff325f..d55fd19 100644 --- a/src/H5Fstdio.c +++ b/src/H5Fstdio.c @@ -14,7 +14,7 @@ #include <H5MMprivate.h> #define PABLO_MASK H5F_stdio -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL static H5F_low_t *H5F_stdio_open(const char *name, @@ -91,10 +91,9 @@ #define PABLO_MASK H5G_mask /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5G_init_interface static herr_t H5G_init_interface(void); -static void H5G_term_interface(void); static H5G_typeinfo_t *H5G_type_g = NULL; /*object typing info */ static size_t H5G_ntypes_g = 0; /*entries in type table */ static size_t H5G_atypes_g = 0; /*entries allocated */ @@ -683,8 +682,7 @@ H5G_init_interface(void) /* Initialize the atom group for the group IDs */ if (H5I_init_group(H5I_GROUP, H5I_GROUPID_HASHSIZE, H5G_RESERVED_ATOMS, - (herr_t (*)(void *)) H5G_close) < 0 || - H5_add_exit(H5G_term_interface) < 0) { + (herr_t (*)(void *)) H5G_close) < 0) { HRETURN_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to initialize interface"); } @@ -717,21 +715,24 @@ H5G_init_interface(void) * *------------------------------------------------------------------------- */ -static void -H5G_term_interface(void) +void +H5G_term_interface(intn status) { size_t i; + + if (interface_initialize_g>0) { + /* Empty the object type table */ + for (i=0; i<H5G_ntypes_g; i++) { + H5MM_xfree(H5G_type_g[i].desc); + } + H5G_ntypes_g = H5G_atypes_g = 0; + H5G_type_g = H5MM_xfree(H5G_type_g); - /* Empty the object type table */ - for (i=0; i<H5G_ntypes_g; i++) { - H5MM_xfree(H5G_type_g[i].desc); + /* Destroy the group object id group */ + H5I_destroy_group(H5I_GROUP); } - H5G_ntypes_g = H5G_atypes_g = 0; - H5G_type_g = H5MM_xfree(H5G_type_g); - /* Destroy the group object id group */ - H5I_destroy_group(H5I_GROUP); - interface_initialize_g = FALSE; + interface_initialize_g = status; } diff --git a/src/H5Gent.c b/src/H5Gent.c index 70421ca..7a37e2b 100644 --- a/src/H5Gent.c +++ b/src/H5Gent.c @@ -14,7 +14,7 @@ #include <H5MMprivate.h> #define PABLO_MASK H5G_ent_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Gnode.c b/src/H5Gnode.c index b7810c0..ac2004f 100644 --- a/src/H5Gnode.c +++ b/src/H5Gnode.c @@ -91,7 +91,7 @@ H5B_class_t H5B_SNODE[1] = {{ }}; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Gstab.c b/src/H5Gstab.c index 200c2e8..773c564 100644 --- a/src/H5Gstab.c +++ b/src/H5Gstab.c @@ -17,7 +17,7 @@ #include <H5Oprivate.h> #define PABLO_MASK H5G_stab_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*------------------------------------------------------------------------- @@ -64,7 +64,7 @@ static const H5AC_class_t H5AC_GHEAP[1] = {{ }}; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL @@ -61,7 +61,7 @@ static const H5AC_class_t H5AC_LHEAP[1] = {{ }}; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL @@ -65,7 +65,7 @@ static char RcsId[] = "@(#)$Revision$"; /* Interface initialialization? */ #define PABLO_MASK H5I_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5I_init_interface static herr_t H5I_init_interface(void); @@ -161,9 +161,6 @@ H5I_init_interface(void) */ assert(H5I_MAXID<=(1<<GROUP_BITS)); - /* Registers the cleanup routine with the exit chain */ - ret_value = H5_add_exit(&H5I_term_interface); - FUNC_LEAVE(ret_value); } @@ -920,28 +917,28 @@ H5I_release_id_node(H5I_id_info_t *id) REVISION LOG --------------------------------------------------------------------------*/ void -H5I_term_interface(void) +H5I_term_interface(intn status) { - H5I_id_info_t *curr; - intn i; + H5I_id_info_t *curr; + intn i; - /* Release the free-list if it exists */ - if (id_free_list != NULL) { - while (id_free_list != NULL) { + if (interface_initialize_g>0) { + /* Release the free-list */ + while (id_free_list) { curr = id_free_list; id_free_list = id_free_list->next; HDfree(curr); } - } - /* Release all groups */ - for (i = 0; i < (intn) H5I_MAXID; i++) { - if (id_group_list[i] != NULL) { - HDfree(id_group_list[i]); - id_group_list[i] = NULL; + /* Release all groups */ + for (i = 0; i < (intn) H5I_MAXID; i++) { + if (id_group_list[i] != NULL) { + HDfree(id_group_list[i]); + id_group_list[i] = NULL; + } } } - - /* Indicate interface closed */ - interface_initialize_g = FALSE; + + /* Indicate interface status */ + interface_initialize_g = status; } diff --git a/src/H5Iprivate.h b/src/H5Iprivate.h index 788afb2..f2c179a 100644 --- a/src/H5Iprivate.h +++ b/src/H5Iprivate.h @@ -70,7 +70,6 @@ void *H5I_object (hid_t id); H5I_type_t H5I_get_type (hid_t id); void *H5I_remove (hid_t id); void *H5I_search (H5I_type_t grp, H5I_search_func_t func, const void *key); -void H5I_term_interface (void); intn H5I_dec_ref (hid_t id); hid_t H5I_inc_ref (hid_t id); @@ -28,7 +28,7 @@ #define PABLO_MASK H5MF_mask /* Is the interface initialized? */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL @@ -20,7 +20,7 @@ /* Interface initialization? */ #define PABLO_MASK H5MM_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL @@ -45,7 +45,7 @@ static const H5AC_class_t H5AC_OHDR[1] = {{ }}; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5O_init_interface static herr_t H5O_init_interface(void); diff --git a/src/H5Oattr.c b/src/H5Oattr.c index afdd533..d74d2c4 100644 --- a/src/H5Oattr.c +++ b/src/H5Oattr.c @@ -54,7 +54,7 @@ const H5O_class_t H5O_ATTR[1] = {{ #define H5O_ATTR_VERSION 1 /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*-------------------------------------------------------------------------- diff --git a/src/H5Ocomp.c b/src/H5Ocomp.c index 90fd622..32c4760 100644 --- a/src/H5Ocomp.c +++ b/src/H5Ocomp.c @@ -14,7 +14,7 @@ /* Interface initialization */ #define PABLO_MASK H5O_pline_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL #define H5O_PLINE_VERSION 1 diff --git a/src/H5Ocont.c b/src/H5Ocont.c index 3ba9b24..4cd3776 100644 --- a/src/H5Ocont.c +++ b/src/H5Ocont.c @@ -46,7 +46,7 @@ const H5O_class_t H5O_CONT[1] = {{ }}; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*------------------------------------------------------------------------- diff --git a/src/H5Odtype.c b/src/H5Odtype.c index 2ccdfec..84de73c 100644 --- a/src/H5Odtype.c +++ b/src/H5Odtype.c @@ -58,7 +58,7 @@ const H5O_class_t H5O_DTYPE[1] = {{ #define H5O_DTYPE_VERSION 1 /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*------------------------------------------------------------------------- diff --git a/src/H5Oefl.c b/src/H5Oefl.c index f812c3f..0da84d2 100644 --- a/src/H5Oefl.c +++ b/src/H5Oefl.c @@ -40,7 +40,7 @@ const H5O_class_t H5O_EFL[1] = {{ #define H5O_EFL_VERSION 1 /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Ofill.c b/src/H5Ofill.c index 6d77bb8..840ea01 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -40,7 +40,7 @@ const H5O_class_t H5O_FILL[1] = {{ }}; /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Olayout.c b/src/H5Olayout.c index 363277c..b045b3d 100644 --- a/src/H5Olayout.c +++ b/src/H5Olayout.c @@ -40,7 +40,7 @@ const H5O_class_t H5O_LAYOUT[1] = {{ /* Interface initialization */ #define PABLO_MASK H5O_layout_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Omtime.c b/src/H5Omtime.c index 86e19b8..df0294b 100644 --- a/src/H5Omtime.c +++ b/src/H5Omtime.c @@ -37,7 +37,7 @@ const H5O_class_t H5O_MTIME[1] = {{ }}; /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Oname.c b/src/H5Oname.c index 50ae81e..3179350 100644 --- a/src/H5Oname.c +++ b/src/H5Oname.c @@ -46,7 +46,7 @@ const H5O_class_t H5O_NAME[1] = {{ }}; /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c index 4dfaaa5..2400fe9 100644 --- a/src/H5Osdspace.c +++ b/src/H5Osdspace.c @@ -51,7 +51,7 @@ const H5O_class_t H5O_SDSPACE[1] = {{ #define H5O_SDSPACE_VERSION 1 /* Is the interface initialized? */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*-------------------------------------------------------------------------- diff --git a/src/H5Oshared.c b/src/H5Oshared.c index ba3971f..962430b 100644 --- a/src/H5Oshared.c +++ b/src/H5Oshared.c @@ -42,7 +42,7 @@ const H5O_class_t H5O_SHARED[1] = {{ /* Interface initialization */ #define PABLO_MASK H5O_shared_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Ostab.c b/src/H5Ostab.c index 9f48c9d..32f0528 100644 --- a/src/H5Ostab.c +++ b/src/H5Ostab.c @@ -46,7 +46,7 @@ const H5O_class_t H5O_STAB[1] = {{ }}; /* Interface initialization */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /*------------------------------------------------------------------------- @@ -28,13 +28,10 @@ static char RcsId[] = "@(#)$Revision$"; #define PABLO_MASK H5P_mask /* Is the interface initialized? */ -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5P_init_interface static herr_t H5P_init_interface(void); -/* PRIVATE PROTOTYPES */ -static void H5P_term_interface(void); - /*-------------------------------------------------------------------------- NAME H5P_init_interface -- Initialize interface-specific information @@ -83,14 +80,6 @@ H5P_init_interface(void) "unable to initialize atom group"); } - /* - * Register cleanup function. - */ - if (H5_add_exit(H5P_term_interface) < 0) { - HRETURN_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, - "unable to install atexit function"); - } - FUNC_LEAVE(ret_value); } @@ -111,15 +100,18 @@ H5P_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5P_term_interface(void) +void +H5P_term_interface(intn status) { intn i; - for (i = 0; i < H5P_NCLASSES; i++) { - H5I_destroy_group((H5I_type_t)(H5I_TEMPLATE_0 + i)); + if (interface_initialize_g>0) { + for (i = 0; i < H5P_NCLASSES; i++) { + H5I_destroy_group((H5I_type_t)(H5I_TEMPLATE_0 + i)); + } } - interface_initialize_g = FALSE; + + interface_initialize_g = status; } /*-------------------------------------------------------------------------- @@ -29,9 +29,8 @@ static char RcsId[] = "@(#)$Revision$"; /* Interface initialization */ #define PABLO_MASK H5R_mask #define INTERFACE_INIT H5R_init_interface -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5R_init_interface(void); -static void H5R_term_interface(void); /* Static functions */ static herr_t H5R_create(void *ref, H5G_entry_t *loc, const char *name, @@ -55,17 +54,17 @@ DESCRIPTION static herr_t H5R_init_interface(void) { - herr_t ret_value = SUCCEED; FUNC_ENTER(H5R_init_interface, FAIL); /* Initialize the atom group for the file IDs */ - if ((ret_value = H5I_init_group(H5I_REFERENCE, H5I_REFID_HASHSIZE, - H5R_RESERVED_ATOMS, (herr_t (*)(void *)) NULL)) >= 0) { - ret_value = H5_add_exit(&H5R_term_interface); + if (H5I_init_group(H5I_REFERENCE, H5I_REFID_HASHSIZE, H5R_RESERVED_ATOMS, + (herr_t (*)(void *)) NULL)<0) { + HRETURN_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } - FUNC_LEAVE(ret_value); -} /* end H5R_init_interface() */ + FUNC_LEAVE(SUCCEED); +} /*-------------------------------------------------------------------------- @@ -85,13 +84,16 @@ H5R_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5R_term_interface(void) +void +H5R_term_interface(intn status) { - /* Free ID group */ - H5I_destroy_group(H5I_REFERENCE); - interface_initialize_g = FALSE; -} /* end H5R_term_interface() */ + if (interface_initialize_g>0) { + /* Free ID group */ + H5I_destroy_group(H5I_REFERENCE); + } + + interface_initialize_g = status; +} /*-------------------------------------------------------------------------- @@ -47,10 +47,9 @@ struct H5RA_t { }; #define PABLO_MASK H5RA_mask -static hbool_t interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5RA_init_interface static herr_t H5RA_init_interface(void); -static void H5RA_term_interface(void); static H5T_t *H5RA_meta_type_g = NULL; static herr_t H5RA_fix_overflow(H5RA_t *ra, H5T_t *type, H5RA_meta_t *meta, @@ -74,15 +73,15 @@ static herr_t H5RA_fix_overflow(H5RA_t *ra, H5T_t *type, H5RA_meta_t *meta, static herr_t H5RA_init_interface(void) { - herr_t ret_value = SUCCEED; H5T_t *type = NULL; FUNC_ENTER(H5RA_init_interface, FAIL); /* The atom group */ - if ((ret_value=H5I_init_group(H5I_RAGGED, H5I_RAGGED_HASHSIZE, 0, - (herr_t(*)(void*))H5RA_close))>=0) { - ret_value = H5_add_exit(H5RA_term_interface); + if (H5I_init_group(H5I_RAGGED, H5I_RAGGED_HASHSIZE, 0, + (herr_t(*)(void*))H5RA_close)<0) { + HRETURN_ERROR (H5E_RAGGED, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } /* The meta dataset type */ @@ -98,7 +97,7 @@ H5RA_init_interface(void) } H5RA_meta_type_g = type; - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } @@ -116,13 +115,16 @@ H5RA_init_interface(void) * *------------------------------------------------------------------------- */ -static void -H5RA_term_interface(void) +void +H5RA_term_interface(intn status) { - H5I_destroy_group(H5I_RAGGED); - H5T_close(H5RA_meta_type_g); - H5RA_meta_type_g = NULL; - interface_initialize_g = FALSE; + if (interface_initialize_g>0) { + H5I_destroy_group(H5I_RAGGED); + H5T_close(H5RA_meta_type_g); + H5RA_meta_type_g = NULL; + } + + interface_initialize_g = status; } @@ -27,9 +27,8 @@ static char RcsId[] = "@(#)$Revision$"; /* Interface initialization */ #define PABLO_MASK H5S_mask #define INTERFACE_INIT H5S_init_interface -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5S_init_interface(void); -static void H5S_term_interface(void); /* Tables of file and memory conversion information */ static const H5S_fconv_t *H5S_fconv_g[H5S_SEL_N]; @@ -61,13 +60,13 @@ DESCRIPTION static herr_t H5S_init_interface(void) { - herr_t ret_value = SUCCEED; FUNC_ENTER(H5S_init_interface, FAIL); /* Initialize the atom group for the file IDs */ - if ((ret_value = H5I_init_group(H5I_DATASPACE, H5I_DATASPACEID_HASHSIZE, - H5S_RESERVED_ATOMS, (herr_t (*)(void *)) H5S_close)) >= 0) { - ret_value = H5_add_exit(&H5S_term_interface); + if (H5I_init_group(H5I_DATASPACE, H5I_DATASPACEID_HASHSIZE, + H5S_RESERVED_ATOMS, (herr_t (*)(void *))H5S_close)<0) { + HRETURN_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } /* Register space conversion functions */ @@ -88,7 +87,7 @@ H5S_init_interface(void) } #endif - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } @@ -109,8 +108,8 @@ H5S_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5S_term_interface(void) +void +H5S_term_interface(intn status) { size_t i; @@ -118,96 +117,101 @@ H5S_term_interface(void) int j, nprints=0; H5S_conv_t *path=NULL; char buf[256]; - - /* - * Print statistics about each conversion path. - */ - if (H5DEBUG(S)) { - for (i=0; i<H5S_nconv_g; i++) { - path = H5S_conv_g[i]; - for (j=0; j<2; j++) { - if (0==path->stats[j].gath_ncalls && - 0==path->stats[j].scat_ncalls && - 0==path->stats[j].bkg_ncalls) { - continue; - } - if (0==nprints++) { - fprintf(H5DEBUG(S), "H5S: data space conversion " - "statistics accumulated over life of library:\n"); - fprintf(H5DEBUG(S), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "Memory <> File", "Bytes", "Calls", - "User", "System", "Elapsed", "Bandwidth"); - fprintf(H5DEBUG(S), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "--------------", "-----", "-----", - "----", "------", "-------", "---------"); - } - - /* Summary */ - sprintf(buf, "%s %c %s", - path->m->name, 0==j?'>':'<', path->f->name); - fprintf(H5DEBUG(S), " %-16s\n", buf); - - /* Gather */ - if (path->stats[j].gath_ncalls) { - H5_bandwidth(buf, (double)(path->stats[j].gath_nbytes), - path->stats[j].gath_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f %10s\n", - "gather", - path->stats[j].gath_nbytes, - path->stats[j].gath_ncalls, - path->stats[j].gath_timer.utime, - path->stats[j].gath_timer.stime, - path->stats[j].gath_timer.etime, - buf); - } - - /* Scatter */ - if (path->stats[j].scat_ncalls) { - H5_bandwidth(buf, (double)(path->stats[j].scat_nbytes), - path->stats[j].scat_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f %10s\n", - "scatter", - path->stats[j].scat_nbytes, - path->stats[j].scat_ncalls, - path->stats[j].scat_timer.utime, - path->stats[j].scat_timer.stime, - path->stats[j].scat_timer.etime, - buf); - } +#endif - /* Background */ - if (path->stats[j].bkg_ncalls) { - H5_bandwidth(buf, (double)(path->stats[j].bkg_nbytes), - path->stats[j].bkg_timer.etime); - HDfprintf(H5DEBUG(S), - " %16s %10Hu %10Hu %8.2f %8.2f %8.2f %10s\n", - "background", - path->stats[j].bkg_nbytes, - path->stats[j].bkg_ncalls, - path->stats[j].bkg_timer.utime, - path->stats[j].bkg_timer.stime, - path->stats[j].bkg_timer.etime, - buf); + if (interface_initialize_g>0) { +#ifdef H5S_DEBUG + /* + * Print statistics about each conversion path. + */ + if (H5DEBUG(S)) { + for (i=0; i<H5S_nconv_g; i++) { + path = H5S_conv_g[i]; + for (j=0; j<2; j++) { + if (0==path->stats[j].gath_ncalls && + 0==path->stats[j].scat_ncalls && + 0==path->stats[j].bkg_ncalls) { + continue; + } + if (0==nprints++) { + fprintf(H5DEBUG(S), "H5S: data space conversion " + "statistics:\n"); + fprintf(H5DEBUG(S), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "Memory <> File", "Bytes", "Calls", + "User", "System", "Elapsed", "Bandwidth"); + fprintf(H5DEBUG(S), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "--------------", "-----", "-----", + "----", "------", "-------", "---------"); + } + + /* Summary */ + sprintf(buf, "%s %c %s", + path->m->name, 0==j?'>':'<', path->f->name); + fprintf(H5DEBUG(S), " %-16s\n", buf); + + /* Gather */ + if (path->stats[j].gath_ncalls) { + H5_bandwidth(buf, (double)(path->stats[j].gath_nbytes), + path->stats[j].gath_timer.etime); + HDfprintf(H5DEBUG(S), + " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " + "%10s\n", "gather", + path->stats[j].gath_nbytes, + path->stats[j].gath_ncalls, + path->stats[j].gath_timer.utime, + path->stats[j].gath_timer.stime, + path->stats[j].gath_timer.etime, + buf); + } + + /* Scatter */ + if (path->stats[j].scat_ncalls) { + H5_bandwidth(buf, (double)(path->stats[j].scat_nbytes), + path->stats[j].scat_timer.etime); + HDfprintf(H5DEBUG(S), + " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " + "%10s\n", "scatter", + path->stats[j].scat_nbytes, + path->stats[j].scat_ncalls, + path->stats[j].scat_timer.utime, + path->stats[j].scat_timer.stime, + path->stats[j].scat_timer.etime, + buf); + } + + /* Background */ + if (path->stats[j].bkg_ncalls) { + H5_bandwidth(buf, (double)(path->stats[j].bkg_nbytes), + path->stats[j].bkg_timer.etime); + HDfprintf(H5DEBUG(S), + " %16s %10Hu %10Hu %8.2f %8.2f %8.2f " + "%10s\n", "background", + path->stats[j].bkg_nbytes, + path->stats[j].bkg_ncalls, + path->stats[j].bkg_timer.utime, + path->stats[j].bkg_timer.stime, + path->stats[j].bkg_timer.etime, + buf); + } } } } - } #endif - /* Free data types */ - H5I_destroy_group(H5I_DATASPACE); + /* Free data types */ + H5I_destroy_group(H5I_DATASPACE); - /* Clear/free conversion table */ - HDmemset(H5S_fconv_g, 0, sizeof(H5S_fconv_g)); - HDmemset(H5S_mconv_g, 0, sizeof(H5S_mconv_g)); - for (i=0; i<H5S_nconv_g; i++) H5MM_xfree(H5S_conv_g[i]); - H5S_conv_g = H5MM_xfree(H5S_conv_g); - H5S_nconv_g = H5S_aconv_g = 0; - interface_initialize_g = FALSE; + /* Clear/free conversion table */ + HDmemset(H5S_fconv_g, 0, sizeof(H5S_fconv_g)); + HDmemset(H5S_mconv_g, 0, sizeof(H5S_mconv_g)); + for (i=0; i<H5S_nconv_g; i++) H5MM_xfree(H5S_conv_g[i]); + H5S_conv_g = H5MM_xfree(H5S_conv_g); + H5S_nconv_g = H5S_aconv_g = 0; + } + + interface_initialize_g = status; } diff --git a/src/H5Sall.c b/src/H5Sall.c index 8904339..1148594 100644 --- a/src/H5Sall.c +++ b/src/H5Sall.c @@ -16,7 +16,7 @@ /* Interface initialization */ #define PABLO_MASK H5S_all_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5S_all_init (const struct H5O_layout_t *layout, const H5S_t *space, H5S_sel_iter_t *iter); diff --git a/src/H5Shyper.c b/src/H5Shyper.c index a3fef1e..2392ea9 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -18,7 +18,7 @@ /* Interface initialization */ #define PABLO_MASK H5S_hyper_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; /* Local datatypes */ /* Parameter block for H5S_hyper_fread & H5S_hyper_fwrite */ diff --git a/src/H5Smpio.c b/src/H5Smpio.c index e49916e..7cf93a6 100644 --- a/src/H5Smpio.c +++ b/src/H5Smpio.c @@ -29,7 +29,7 @@ /* Interface initialization */ #define PABLO_MASK H5S_all_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5S_mpio_all_type( const H5S_t *space, const size_t elmt_size, diff --git a/src/H5Snone.c b/src/H5Snone.c index 6721d98..beaeb58 100644 --- a/src/H5Snone.c +++ b/src/H5Snone.c @@ -16,7 +16,7 @@ /* Interface initialization */ #define PABLO_MASK H5S_none_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; /*-------------------------------------------------------------------------- diff --git a/src/H5Spoint.c b/src/H5Spoint.c index e52eb14..ae4a217 100644 --- a/src/H5Spoint.c +++ b/src/H5Spoint.c @@ -17,7 +17,7 @@ /* Interface initialization */ #define PABLO_MASK H5S_point_mask #define INTERFACE_INIT NULL -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5S_point_init (const struct H5O_layout_t *layout, const H5S_t *space, H5S_sel_iter_t *iter); diff --git a/src/H5Sselect.c b/src/H5Sselect.c index f5db9ad..c97a350 100644 --- a/src/H5Sselect.c +++ b/src/H5Sselect.c @@ -18,62 +18,12 @@ /* Interface initialization */ #define PABLO_MASK H5S_select_mask -#define INTERFACE_INIT H5S_select_init -static intn interface_initialize_g = FALSE; -static herr_t H5S_select_init(void); -static void H5S_select_term(void); +#define INTERFACE_INIT NULL +static intn interface_initialize_g = 0; /*-------------------------------------------------------------------------- NAME - H5S_select_init - PURPOSE - Initialize selection interface - USAGE - herr_t H5S_select_init(void) - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ -herr_t -H5S_select_init (void) -{ - herr_t ret_value = SUCCEED; - FUNC_ENTER (H5S_select_init, FAIL); - - /* Register the atexit function for this (sub)interface */ - ret_value = H5_add_exit(&H5S_select_term); - FUNC_LEAVE(ret_value); -} - -/*-------------------------------------------------------------------------- - NAME - H5S_select_term - PURPOSE - Terminate various H5S selection objects and free lists - USAGE - void H5S_select_term() - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Release the selection resources allocated. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Can't report errors... - EXAMPLES - REVISION LOG ---------------------------------------------------------------------------*/ -static void -H5S_select_term(void) -{ -} - -/*-------------------------------------------------------------------------- - NAME H5S_select_copy PURPOSE Copy a selection from one dataspace to another @@ -26,9 +26,8 @@ static char RcsId[] = "@(#)$Revision$"; #define H5T_COMPND_INC 64 /*typical max numb of members per struct */ /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT H5T_init_interface -static void H5T_term_interface(void); hid_t H5T_IEEE_F32BE_g = FAIL; hid_t H5T_IEEE_F32LE_g = FAIL; @@ -123,23 +122,25 @@ herr_t H5T_init_interface(void) { H5T_t *dt = NULL; - herr_t ret_value = SUCCEED; interface_initialize_g = TRUE; FUNC_ENTER(H5T_init_interface, FAIL); /* Initialize the atom group for the file IDs */ - if ((ret_value = H5I_init_group(H5I_DATATYPE, H5I_DATATYPEID_HASHSIZE, - H5T_RESERVED_ATOMS, - (herr_t (*)(void *)) H5T_close)) >= 0) { - ret_value = H5_add_exit(&H5T_term_interface); + if (H5I_init_group(H5I_DATATYPE, H5I_DATATYPEID_HASHSIZE, + H5T_RESERVED_ATOMS, (herr_t (*)(void *))H5T_close)<0) { + HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } /* * Initialize pre-defined native data types from code generated during * the library configuration by H5detect. */ - ret_value = H5T_native_open(); + if (H5T_native_open()<0) { + HRETURN_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, + "unable to initialize interface"); + } /*------------------------------------------------------------ * Native types @@ -1163,7 +1164,7 @@ H5T_init_interface(void) "unable to register conversion function"); } - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } @@ -1196,29 +1197,25 @@ H5T_unlock_cb (void *_dt, const void __unused__ *key) FUNC_LEAVE (0); } -/*-------------------------------------------------------------------------- - NAME - H5T_term_interface - PURPOSE - Terminate various H5T objects - USAGE - void H5T_term_interface() - RETURNS - Non-negative on success/Negative on failure - DESCRIPTION - Release the atom group and any other resources allocated. - GLOBAL VARIABLES - COMMENTS, BUGS, ASSUMPTIONS - Can't report errors... - EXAMPLES - REVISION LOG + +/*------------------------------------------------------------------------- + * Function: H5T_term_interface + * + * Purpose: Close this interface. + * + * Return: void + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: * Robb Matzke, 1998-06-11 * Statistics are only printed for conversion functions that were * called. - * ---------------------------------------------------------------------------*/ -static void -H5T_term_interface(void) + *------------------------------------------------------------------------- + */ +void +H5T_term_interface(intn status) { intn i; H5T_path_t *path = NULL; @@ -1230,110 +1227,115 @@ H5T_term_interface(void) H5T_cdata_t *cdata; char bandwidth[32]; #endif - - /* Unregister all conversion functions */ - for (i=0; i<H5T_npath_g; i++) { - path = H5T_path_g[i]; - assert (path); - if (path->func) { - path->cdata.command = H5T_CONV_FREE; - if ((path->func)(FAIL, FAIL, &(path->cdata), 0, NULL, NULL)<0) { + if (interface_initialize_g>0) { + /* Unregister all conversion functions */ + for (i=0; i<H5T_npath_g; i++) { + path = H5T_path_g[i]; + assert (path); + + if (path->func) { + path->cdata.command = H5T_CONV_FREE; + if ((path->func)(FAIL, FAIL, &(path->cdata), 0, NULL, + NULL)<0) { #ifdef H5T_DEBUG - if (H5DEBUG(T)) { - fprintf (H5DEBUG(T), "H5T: conversion function failed " - "to free private data for %s\n", path->name); + if (H5DEBUG(T)) { + fprintf (H5DEBUG(T), "H5T: conversion function failed " + "to free private data for %s\n", path->name); + } +#endif + H5E_clear(); /*ignore the error*/ + } +#ifdef H5T_DEBUG + if (H5DEBUG(T) && path->cdata.stats->ncalls>0) { + if (0==nprint++) { + HDfprintf (H5DEBUG(T), + "H5T: type conversion statistics:\n"); + HDfprintf (H5DEBUG(T), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "Conversion", "Elmts", "Calls", "User", + "System", "Elapsed", "Bandwidth"); + HDfprintf (H5DEBUG(T), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "----------", "-----", "-----", "----", + "------", "-------", "---------"); + } + nbytes = MAX (H5T_get_size (path->src), + H5T_get_size (path->dst)); + nbytes *= path->cdata.stats->nelmts; + H5_bandwidth(bandwidth, (double)nbytes, + path->cdata.stats->timer.etime); + HDfprintf (H5DEBUG(T), + " %-16s %10Hd %10d %8.2f %8.2f %8.2f %10s\n", + path->name, + path->cdata.stats->nelmts, + path->cdata.stats->ncalls, + path->cdata.stats->timer.utime, + path->cdata.stats->timer.stime, + path->cdata.stats->timer.etime, + bandwidth); } #endif - H5E_clear(); /*ignore the error*/ + H5T_close (path->src); + H5T_close (path->dst); + H5MM_xfree (path->cdata.stats); } + H5MM_xfree (path); + H5T_path_g[i] = NULL; + } + #ifdef H5T_DEBUG - if (H5DEBUG(T) && path->cdata.stats->ncalls>0) { + /* Print debugging infor for the `noop' conversion */ + if (H5DEBUG(T) && + H5T_conv_noop==H5T_find(NULL, NULL, H5T_BKG_NO, &cdata)) { + if (cdata->stats->ncalls>0) { if (0==nprint++) { - HDfprintf (H5DEBUG(T), "H5T: type conversion statistics " - "accumulated over life of function:\n"); HDfprintf (H5DEBUG(T), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "Conversion", "Elmts", "Calls", "User", - "System", "Elapsed", "Bandwidth"); - HDfprintf (H5DEBUG(T), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "----------", "-----", "-----", "----", - "------", "-------", "---------"); + "H5T: type conversion statistics\n"); + HDfprintf (H5DEBUG(T), " %-16s %10s %10s %8s %8s %8s " + "%10s\n", "Conversion", "Elmts", "Calls", + "User", "System", "Elapsed", "Bandwidth"); + HDfprintf (H5DEBUG(T), " %-16s %10s %10s %8s %8s %8s " + "%10s\n", "----------", "-----", "-----", + "----", "------", "-------", "---------"); } - nbytes = MAX (H5T_get_size (path->src), - H5T_get_size (path->dst)); - nbytes *= path->cdata.stats->nelmts; + nbytes = cdata->stats->nelmts; H5_bandwidth(bandwidth, (double)nbytes, - path->cdata.stats->timer.etime); + cdata->stats->timer.etime); HDfprintf (H5DEBUG(T), " %-16s %10Hd %10d %8.2f %8.2f %8.2f %10s\n", - path->name, - path->cdata.stats->nelmts, - path->cdata.stats->ncalls, - path->cdata.stats->timer.utime, - path->cdata.stats->timer.stime, - path->cdata.stats->timer.etime, + "no-op", + cdata->stats->nelmts, + cdata->stats->ncalls, + cdata->stats->timer.utime, + cdata->stats->timer.stime, + cdata->stats->timer.etime, bandwidth); } -#endif - H5T_close (path->src); - H5T_close (path->dst); - H5MM_xfree (path->cdata.stats); } - H5MM_xfree (path); - H5T_path_g[i] = NULL; - } - -#ifdef H5T_DEBUG - /* Print debugging infor for the `noop' conversion */ - if (H5DEBUG(T) && - H5T_conv_noop==H5T_find(NULL, NULL, H5T_BKG_NO, &cdata)) { - if (cdata->stats->ncalls>0) { - if (0==nprint++) { - HDfprintf (H5DEBUG(T), "H5T: type conversion statistics " - "accumulated over life of library:\n"); - HDfprintf (H5DEBUG(T), " %-16s %10s %10s %8s %8s %8s %10s\n", - "Conversion", "Elmts", "Calls", "User", - "System", "Elapsed", "Bandwidth"); - HDfprintf (H5DEBUG(T), " %-16s %10s %10s %8s %8s %8s %10s\n", - "----------", "-----", "-----", "----", - "------", "-------", "---------"); - } - nbytes = cdata->stats->nelmts; - H5_bandwidth(bandwidth, (double)nbytes, cdata->stats->timer.etime); - HDfprintf (H5DEBUG(T), - " %-16s %10Hd %10d %8.2f %8.2f %8.2f %10s\n", - "no-op", - cdata->stats->nelmts, - cdata->stats->ncalls, - cdata->stats->timer.utime, - cdata->stats->timer.stime, - cdata->stats->timer.etime, - bandwidth); - } - } #endif - /* Clear conversion tables */ - H5T_apath_g = 0; - H5T_npath_g = 0; - H5T_path_g = H5MM_xfree (H5T_path_g); + /* Clear conversion tables */ + H5T_apath_g = 0; + H5T_npath_g = 0; + H5T_path_g = H5MM_xfree (H5T_path_g); - H5T_asoft_g = 0; - H5T_nsoft_g = 0; - H5T_soft_g = H5MM_xfree (H5T_soft_g); + H5T_asoft_g = 0; + H5T_nsoft_g = 0; + H5T_soft_g = H5MM_xfree (H5T_soft_g); - /* Clear noop function */ - if ((cfunc=H5T_find (NULL, NULL, H5T_BKG_NO, &pcdata))) { - pcdata->command = H5T_CONV_FREE; - (cfunc)(FAIL, FAIL, pcdata, 0, NULL, NULL); - } + /* Clear noop function */ + if ((cfunc=H5T_find (NULL, NULL, H5T_BKG_NO, &pcdata))) { + pcdata->command = H5T_CONV_FREE; + (cfunc)(FAIL, FAIL, pcdata, 0, NULL, NULL); + } - /* Unlock all datatypes, then free them */ - H5I_search (H5I_DATATYPE, H5T_unlock_cb, NULL); - H5I_destroy_group(H5I_DATATYPE); - interface_initialize_g = FALSE; + /* Unlock all datatypes, then free them */ + H5I_search (H5I_DATATYPE, H5T_unlock_cb, NULL); + H5I_destroy_group(H5I_DATATYPE); + } + + interface_initialize_g = status; } @@ -43,9 +43,8 @@ static char RcsId[] = "@(#)$Revision$"; /* Interface init/term information */ #define PABLO_MASK H5TB_mask #define INTERFACE_INIT H5TB_init_interface -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5TB_init_interface(void); -static void H5TB_term_interface(void); /* Local information for managing buffers */ #define H5TB_RESERVED_ATOMS 0 @@ -80,15 +79,15 @@ DESCRIPTION static herr_t H5TB_init_interface(void) { - herr_t ret_value = SUCCEED; FUNC_ENTER(H5TB_init_interface, FAIL); /* Initialize the atom group for the file IDs */ - if ((ret_value = H5I_init_group(H5I_TEMPBUF, H5I_TEMPBUFID_HASHSIZE, - H5TB_RESERVED_ATOMS, NULL)) >= 0) { - ret_value = H5_add_exit(&H5TB_term_interface); + if (H5I_init_group(H5I_TEMPBUF, H5I_TEMPBUFID_HASHSIZE, + H5TB_RESERVED_ATOMS, NULL)<0) { + HRETURN_ERROR (H5E_INTERNAL, H5E_CANTINIT, FAIL, + "unable to initialize interface"); } - FUNC_LEAVE(ret_value); + FUNC_LEAVE(SUCCEED); } @@ -109,29 +108,32 @@ H5TB_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -static void -H5TB_term_interface(void) +void +H5TB_term_interface(intn status) { H5TB_t *curr=H5TB_list_head, /* pointer to current temp. buffer */ *next; /* pointer to next temp. buffer */ - /* Destroy the atom group */ - H5I_destroy_group(H5I_TEMPBUF); + if (interface_initialize_g>0) { + /* Destroy the atom group */ + H5I_destroy_group(H5I_TEMPBUF); - /* Step through the list and free the buffers */ - while(curr!=NULL) { - next=curr->next; + /* Step through the list and free the buffers */ + while(curr!=NULL) { + next=curr->next; - if(curr->buf!=NULL) - H5MM_xfree(curr->buf); - H5MM_xfree(curr); + if(curr->buf!=NULL) + H5MM_xfree(curr->buf); + H5MM_xfree(curr); - curr=next; - } /* end while */ + curr=next; + } /* end while */ - /* Reset head & tail pointers */ - H5TB_list_head=H5TB_list_tail=NULL; - interface_initialize_g = FALSE; + /* Reset head & tail pointers */ + H5TB_list_head=H5TB_list_tail=NULL; + } + + interface_initialize_g = status; } /*------------------------------------------------------------------------- diff --git a/src/H5Tbit.c b/src/H5Tbit.c index 6a5474d..ed074ab 100644 --- a/src/H5Tbit.c +++ b/src/H5Tbit.c @@ -17,7 +17,7 @@ /* Interface initialization */ #define PABLO_MASK H5Tbit_mask -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL diff --git a/src/H5Tconv.c b/src/H5Tconv.c index a1fc1aa..481437e 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -26,7 +26,7 @@ typedef struct H5T_conv_struct_t { } H5T_conv_struct_t; /* Interface initialization */ -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL /* @@ -13,7 +13,7 @@ #define H5V_HYPER_NDIMS H5O_LAYOUT_NDIMS #define PABLO_MASK H5V_mask -static hbool_t interface_initialize_g = TRUE; +static intn interface_initialize_g = 0; #define INTERFACE_INIT NULL @@ -20,9 +20,8 @@ /* Interface initialization */ #define PABLO_MASK H5Z_mask #define INTERFACE_INIT H5Z_init_interface -static intn interface_initialize_g = FALSE; +static intn interface_initialize_g = 0; static herr_t H5Z_init_interface (void); -static void H5Z_term_interface (void); static size_t H5Z_table_alloc_g = 0; static size_t H5Z_table_used_g = 0; @@ -52,10 +51,8 @@ static herr_t H5Z_init_interface (void) { FUNC_ENTER (H5Z_init_interface, FAIL); - H5_add_exit (H5Z_term_interface); - H5Z_register (H5Z_FILTER_DEFLATE, "deflate", - H5Z_filter_deflate); + H5Z_register (H5Z_FILTER_DEFLATE, "deflate", H5Z_filter_deflate); FUNC_LEAVE (SUCCEED); } @@ -75,69 +72,73 @@ H5Z_init_interface (void) * *------------------------------------------------------------------------- */ -static void -H5Z_term_interface (void) +void +H5Z_term_interface (intn status) { size_t i; - #ifdef H5Z_DEBUG int dir, nprint=0; char comment[16], bandwidth[32]; +#endif - if (H5DEBUG(Z)) { - for (i=0; i<H5Z_table_used_g; i++) { - for (dir=0; dir<2; dir++) { - if (0==H5Z_table_g[i].stats[dir].total) continue; - - if (0==nprint++) { - /* Print column headers */ - HDfprintf (H5DEBUG(Z), "H5Z: filter statistics " - "accumulated over life of library:\n"); - HDfprintf (H5DEBUG(Z), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "Filter", "Total", "Errors", "User", - "System", "Elapsed", "Bandwidth"); + if (interface_initialize_g>0) { +#ifdef H5Z_DEBUG + if (H5DEBUG(Z)) { + for (i=0; i<H5Z_table_used_g; i++) { + for (dir=0; dir<2; dir++) { + if (0==H5Z_table_g[i].stats[dir].total) continue; + + if (0==nprint++) { + /* Print column headers */ + HDfprintf (H5DEBUG(Z), "H5Z: filter statistics " + "accumulated over life of library:\n"); + HDfprintf (H5DEBUG(Z), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "Filter", "Total", "Errors", "User", + "System", "Elapsed", "Bandwidth"); + HDfprintf (H5DEBUG(Z), + " %-16s %10s %10s %8s %8s %8s %10s\n", + "------", "-----", "------", "----", + "------", "-------", "---------"); + } + + /* Truncate the comment to fit in the field */ + HDstrncpy(comment, H5Z_table_g[i].name, sizeof comment); + comment[sizeof(comment)-1] = '\0'; + + /* + * Format bandwidth to have four significant digits and + * units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or + * the word `Inf' if the elapsed time is zero. + */ + H5_bandwidth(bandwidth, + (double)(H5Z_table_g[i].stats[dir].total), + H5Z_table_g[i].stats[dir].timer.etime); + + /* Print the statistics */ HDfprintf (H5DEBUG(Z), - " %-16s %10s %10s %8s %8s %8s %10s\n", - "------", "-----", "------", "----", - "------", "-------", "---------"); + " %s%-15s %10Hd %10Hd %8.2f %8.2f %8.2f " + "%10s\n", dir?"<":">", comment, + H5Z_table_g[i].stats[dir].total, + H5Z_table_g[i].stats[dir].errors, + H5Z_table_g[i].stats[dir].timer.utime, + H5Z_table_g[i].stats[dir].timer.stime, + H5Z_table_g[i].stats[dir].timer.etime, + bandwidth); } - - /* Truncate the comment to fit in the field */ - HDstrncpy(comment, H5Z_table_g[i].name, sizeof comment); - comment[sizeof(comment)-1] = '\0'; - - /* - * Format bandwidth to have four significant digits and units - * of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or the word - * `Inf' if the elapsed time is zero. - */ - H5_bandwidth(bandwidth, - (double)(H5Z_table_g[i].stats[dir].total), - H5Z_table_g[i].stats[dir].timer.etime); - - /* Print the statistics */ - HDfprintf (H5DEBUG(Z), - " %s%-15s %10Hd %10Hd %8.2f %8.2f %8.2f " - "%10s\n", dir?"<":">", comment, - H5Z_table_g[i].stats[dir].total, - H5Z_table_g[i].stats[dir].errors, - H5Z_table_g[i].stats[dir].timer.utime, - H5Z_table_g[i].stats[dir].timer.stime, - H5Z_table_g[i].stats[dir].timer.etime, - bandwidth); } } - } #endif - /* Free the table */ - for (i=0; i<H5Z_table_used_g; i++) { - H5MM_xfree(H5Z_table_g[i].name); + /* Free the table */ + for (i=0; i<H5Z_table_used_g; i++) { + H5MM_xfree(H5Z_table_g[i].name); + } + H5Z_table_g = H5MM_xfree(H5Z_table_g); + H5Z_table_used_g = H5Z_table_alloc_g = 0; } - H5Z_table_g = H5MM_xfree(H5Z_table_g); - H5Z_table_used_g = H5Z_table_alloc_g = 0; - interface_initialize_g = FALSE; + + interface_initialize_g = status; } diff --git a/src/H5detect.c b/src/H5detect.c index 44b0486..57aa066 100644 --- a/src/H5detect.c +++ b/src/H5detect.c @@ -321,16 +321,16 @@ print_results(int nd, detected_t *d) #include <H5MMprivate.h>\n\ #include <H5Tpkg.h>\n\ \n\ -static hbool_t interface_initialize_g = FALSE;\n\ +static intn interface_initialize_g = 0;\n\ #define INTERFACE_INIT NULL\n\ \n"); /* The interface termination function */ printf("\n\ -static void\n\ -H5T_native_close(void)\n\ +void\n\ +H5T_native_close(intn status)\n\ {\n\ - interface_initialize_g = FALSE;\n\ + interface_initialize_g = status;\n\ }\n"); /* The interface initialization function */ @@ -340,8 +340,7 @@ H5T_native_open (void)\n\ {\n\ H5T_t *dt = NULL;\n\ \n\ - FUNC_ENTER (H5T_init, FAIL);\n\ - H5_add_exit(&H5T_native_close);\n"); + FUNC_ENTER (H5T_init, FAIL);\n"); for (i = 0; i < nd; i++) { diff --git a/src/H5private.h b/src/H5private.h index 87d973a..1e55eb3 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -818,7 +818,6 @@ void H5_trace (hbool_t returning, const char *func, const char *type, ...); *------------------------------------------------------------------------- */ 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 */ /* Is `S' the name of an API function? */ #define H5_IS_API(S) ('_'!=S[2] && '_'!=S[3] && (!S[4] || '_'!=S[4])) @@ -839,18 +838,9 @@ extern hbool_t thread_initialize_g; /*don't decl interface_initialize_g */ 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 */ \ + /* Initialize this interface or bust */ \ if (!interface_initialize_g) { \ interface_initialize_g = TRUE; \ if (interface_init_func && \ @@ -858,10 +848,14 @@ extern hbool_t thread_initialize_g; /*don't decl interface_initialize_g */ HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \ "interface initialization failed"); \ } \ + } else if (interface_initialize_g<0) { \ + HRETURN_ERROR(H5E_FUNC, H5E_CANTINIT, err, \ + "interface is closing"); \ + assert("interface is closing" && 0); \ } \ \ /* Clear thread error stack entering public functions */ \ - if (H5E_clearable_g && H5_IS_API (FUNC)) { \ + if (H5E_clearable_g && H5_IS_API (FUNC)) { \ H5E_clear (); \ } \ { @@ -901,8 +895,21 @@ extern hbool_t thread_initialize_g; /*don't decl interface_initialize_g */ /* Private functions, not part of the publicly documented API */ herr_t H5_init_library(void); void H5_term_library(void); -herr_t H5_add_exit(void (*func) (void)); -herr_t H5_init_thread(void); -void H5_term_thread(void); + +/* Functions to terminate interfaces */ +void H5A_term_interface(intn status); +void H5D_term_interface(intn status); +void H5F_term_interface(intn status); +void H5G_term_interface(intn status); +void H5I_term_interface(intn status); +void H5P_term_interface(intn status); +void H5RA_term_interface(intn status); +void H5R_term_interface(intn status); +void H5S_term_interface(intn status); +void H5TB_term_interface(intn status); +void H5T_native_close(intn status); +void H5T_term_interface(intn status); +void H5Z_term_interface(intn status); + #endif diff --git a/test/.distdep b/test/.distdep index 186cef4..b550592 100644 --- a/test/.distdep +++ b/test/.distdep @@ -1,11 +1,41 @@ +h5test.o: \ + h5test.c \ + h5test.h \ + ../src/hdf5.h \ + ../src/H5public.h \ + ../src/H5config.h \ + ../src/H5Ipublic.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ + ../src/H5Bpublic.h \ + ../src/H5Dpublic.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ + ../src/H5Gpublic.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h testhdf5.o: \ testhdf5.c \ testhdf5.h \ ../src/H5private.h \ ../src/H5public.h \ - ../src/H5config.h \ - ../src/H5Eprivate.h \ - ../src/H5Epublic.h + ../src/H5config.h tattr.o: \ tattr.c \ testhdf5.h \ @@ -29,8 +59,7 @@ tattr.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5Rpublic.h tfile.o: \ tfile.c \ testhdf5.h \ @@ -45,8 +74,7 @@ tfile.o: \ ../src/H5Fprivate.h \ ../src/H5Fpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Pprivate.h \ - ../src/H5Ppublic.h + ../src/H5Pprivate.h theap.o: \ theap.c \ testhdf5.h \ @@ -64,8 +92,7 @@ theap.o: \ ../src/H5Dpublic.h \ ../src/H5Pprivate.h \ ../src/H5Ppublic.h \ - ../src/H5Zpublic.h \ - ../src/H5HLprivate.h + ../src/H5Zpublic.h tmeta.o: \ tmeta.c \ testhdf5.h \ @@ -74,8 +101,7 @@ tmeta.o: \ ../src/H5config.h \ ../src/H5Eprivate.h \ ../src/H5Epublic.h \ - ../src/H5Ipublic.h \ - ../src/H5Fprivate.h + ../src/H5Ipublic.h tohdr.o: \ tohdr.c \ testhdf5.h \ @@ -105,8 +131,7 @@ tohdr.o: \ ../src/H5Tprivate.h \ ../src/H5Tpublic.h \ ../src/H5Sprivate.h \ - ../src/H5Spublic.h \ - ../src/H5Zprivate.h + ../src/H5Spublic.h trefer.o: \ trefer.c \ testhdf5.h \ @@ -130,8 +155,7 @@ trefer.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5Rpublic.h tselect.o: \ tselect.c \ testhdf5.h \ @@ -155,8 +179,7 @@ tselect.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5Rpublic.h tstab.o: \ tstab.c \ testhdf5.h \ @@ -186,8 +209,7 @@ tstab.o: \ ../src/H5Tprivate.h \ ../src/H5Tpublic.h \ ../src/H5Sprivate.h \ - ../src/H5Spublic.h \ - ../src/H5Zprivate.h + ../src/H5Spublic.h th5s.o: \ th5s.c \ testhdf5.h \ @@ -212,12 +234,15 @@ th5s.o: \ ../src/H5HGpublic.h \ ../src/H5Tprivate.h \ ../src/H5Tpublic.h \ - ../src/H5Zprivate.h + ../src/H5Zprivate.h \ + ../src/H5Zpublic.h \ + ../src/H5Pprivate.h dtypes.o: \ dtypes.c \ - ../src/H5config.h \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -237,17 +262,18 @@ dtypes.o: \ ../src/H5RApublic.h \ ../src/H5Spublic.h \ ../src/H5Tpublic.h \ + ../src/H5private.h \ ../src/H5Tpkg.h \ ../src/H5HGprivate.h \ ../src/H5Fprivate.h \ - ../src/H5private.h \ - ../src/H5Rprivate.h + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h hyperslab.o: \ hyperslab.c \ ../src/H5private.h \ ../src/H5public.h \ - ../src/H5config.h \ - ../src/H5MMprivate.h + ../src/H5config.h istore.o: \ istore.c \ ../src/H5private.h \ @@ -274,12 +300,15 @@ istore.o: \ ../src/H5Zpublic.h \ ../src/H5Iprivate.h \ ../src/H5Pprivate.h \ - ../src/H5Ppublic.h + ../src/H5Ppublic.h \ + ../src/H5MMprivate.h \ + ../src/H5MMpublic.h dsets.o: \ dsets.c \ - ../src/H5config.h \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -296,12 +325,22 @@ dsets.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h cmpd_dset.o: \ cmpd_dset.c \ - ../src/H5config.h \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -317,34 +356,23 @@ cmpd_dset.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h extend.o: \ extend.c \ - ../src/H5config.h \ + h5test.h \ ../src/hdf5.h \ ../src/H5public.h \ - ../src/H5Ipublic.h \ - ../src/H5Apublic.h \ - ../src/H5ACpublic.h \ - ../src/H5Bpublic.h \ - ../src/H5Dpublic.h \ - ../src/H5Epublic.h \ - ../src/H5Fpublic.h \ - ../src/H5Gpublic.h \ - ../src/H5HGpublic.h \ - ../src/H5HLpublic.h \ - ../src/H5MFpublic.h \ - ../src/H5MMpublic.h \ - ../src/H5Opublic.h \ - ../src/H5Ppublic.h \ - ../src/H5Zpublic.h \ - ../src/H5Rpublic.h \ - ../src/H5RApublic.h -external.o: \ - external.c \ ../src/H5config.h \ - ../src/hdf5.h \ - ../src/H5public.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -360,12 +388,23 @@ external.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h \ + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h + iopipe.o: \ iopipe.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -382,7 +421,9 @@ iopipe.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h gheap.o: \ gheap.c \ ../src/H5private.h \ @@ -399,13 +440,12 @@ gheap.o: \ ../src/H5Bprivate.h \ ../src/H5Bpublic.h \ ../src/H5HGprivate.h \ - ../src/H5HGpublic.h \ - ../src/H5Pprivate.h + ../src/H5HGpublic.h shtype.o: \ shtype.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -422,12 +462,14 @@ shtype.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h big.o: \ big.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -450,9 +492,9 @@ big.o: \ ../src/H5private.h links.o: \ links.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -469,12 +511,14 @@ links.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h chunk.o: \ chunk.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -490,30 +534,47 @@ chunk.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h + ../src/H5Rpublic.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h bittests.o: \ bittests.c \ - ../src/H5Tpkg.h \ - ../src/H5HGprivate.h \ - ../src/H5HGpublic.h \ + h5test.h \ + ../src/hdf5.h \ ../src/H5public.h \ ../src/H5config.h \ - ../src/H5Fprivate.h \ - ../src/H5Fpublic.h \ ../src/H5Ipublic.h \ - ../src/H5private.h \ + ../src/H5Apublic.h \ + ../src/H5ACpublic.h \ + ../src/H5Bpublic.h \ ../src/H5Dpublic.h \ - ../src/H5Rprivate.h \ + ../src/H5Epublic.h \ + ../src/H5Fpublic.h \ + ../src/H5Gpublic.h \ + ../src/H5HGpublic.h \ + ../src/H5HLpublic.h \ + ../src/H5MFpublic.h \ + ../src/H5MMpublic.h \ + ../src/H5Opublic.h \ + ../src/H5Ppublic.h \ + ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5Tprivate.h \ + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ ../src/H5Tpublic.h \ - ../src/H5Gprivate.h \ - ../src/H5Gpublic.h + ../src/H5private.h \ + ../src/H5Tpkg.h \ + ../src/H5HGprivate.h \ + ../src/H5Fprivate.h \ + ../src/H5Rprivate.h \ + ../src/H5Tprivate.h \ + ../src/H5Gprivate.h mtime.o: \ mtime.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -536,9 +597,9 @@ mtime.o: \ ../src/H5private.h ragged.o: \ ragged.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -561,9 +622,9 @@ ragged.o: \ ../src/H5private.h unlink.o: \ unlink.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -579,12 +640,13 @@ unlink.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h + ../src/H5Rpublic.h \ + ../src/H5RApublic.h overhead.o: \ overhead.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -602,12 +664,13 @@ overhead.o: \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ - ../src/H5Spublic.h + ../src/H5Spublic.h \ + ../src/H5Tpublic.h fillval.o: \ fillval.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -625,12 +688,13 @@ fillval.o: \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ ../src/H5RApublic.h \ - ../src/H5Spublic.h + ../src/H5Spublic.h \ + ../src/H5Tpublic.h mount.o: \ mount.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -646,12 +710,13 @@ mount.o: \ ../src/H5Opublic.h \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ - ../src/H5Rpublic.h + ../src/H5Rpublic.h \ + ../src/H5RApublic.h flush1.o: \ flush1.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -668,12 +733,14 @@ flush1.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h flush2.o: \ flush2.c \ - ../src/H5config.h \ ../src/hdf5.h \ ../src/H5public.h \ + ../src/H5config.h \ ../src/H5Ipublic.h \ ../src/H5Apublic.h \ ../src/H5ACpublic.h \ @@ -690,4 +757,6 @@ flush2.o: \ ../src/H5Ppublic.h \ ../src/H5Zpublic.h \ ../src/H5Rpublic.h \ - ../src/H5RApublic.h + ../src/H5RApublic.h \ + ../src/H5Spublic.h \ + ../src/H5Tpublic.h diff --git a/test/Makefile.in b/test/Makefile.in index 2003916..b8d00ab 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -9,7 +9,7 @@ # Add include directory to the C preprocessor flags and the hdf5 # library to the library list. CPPFLAGS=-I. -I../src @CPPFLAGS@ -LIBS=../src/libhdf5.a @LIBS@ +LIBS=libh5test.a ../src/libhdf5.a @LIBS@ # These are our main targets. They should be listed in the order to be # executed, generally most specific tests to least specific tests. @@ -18,6 +18,11 @@ TEST_PROGS=testhdf5 gheap hyperslab istore bittests dtypes dsets cmpd_dset \ flush2 TIMINGS=iopipe chunk ragged overhead +# The libh5test.a library provides common support code for the tests. +LIB=libh5test.a +LIB_SRC=h5test.c +LIB_OBJ=$(LIB_SRC:.c=.o) + # Temporary files MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \ tfile3.h5 th5s1.h5 theap.h5 tohdr.h5 tstab1.h5 tstab2.h5 \ @@ -55,8 +60,8 @@ timings _timings: $(TIMINGS) fi; \ done; -# How to build the tests... They all depend on the hdf5 library. -$(TEST_PROGS): ../src/libhdf5.a +# How to build the tests... They all depend on the test and hdf5 libraries. +$(TEST_PROGS): libh5test.a ../src/libhdf5.a TESTHDF5_OBJ=testhdf5.o tattr.o tfile.o theap.o tmeta.o tohdr.o trefer.o tselect.o tstab.o th5s.o testhdf5: $(TESTHDF5_OBJ) $(CC) $(CFLAGS) -o $@ $(TESTHDF5_OBJ) $(LDFLAGS) $(LIBS) diff --git a/test/bittests.c b/test/bittests.c index 6b1f1d9..2c8daef 100644 --- a/test/bittests.c +++ b/test/bittests.c @@ -7,6 +7,8 @@ * * Purpose: Tests functions in H5Tbit.c */ +#include <h5test.h> + #define H5T_PACKAGE #include <H5Tpkg.h> @@ -38,21 +40,20 @@ test_find (void) intn i; ssize_t n; - printf ("%-70s", "Testing bit search operations"); - fflush (stdout); + TESTING("bit search operations"); /* The zero length buffer */ memset (v1, 0xaa, sizeof v1); n = H5T_bit_find (v1, 0, 0, H5T_BIT_LSB, TRUE); if (-1!=n) { - puts ("*FAILED*"); - puts (" Zero length test failed (lsb)!"); + FAILED(); + puts (" Zero length test failed (lsb)!"); goto failed; } n = H5T_bit_find (v1, 0, 0, H5T_BIT_MSB, TRUE); if (-1!=n) { - puts ("*FAILED*"); - puts (" Zero length test failed (msb)!"); + FAILED(); + puts (" Zero length test failed (msb)!"); goto failed; } @@ -61,14 +62,14 @@ test_find (void) memset (v1, 0, sizeof v1); n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, TRUE); if (-1!=n) { - puts ("*FAILED*"); - puts (" Zero buffer test failed (lsb)!"); + FAILED(); + puts (" Zero buffer test failed (lsb)!"); goto failed; } n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, TRUE); if (-1!=n) { - puts ("*FAILED*"); - puts (" Zero buffer test failed (msb)!"); + FAILED(); + puts (" Zero buffer test failed (msb)!"); goto failed; } @@ -78,14 +79,14 @@ test_find (void) v1[i/8] = 1<<(i%8); n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, TRUE); if ((ssize_t)i!=n) { - puts ("*FAILED*"); - printf (" Test for set bit %d failed (lsb)!\n", i); + FAILED(); + printf (" Test for set bit %d failed (lsb)!\n", i); goto failed; } n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, TRUE); if ((ssize_t)i!=n) { - puts ("*FAILED*"); - printf (" Test for set bit %d failed (msb)!\n", i); + FAILED(); + printf (" Test for set bit %d failed (msb)!\n", i); goto failed; } } @@ -94,14 +95,14 @@ test_find (void) memset (v1, 0xff, sizeof v1); n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, FALSE); if (-1!=n) { - puts ("*FAILED*"); - puts (" One buffer test failed (lsb)!"); + FAILED(); + puts (" One buffer test failed (lsb)!"); goto failed; } n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, FALSE); if (-1!=n) { - puts ("*FAILED*"); - puts (" One buffer test failed (msb)!"); + FAILED(); + puts (" One buffer test failed (msb)!"); goto failed; } @@ -111,24 +112,24 @@ test_find (void) v1[i/8] &= ~(1<<(i%8)); n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, FALSE); if ((ssize_t)i!=n) { - puts ("*FAILED*"); - printf (" Test for clear bit %d failed (lsb)!\n", i); + FAILED(); + printf (" Test for clear bit %d failed (lsb)!\n", i); goto failed; } n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, FALSE); if ((ssize_t)i!=n) { - puts ("*FAILED*"); - printf (" Test for clear bit %d failed (lsb)!\n", i); + FAILED(); + printf (" Test for clear bit %d failed (lsb)!\n", i); goto failed; } } - puts (" PASSED"); + PASSED(); return 0; failed: - printf (" v = 0x"); + printf (" v = 0x"); for (i=0; i<(int)sizeof(v1); i++) printf ("%02x", v1[i]); printf ("\n"); return -1; @@ -159,8 +160,7 @@ test_copy (void) intn i, j; ssize_t n; - printf ("%-70s", "Testing bit copy operations"); - fflush (stdout); + TESTING("bit copy operations"); for (i=0; i<NTESTS; i++) { s_offset = rand() % (8*sizeof v1); @@ -174,13 +174,13 @@ test_copy (void) H5T_bit_copy (v2, d_offset, v1, s_offset, size); for (j=0; j<(intn)sizeof(v2); j++) if (v2[j]) break; if (size>0 && j>=(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Unabled to find copied region in destination"); + FAILED(); + puts (" Unabled to find copied region in destination"); goto failed; } if (0==size && j<(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Found copied bits when we shouldn't have"); + FAILED(); + puts (" Found copied bits when we shouldn't have"); goto failed; } @@ -188,26 +188,26 @@ test_copy (void) /* Look for the zeros and ones */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 1); if (size>0 && n!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find first copied bit in destination " + FAILED(); + printf (" Unable to find first copied bit in destination " "(n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found copied bits and shouldn't have!"); + FAILED(); + puts (" Found copied bits and shouldn't have!"); goto failed; } n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 0); if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) { - puts ("*FAILED*"); - printf (" Unable to find last copied bit in destination " + FAILED(); + printf (" Unable to find last copied bit in destination " "(n=%d)\n", (int)n); goto failed; } if (d_offset+size==8*sizeof(v2) && n>=0) { - puts ("*FAILED*"); - puts (" High-order zeros are present and shouldn't be!"); + FAILED(); + puts (" High-order zeros are present and shouldn't be!"); goto failed; } @@ -217,41 +217,41 @@ test_copy (void) */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 1); if (size>0 && (size_t)(n+1)!=d_offset+size) { - puts ("*FAILED*"); - printf (" Unable to find last copied bit in destination " + FAILED(); + printf (" Unable to find last copied bit in destination " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found copied bits but shouldn't have (reverse)!"); + FAILED(); + puts (" Found copied bits but shouldn't have (reverse)!"); goto failed; } n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 0); if (d_offset>0 && n+1!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find beginning of copied data " + FAILED(); + printf (" Unable to find beginning of copied data " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==d_offset && n>=0) { - puts ("*FAILED*"); - puts (" Found leading original data but shouldn't have!"); + FAILED(); + puts (" Found leading original data but shouldn't have!"); goto failed; } } - puts (" PASSED"); + PASSED(); return 0; failed: - printf (" i=%d, s_offset=%lu, d_offset=%lu, size=%lu\n", + printf (" i=%d, s_offset=%lu, d_offset=%lu, size=%lu\n", i, (unsigned long)s_offset, (unsigned long)d_offset, (unsigned long)size); - printf (" s = 0x"); + printf (" s = 0x"); for (j=sizeof(v1)-1; j>=0; --j) printf ("%02x", v1[j]); - printf ("\n d = 0x"); + printf ("\n d = 0x"); for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]); printf ("\n"); return -1; @@ -282,8 +282,7 @@ test_set (void) intn i, j; ssize_t n; - printf ("%-70s", "Testing bit set operations"); - fflush (stdout); + TESTING("bit set operations"); for (i=0; i<NTESTS; i++) { d_offset = rand() % (8*sizeof v2); @@ -295,13 +294,13 @@ test_set (void) H5T_bit_set (v2, d_offset, size, TRUE); for (j=0; j<(intn)sizeof(v2); j++) if (v2[j]) break; if (size>0 && j>=(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Unabled to find set region in buffer"); + FAILED(); + puts (" Unabled to find set region in buffer"); goto failed; } if (0==size && j<(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Found set bits when we shouldn't have"); + FAILED(); + puts (" Found set bits when we shouldn't have"); goto failed; } @@ -309,26 +308,26 @@ test_set (void) /* Look for the zeros and ones */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 1); if (size>0 && n!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find first set bit in destination " + FAILED(); + printf (" Unable to find first set bit in destination " "(n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found set bits and shouldn't have!"); + FAILED(); + puts (" Found set bits and shouldn't have!"); goto failed; } n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 0); if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) { - puts ("*FAILED*"); - printf (" Unable to find last set bit in destination " + FAILED(); + printf (" Unable to find last set bit in destination " "(n=%d)\n", (int)n); goto failed; } if (d_offset+size==8*sizeof(v2) && n>=0) { - puts ("*FAILED*"); - puts (" High-order zeros are present and shouldn't be!"); + FAILED(); + puts (" High-order zeros are present and shouldn't be!"); goto failed; } @@ -338,38 +337,38 @@ test_set (void) */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 1); if (size>0 && (size_t)(n+1)!=d_offset+size) { - puts ("*FAILED*"); - printf (" Unable to find last set bit in destination " + FAILED(); + printf (" Unable to find last set bit in destination " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found set bits but shouldn't have (reverse)!"); + FAILED(); + puts (" Found set bits but shouldn't have (reverse)!"); goto failed; } n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 0); if (d_offset>0 && n+1!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find beginning of set bit region " + FAILED(); + printf (" Unable to find beginning of set bit region " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==d_offset && n>=0) { - puts ("*FAILED*"); - puts (" Found leading zeros but shouldn't have!"); + FAILED(); + puts (" Found leading zeros but shouldn't have!"); goto failed; } } - puts (" PASSED"); + PASSED(); return 0; failed: - printf (" i=%d, d_offset=%lu, size=%lu\n", + printf (" i=%d, d_offset=%lu, size=%lu\n", i, (unsigned long)d_offset, (unsigned long)size); - printf (" d = 0x"); + printf (" d = 0x"); for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]); printf ("\n"); return -1; @@ -400,8 +399,7 @@ test_clear (void) intn i, j; ssize_t n; - printf ("%-70s", "Testing bit clear operations"); - fflush (stdout); + TESTING("bit clear operations"); for (i=0; i<NTESTS; i++) { d_offset = rand() % (8*sizeof v2); @@ -413,13 +411,13 @@ test_clear (void) H5T_bit_set (v2, d_offset, size, FALSE); for (j=0; j<(intn)sizeof(v2); j++) if (0xff!=v2[j]) break; if (size>0 && j>=(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Unabled to find cleared region in buffer"); + FAILED(); + puts (" Unabled to find cleared region in buffer"); goto failed; } if (0==size && j<(intn)sizeof(v2)) { - puts ("*FAILED*"); - puts (" Found cleared bits when we shouldn't have"); + FAILED(); + puts (" Found cleared bits when we shouldn't have"); goto failed; } @@ -427,26 +425,26 @@ test_clear (void) /* Look for the zeros and ones */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 0); if (size>0 && n!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find first cleared bit in destination " + FAILED(); + printf (" Unable to find first cleared bit in destination " "(n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found cleared bits and shouldn't have!"); + FAILED(); + puts (" Found cleared bits and shouldn't have!"); goto failed; } n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 1); if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) { - puts ("*FAILED*"); - printf (" Unable to find last cleared bit in destination " + FAILED(); + printf (" Unable to find last cleared bit in destination " "(n=%d)\n", (int)n); goto failed; } if (d_offset+size==8*sizeof(v2) && n>=0) { - puts ("*FAILED*"); - puts (" High-order ones are present and shouldn't be!"); + FAILED(); + puts (" High-order ones are present and shouldn't be!"); goto failed; } @@ -456,38 +454,38 @@ test_clear (void) */ n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 0); if (size>0 && (size_t)(n+1)!=d_offset+size) { - puts ("*FAILED*"); - printf (" Unable to find last cleared bit in destination " + FAILED(); + printf (" Unable to find last cleared bit in destination " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==size && n>=0) { - puts ("*FAILED*"); - puts (" Found cleared bits but shouldn't have (reverse)!"); + FAILED(); + puts (" Found cleared bits but shouldn't have (reverse)!"); goto failed; } n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 1); if (d_offset>0 && n+1!=(ssize_t)d_offset) { - puts ("*FAILED*"); - printf (" Unable to find beginning of cleared bit region " + FAILED(); + printf (" Unable to find beginning of cleared bit region " "(reverse, n=%d)\n", (int)n); goto failed; } if (0==d_offset && n>=0) { - puts ("*FAILED*"); - puts (" Found leading ones but shouldn't have!"); + FAILED(); + puts (" Found leading ones but shouldn't have!"); goto failed; } } - puts (" PASSED"); + PASSED(); return 0; failed: - printf (" i=%d, d_offset=%lu, size=%lu\n", + printf (" i=%d, d_offset=%lu, size=%lu\n", i, (unsigned long)d_offset, (unsigned long)size); - printf (" d = 0x"); + printf (" d = 0x"); for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]); printf ("\n"); return -1; diff --git a/test/chunk.c b/test/chunk.c index d847db3..e119b0c 100644 --- a/test/chunk.c +++ b/test/chunk.c @@ -289,7 +289,7 @@ test_diag (int op, hsize_t cache_size, hsize_t io_size, hsize_t offset) * Win32 version 5.0 compiler. * 1998-11-06 ptl */ - return (double)((hssize_t)(nio/nio_g)); + return (double)(hssize_t)nio/(hssize_t)nio_g; } diff --git a/test/cmpd_dset.c b/test/cmpd_dset.c index f50966a..f3ccf39 100644 --- a/test/cmpd_dset.c +++ b/test/cmpd_dset.c @@ -8,24 +8,12 @@ /* See H5private.h for how to include headers */ #undef NDEBUG -#include <hdf5.h> +#include <h5test.h> -#ifdef STDC_HEADERS -# include <assert.h> -# include <stdio.h> -# include <stdlib.h> -# include <string.h> -#endif - -#ifndef HAVE_ATTRIBUTE -# undef __attribute__ -# define __attribute__(X) /*void*/ -# define __unused__ /*void*/ -#else -# define __unused__ __attribute__((unused)) -#endif - -#define TEST_FILE_NAME "cmpd_dset.h5" +const char *FILENAME[] = { + "cmpd_dset", + NULL +}; /* The first dataset */ typedef struct s1_t { @@ -76,54 +64,6 @@ typedef struct s5_t { # define NY 9u #endif - -/*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(TEST_FILE_NAME); - } -} - - -/*------------------------------------------------------------------------- - * Function: display_error_cb - * - * Purpose: Displays the error stack after printing "*FAILED*". - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Robb Matzke - * Wednesday, March 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -display_error_cb (void __unused__ *client_data) -{ - puts ("*FAILED*"); - H5Eprint (stdout); - return 0; -} - /*------------------------------------------------------------------------- * Function: main @@ -186,18 +126,20 @@ main (void) /* Other variables */ unsigned int i, j; - hid_t file, dataset, space, PRESERVE; + hid_t file, dataset, space, PRESERVE, fapl; static hsize_t dim[] = {NX, NY}; hssize_t f_offset[2]; /*offset of hyperslab in file */ hsize_t h_size[2]; /*size of hyperslab */ size_t memb_size[1] = {4}; + char filename[256]; - /* Set up error handling */ - H5Eset_auto(display_error_cb, NULL); + h5_reset(); /* Create the file */ - if ((file = H5Fcreate (TEST_FILE_NAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, H5P_DEFAULT))<0) goto error; + fapl = h5_fileaccess(); + h5_fixname(FILENAME[0], fapl, filename, sizeof(filename)); + if ((file = H5Fcreate (filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; /* Create the data space */ if ((space = H5Screate_simple (2, dim, NULL))<0) goto error; @@ -210,8 +152,7 @@ main (void) *###################################################################### * STEP 1: Save the original dataset natively. */ - printf("%-70s", "Testing basic compound write"); - fflush(stdout); + TESTING("basic compound write"); /* Initialize the dataset */ for (i=0; i<NX*NY; i++) { @@ -245,7 +186,7 @@ main (void) if (H5Dwrite (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) { goto error; } - puts(" PASSED"); + PASSED(); /* *###################################################################### @@ -253,8 +194,7 @@ main (void) * it's the same as the first just to test things better, but * in fact, we could have used s1_tid. */ - printf("%-70s", "Testing basic compound read"); - fflush(stdout); + TESTING("basic compound read"); /* Create a data type for s2 */ if ((s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t)))<0) goto error; @@ -282,12 +222,12 @@ main (void) s1[i].c[3]!=s2[i].c[3] || s1[i].d!=s2[i].d || s1[i].e!=s2[i].e) { - puts("*FAILED*"); - puts(" Incorrect values read from the file"); + FAILED(); + puts(" Incorrect values read from the file"); goto error; } } - puts(" PASSED"); + PASSED(); /* *###################################################################### @@ -295,8 +235,7 @@ main (void) * has the same data space but the data type is different: the * data type is a struct whose members are in the opposite order. */ - printf("%-70s", "Testing reversal of struct members"); - fflush (stdout); + TESTING("reversal of struct members"); /* Create a data type for s3 */ if ((s3_tid = H5Tcreate (H5T_COMPOUND, sizeof(s3_t)))<0) goto error; @@ -324,20 +263,19 @@ main (void) s1[i].c[3]!=s3[i].c[3] || s1[i].d!=s3[i].d || s1[i].e!=s3[i].e) { - puts("*FAILED*"); - puts(" Incorrect values read from the file"); + FAILED(); + puts(" Incorrect values read from the file"); goto error; } } - puts(" PASSED"); + PASSED(); /* *###################################################################### * STEP 4: Read a subset of the members. Of the <a,b,c,d,e> members * stored on disk we'll read <b,d>. */ - printf("%-70s", "Testing subset struct read"); - fflush (stdout); + TESTING("subset struct read"); /* Create a datatype for s4 */ if ((s4_tid = H5Tcreate (H5T_COMPOUND, sizeof(s4_t)))<0) goto error; @@ -353,20 +291,19 @@ main (void) for (i=0; i<NX*NY; i++) { if (s1[i].b!=s4[i].b || s1[i].d!=s4[i].d) { - puts("*FAILED*"); - puts(" Incorrect values read from the file"); + FAILED(); + puts(" Incorrect values read from the file"); goto error; } } - puts(" PASSED"); + PASSED(); /* *###################################################################### * STEP 5: Read all the members into a struct which has other members * which have already been initialized. */ - printf("%-70s", "Testing partially initialized superset read"); - fflush(stdout); + TESTING("partially initialized superset read"); /* Initialize some members */ for (i=0; i<NX*NY; i++) { @@ -402,8 +339,8 @@ main (void) s1[i].c[3]!=s5[i].c[3] || s1[i].d!=s5[i].d || s1[i].e!=s5[i].e) { - puts("*FAILED*"); - puts(" Incorrect values read from the file"); + FAILED(); + puts(" Incorrect values read from the file"); goto error; } } @@ -414,12 +351,12 @@ main (void) s5[i].mid1 != 1001+4*i || s5[i].mid2 != 1002+4*i || s5[i].post != 1003+4*i) { - puts("*FAILED*"); - puts(" Memory values were clobbered"); + FAILED(); + puts(" Memory values were clobbered"); goto error; } } - puts(" PASSED"); + PASSED(); /* *###################################################################### @@ -427,8 +364,7 @@ main (void) * fields unchanged. This tests member alignment and background * buffers. */ - printf("%-70s", "Testing partially initialized superset write"); - fflush (stdout); + TESTING("partially initialized superset write"); /* Initialize `s4' with new values */ for (i=0; i<NX*NY; i++) { @@ -456,12 +392,17 @@ main (void) s1[i].c[3] != 8*i+5 || s1[i].d != 8*i+6 || s1[i].e != 8*i+7) { - puts("*FAILED*"); - puts(" File values were clobbered"); + FAILED(); + printf(" i==%u, row=%u, col=%u\n", i, i/NY, i%NY); + printf(" got: {%7d,%7d,[%7d,%7d,%7d,%7d],%7d,%7d}\n", + s1[i].a, s1[i].b, s1[i].c[0], s1[i].c[1], s1[i].c[2], + s1[i].c[3], s1[i].d, s1[i].e); + printf(" ans: {%7d,%7d,[%7d,%7d,%7d,%7d],%7d,%7d}\n", + 8*i+0, 8*i+1, 8*i+2, 8*i+3, 8*i+4, 8*i+5, 8*i+6, 8*i+7); goto error; } } - puts(" PASSED"); + PASSED(); /* *###################################################################### @@ -469,8 +410,7 @@ main (void) * though these data spaces are equal it tests a different part of the * library. */ - printf("%-70s", "Testing explicit data space"); - fflush (stdout); + TESTING("explicit data space"); /* Create the data space */ if ((s7_sid = H5Screate_simple (2, dim, NULL))<0) goto error; @@ -490,12 +430,12 @@ main (void) s2[i].c[3] != s1[i].c[3] || s2[i].d != s1[i].d || s2[i].e != s1[i].e) { - puts("*FAILED*"); - puts(" Incorrect values read from file"); + FAILED(); + puts(" Incorrect values read from file"); goto error; } } - puts(" PASSED"); + PASSED(); /* @@ -503,8 +443,7 @@ main (void) * STEP 8. Read a hyperslab of the file into a complete array in memory. * The hyperslab is the middle third of the array. */ - printf("%-70s", "Testing hyperslab partial read to array"); - fflush (stdout); + TESTING("hyperslab partial read to array"); /* Create the file data space */ if ((s8_f_sid = H5Dget_space (dataset))<0) goto error; @@ -539,8 +478,8 @@ main (void) ps8->c[3] != ps1->c[3] || ps8->d != ps1->d || ps8->e != ps1->e) { - puts("*FAILED*"); - puts(" Incorrect values read from file"); + FAILED(); + puts(" Incorrect values read from file"); goto error; } } @@ -548,7 +487,7 @@ main (void) free (s8); s8 = NULL; - puts(" PASSED"); + PASSED(); /* @@ -556,8 +495,7 @@ main (void) * STEP 9. Read a hyperslab of the file into a hyperslab of memory. The * part of memory not read is already initialized and must not change. */ - printf("%-70s", "Testing hyperslab partial read to another hyperslab"); - fflush (stdout); + TESTING("hyperslab partial read to another hyperslab"); /* Initialize */ for (i=0; i<NX*NY; i++) { @@ -587,8 +525,8 @@ main (void) ps2->c[3] != ps1->c[3] || ps2->d != ps1->d || ps2->e != ps1->e) { - puts("*FAILED*"); - puts(" Memory values clobbered"); + FAILED(); + puts(" Memory values clobbered"); goto error; } } else { @@ -600,22 +538,21 @@ main (void) ps2->c[3] != (unsigned)(-1) || ps2->d != (unsigned)(-1) || ps2->e != (unsigned)(-1)) { - puts("*FAILED*"); - puts(" Incorrect values read from file"); + FAILED(); + puts(" Incorrect values read from file"); goto error; } } } } - puts(" PASSED"); + PASSED(); /* *###################################################################### * STEP 10. Same as step 9 except the memory array contains some members * which are already initialized, like step 5. */ - printf("%-70s", "Testing hyperslab to hyperslab part initialized read"); - fflush (stdout); + TESTING("hyperslab to hyperslab part initialized read"); /* Initialize */ for (i=0; i<NX*NY; i++) { @@ -650,8 +587,8 @@ main (void) ps5->d != ps1->d || ps5->e != ps1->e || ps5->post != (unsigned)(-1)) { - puts("*FAILED*"); - puts(" Memory values clobbered"); + FAILED(); + puts(" Memory values clobbered"); goto error; } } else { @@ -667,22 +604,21 @@ main (void) ps5->d != (unsigned)(-1) || ps5->e != (unsigned)(-1) || ps5->post != (unsigned)(-1)) { - puts("*FAILED*"); - puts(" Incorrect values read from file"); + FAILED(); + puts(" Incorrect values read from file"); goto error; } } } } - puts(" PASSED"); + PASSED(); /* *###################################################################### * Step 11: Write an array into the middle third of the dataset * initializeing only members `b' and `d' to -1. */ - printf("%-70s", "Testing hyperslab part initialized write"); - fflush (stdout); + TESTING("hyperslab part initialized write"); /* Create the memory array and initialize all fields to zero */ ndims = 2; @@ -721,8 +657,8 @@ main (void) ps1->c[2] != 8*(i*NY+j)+4 || ps1->c[3] != 8*(i*NY+j)+5 || ps1->e != 8*(i*NY+j)+7) { - puts("*FAILED*"); - puts(" Write clobbered values"); + FAILED(); + puts(" Write clobbered values"); goto error; } @@ -732,21 +668,21 @@ main (void) (hsize_t)j<f_offset[1]+h_size[1]) { if (ps1->b != (unsigned)(-1) || ps1->d != (unsigned)(-1)) { - puts("*FAILED*"); - puts(" Wrong values written or read"); + FAILED(); + puts(" Wrong values written or read"); goto error; } } else { if (ps1->b != 8*(i*NY+j)+1 || ps1->d != 8*(i*NY+j)+6) { - puts("*FAILED*"); - puts(" Write clobbered values"); + FAILED(); + puts(" Write clobbered values"); goto error; } } } } - puts(" PASSED"); + PASSED(); /* @@ -756,12 +692,11 @@ main (void) H5Dclose (dataset); H5Fclose (file); - cleanup(); + h5_cleanup(fapl); puts("All compound dataset tests passed."); return 0; error: - cleanup(); puts("Remaining tests have been skipped."); puts("*** DATASET TESTS FAILED ***"); return 1; diff --git a/test/dsets.c b/test/dsets.c index d7e518b..be2b911 100644 --- a/test/dsets.c +++ b/test/dsets.c @@ -8,40 +8,13 @@ * Purpose: Tests the dataset interface (H5D) */ -/* See H5private.h for how to include files */ -#undef NDEBUG -#include <hdf5.h> - -#ifdef STDC_HEADERS -# include <assert.h> -# include <math.h> -# include <stdio.h> -# include <stdlib.h> -# include <string.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <sys/types.h> -# include <unistd.h> -#endif - -#ifndef HAVE_ATTRIBUTE -# undef __attribute__ -# define __attribute__(X) /*void*/ -# define __unused__ /*void*/ -#else -# define __unused__ __attribute__((unused)) -#endif - -#ifndef HAVE_FUNCTION -# undef __FUNCTION__ -# define __FUNCTION__ "" -#endif +#include <h5test.h> -#define AT() printf (" at %s:%d in %s()...\n", \ - __FILE__, __LINE__, __FUNCTION__); +const char *FILENAME[] = { + "dataset", + NULL +}; -#define TEST_FILE_NAME "dataset.h5" #define DSET_DEFAULT_NAME "default" #define DSET_CHUNKED_NAME "chunked" #define DSET_SIMPLE_IO_NAME "simple_io" @@ -53,31 +26,6 @@ /*------------------------------------------------------------------------- - * Function: display_error_cb - * - * Purpose: Displays the error stack after printing "*FAILED*". - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Robb Matzke - * Wednesday, March 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -display_error_cb (void __unused__ *client_data) -{ - puts ("*FAILED*"); - H5Eprint (stdout); - return 0; -} - - -/*------------------------------------------------------------------------- * Function: test_create * * Purpose: Attempts to create a dataset. @@ -100,11 +48,8 @@ test_create(hid_t file) hsize_t dims[2]; herr_t status; hsize_t csize[2]; - herr_t (*func)(void*) = NULL; - void *client_data = NULL; - printf("%-70s", "Testing create/open/close"); - fflush (stdout); + TESTING("create, open, close"); /* Create the data space */ dims[0] = 256; @@ -132,14 +77,13 @@ test_create(hid_t file) * dataset can only be created once. Temporarily turn off error * reporting. */ - H5Eget_auto (&func, &client_data); - H5Eset_auto (NULL, NULL); - dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space, - H5P_DEFAULT); - H5Eset_auto (func, client_data); + H5E_BEGIN_TRY { + dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space, + H5P_DEFAULT); + } H5E_END_TRY; if (dataset >= 0) { - puts("*FAILED*"); - printf(" Library allowed overwrite of existing dataset.\n"); + FAILED(); + puts(" Library allowed overwrite of existing dataset."); goto error; } @@ -155,13 +99,12 @@ test_create(hid_t file) * cannot be created with this function. Temporarily turn off error * reporting. */ - H5Eget_auto (&func, &client_data); - H5Eset_auto (NULL, NULL); - dataset = H5Dopen(file, "does_not_exist"); - H5Eset_auto (func, client_data); + H5E_BEGIN_TRY { + dataset = H5Dopen(file, "does_not_exist"); + } H5E_END_TRY; if (dataset >= 0) { - puts("*FAILED*"); - printf(" Opened a non-existent dataset.\n"); + FAILED(); + puts(" Opened a non-existent dataset."); goto error; } @@ -186,7 +129,7 @@ test_create(hid_t file) */ if (H5Dclose(dataset) < 0) goto error; - puts(" PASSED"); + PASSED(); return 0; error: @@ -222,8 +165,7 @@ test_simple_io(hid_t file) hsize_t dims[2]; void *tconv_buf = NULL; - printf("%-70s", "Testing simple I/O"); - fflush (stdout); + TESTING("simple I/O"); /* Initialize the dataset */ for (i = n = 0; i < 100; i++) { @@ -235,38 +177,33 @@ test_simple_io(hid_t file) /* Create the data space */ dims[0] = 100; dims[1] = 200; - space = H5Screate_simple(2, dims, NULL); - assert(space>=0); + if ((space = H5Screate_simple(2, dims, NULL))<0) goto error; /* Create a small conversion buffer to test strip mining */ tconv_buf = malloc (1000); xfer = H5Pcreate (H5P_DATASET_XFER); assert (xfer>=0); - status = H5Pset_buffer (xfer, 1000, tconv_buf, NULL); - assert (status>=0); + if ((status = H5Pset_buffer (xfer, 1000, tconv_buf, NULL))<0) goto error; /* Create the dataset */ - dataset = H5Dcreate(file, DSET_SIMPLE_IO_NAME, H5T_NATIVE_INT, space, - H5P_DEFAULT); - assert(dataset >= 0); + if ((dataset = H5Dcreate(file, DSET_SIMPLE_IO_NAME, H5T_NATIVE_INT, space, + H5P_DEFAULT))<0) goto error; /* Write the data to the dataset */ - status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, points); - if (status<0) goto error; + if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, points)<0) + goto error; /* Read the dataset back */ - status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; /* Check that the values read are the same as the values written */ for (i = 0; i < 100; i++) { for (j = 0; j < 200; j++) { if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %d,%d\n", i, j); + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %d,%d\n", i, j); goto error; } } @@ -275,7 +212,7 @@ test_simple_io(hid_t file) H5Pclose (xfer); H5Dclose(dataset); free (tconv_buf); - puts(" PASSED"); + PASSED(); return 0; error: @@ -305,15 +242,13 @@ test_tconv(hid_t file) int i; hsize_t dims[1]; hid_t space, dataset; - herr_t status; out = malloc (4*1000000); assert (out); in = malloc (4*1000000); assert (in); - printf("%-70s", "Testing data type conversion"); - fflush (stdout); + TESTING("data type conversion"); /* Initialize the dataset */ for (i = 0; i < 1000000; i++) { @@ -325,38 +260,40 @@ test_tconv(hid_t file) /* Create the data space */ dims[0] = 1000000; - space = H5Screate_simple (1, dims, NULL); - assert(space >= 0); + if ((space = H5Screate_simple (1, dims, NULL))<0) goto error; /* Create the data set */ - dataset = H5Dcreate(file, DSET_TCONV_NAME, H5T_STD_I32LE, space, - H5P_DEFAULT); - assert(dataset >= 0); + if ((dataset = H5Dcreate(file, DSET_TCONV_NAME, H5T_STD_I32LE, space, + H5P_DEFAULT))<0) goto error; /* Write the data to the dataset */ - status = H5Dwrite(dataset, H5T_STD_I32LE, H5S_ALL, H5S_ALL, - H5P_DEFAULT, out); - assert(status >= 0); + if (H5Dwrite(dataset, H5T_STD_I32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, + out)<0) goto error; /* Read data with byte order conversion */ - status = H5Dread(dataset, H5T_STD_I32BE, H5S_ALL, H5S_ALL, - H5P_DEFAULT, in); - assert(status >= 0); + if (H5Dread(dataset, H5T_STD_I32BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, in)<0) + goto error; /* Check */ for (i = 0; i < 1000000; i++) { - assert(in[4 * i + 0] == out[4 * i + 3]); - assert(in[4 * i + 1] == out[4 * i + 2]); - assert(in[4 * i + 2] == out[4 * i + 1]); - assert(in[4 * i + 3] == out[4 * i + 0]); + if (in[4*i+0]!=out[4*i+3] || + in[4*i+1]!=out[4*i+2] || + in[4*i+2]!=out[4*i+1] || + in[4*i+3]!=out[4*i+0]) { + FAILED(); + puts(" Read with byte order conversion failed."); + goto error; + } } - H5Dclose(dataset); + if (H5Dclose(dataset)<0) goto error; free (out); free (in); - puts(" PASSED"); return 0; + + error: + return -1; } @@ -381,9 +318,6 @@ bogus(unsigned int __unused__ flags, size_t __unused__ cd_nelmts, const unsigned int __unused__ cd_values[], size_t nbytes, size_t __unused__ *buf_size, void __unused__ **buf) { -#if 0 - abort(); -#endif return nbytes; } @@ -408,7 +342,6 @@ static herr_t test_compression(hid_t file) { hid_t dataset, space, xfer, dc; - herr_t status; int points[100][200], check[100][200]; const hsize_t size[2] = {100, 200}; const hsize_t chunk_size[2] = {2, 25}; @@ -418,64 +351,57 @@ test_compression(hid_t file) hsize_t i, j, n; void *tconv_buf = NULL; - printf ("%-70s", "Testing compression (setup)"); - fflush (stderr); + TESTING("compression (setup)"); /* Create the data space */ - space = H5Screate_simple(2, size, NULL); - assert(space>=0); + if ((space = H5Screate_simple(2, size, NULL))<0) goto error; /* * Create a small conversion buffer to test strip mining. We * might as well test all we can! */ - xfer = H5Pcreate (H5P_DATASET_XFER); - assert (xfer>=0); + if ((xfer = H5Pcreate (H5P_DATASET_XFER))<0) goto error; tconv_buf = malloc (1000); - status = H5Pset_buffer (xfer, 1000, tconv_buf, NULL); - assert (status>=0); + if (H5Pset_buffer (xfer, 1000, tconv_buf, NULL)<0) goto error; /* Use chunked storage with compression */ - dc = H5Pcreate (H5P_DATASET_CREATE); - H5Pset_chunk (dc, 2, chunk_size); - H5Pset_deflate (dc, 6); + if ((dc = H5Pcreate (H5P_DATASET_CREATE))<0) goto error; + if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error; + if (H5Pset_deflate (dc, 6)<0) goto error; /* Create the dataset */ - dataset = H5Dcreate(file, DSET_COMPRESS_NAME, H5T_NATIVE_INT, space, dc); - assert(dataset >= 0); - puts (" PASSED"); + if ((dataset = H5Dcreate(file, DSET_COMPRESS_NAME, H5T_NATIVE_INT, space, + dc))<0) goto error; + PASSED(); /*---------------------------------------------------------------------- * STEP 1: Read uninitialized data. It should be zero. *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (uninitialized read)"); - fflush (stdout); + TESTING("compression (uninitialized read)"); - status = H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; for (i=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { if (0!=check[i][j]) { - puts("*FAILED*"); - printf(" Read a non-zero value.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read a non-zero value.\n"); + printf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); goto error; } } } - puts (" PASSED"); + PASSED(); /*---------------------------------------------------------------------- * STEP 2: Test compression by setting up a chunked dataset and writing * to it. *---------------------------------------------------------------------- */ - printf("%-70s", "Testing compression (write)"); - fflush (stdout); + TESTING("compression (write)"); for (i=n=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { @@ -483,36 +409,33 @@ test_compression(hid_t file) } } - status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, points); - if (status<0) goto error; - puts (" PASSED"); + if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, points)<0) + goto error; + PASSED(); /*---------------------------------------------------------------------- * STEP 3: Try to read the data we just wrote. *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (read)"); - fflush (stdout); + TESTING("compression (read)"); /* Read the dataset back */ - status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; /* Check that the values read are the same as the values written */ for (i=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); goto error; } } } - puts (" PASSED"); + PASSED(); /*---------------------------------------------------------------------- * STEP 4: Write new data over the top of the old data. The new data is @@ -521,37 +444,33 @@ test_compression(hid_t file) * dataset although we rewrite the whole thing. *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (modify)"); - fflush (stdout); + TESTING("compression (modify)"); for (i=0; i<size[0]; i++) { for (j=0; j<size[1]/2; j++) { points[i][j] = rand (); } } - status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, points); - if (status<0) goto error; - + if (H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, points)<0) + goto error; /* Read the dataset back and check it */ - status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; /* Check that the values read are the same as the values written */ for (i=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); goto error; } } } - puts (" PASSED"); + PASSED(); /*---------------------------------------------------------------------- * STEP 5: Close the dataset and then open it and read it again. This @@ -559,29 +478,26 @@ test_compression(hid_t file) * object header. *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (re-open)"); - fflush (stdout); + TESTING("compression (re-open)"); - H5Dclose (dataset); - dataset = H5Dopen (file, DSET_COMPRESS_NAME); - status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dclose (dataset)<0) goto error; + if ((dataset = H5Dopen (file, DSET_COMPRESS_NAME))<0) goto error; + if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; /* Check that the values read are the same as the values written */ for (i=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); goto error; } } } - puts (" PASSED"); - + PASSED(); /*---------------------------------------------------------------------- * STEP 6: Test partial I/O by writing to and then reading from a @@ -589,76 +505,72 @@ test_compression(hid_t file) * boundaries (we know that case already works from above tests). *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (partial I/O)"); - fflush (stderr); + TESTING("compression (partial I/O)"); for (i=0; i<hs_size[0]; i++) { for (j=0; j<hs_size[1]; j++) { points[hs_offset[0]+i][hs_offset[1]+j] = rand (); } } - H5Sselect_hyperslab(space, H5S_SELECT_SET, hs_offset, NULL, hs_size, NULL); - - status = H5Dwrite (dataset, H5T_NATIVE_INT, space, space, xfer, points); - if (status<0) goto error; - status = H5Dread (dataset, H5T_NATIVE_INT, space, space, xfer, check); - if (status<0) goto error; + if (H5Sselect_hyperslab(space, H5S_SELECT_SET, hs_offset, NULL, hs_size, + NULL)<0) goto error; + if (H5Dwrite (dataset, H5T_NATIVE_INT, space, space, xfer, points)<0) + goto error; + if (H5Dread (dataset, H5T_NATIVE_INT, space, space, xfer, check)<0) + goto error; /* Check that the values read are the same as the values written */ for (i=0; i<hs_size[0]; i++) { for (j=0; j<hs_size[1]; j++) { if (points[hs_offset[0]+i][hs_offset[1]+j] != check[hs_offset[0]+i][hs_offset[1]+j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %lu,%lu\n", (unsigned long)(hs_offset[0]+i), (unsigned long)(hs_offset[1]+j)); - printf(" At original: %d\n", + printf(" At original: %d\n", (int)points[hs_offset[0]+i][hs_offset[1]+j]); - printf(" At returned: %d\n", + printf(" At returned: %d\n", (int)check[hs_offset[0]+i][hs_offset[1]+j]); goto error; } } } - puts (" PASSED"); + PASSED(); /*---------------------------------------------------------------------- * STEP 7: Register an application-defined compression method and use it * to write and then read the dataset. *---------------------------------------------------------------------- */ - printf ("%-70s", "Testing compression (app-defined method)"); - fflush (stdout); + TESTING("compression (app-defined method)"); if (H5Zregister (H5Z_BOGUS, "bogus", bogus)<0) goto error; if (H5Pset_filter (dc, H5Z_BOGUS, 0, 0, NULL)<0) goto error; if (H5Dclose (dataset)<0) goto error; if (H5Sclose (space)<0) goto error; if ((space = H5Screate_simple (2, size, NULL))<0) goto error; - dataset = H5Dcreate (file, DSET_BOGUS_NAME, H5T_NATIVE_INT, space, dc); - assert (dataset>=0); + if ((dataset=H5Dcreate (file, DSET_BOGUS_NAME, H5T_NATIVE_INT, space, + dc))<0) goto error; - status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, points); - if (status<0) goto error; - status = H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, - xfer, check); - if (status<0) goto error; + if (H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, points)<0) + goto error; + if (H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0) + goto error; for (i=0; i<size[0]; i++) { for (j=0; j<size[1]; j++) { if (points[i][j] != check[i][j]) { - puts("*FAILED*"); - printf(" Read different values than written.\n"); - printf(" At index %lu,%lu\n", + FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %lu,%lu\n", (unsigned long)i, (unsigned long)j); goto error; } } } - puts (" PASSED"); + PASSED(); @@ -666,9 +578,9 @@ test_compression(hid_t file) * Cleanup *---------------------------------------------------------------------- */ - H5Pclose (xfer); - H5Pclose (dc); - H5Dclose(dataset); + if (H5Pclose (xfer)<0) goto error; + if (H5Pclose (dc)<0) goto error; + if (H5Dclose(dataset)<0) goto error; free (tconv_buf); return 0; @@ -704,7 +616,7 @@ test_multiopen (hid_t file) static hsize_t max_size[1] = {H5S_UNLIMITED}; hsize_t tmp_size[1]; - printf ("%-70s", "Testing multi-open with extending"); + TESTING("multi-open with extending"); /* Create the dataset and open it twice */ if ((dcpl=H5Pcreate (H5P_DATASET_CREATE))<0) goto error; @@ -723,8 +635,8 @@ test_multiopen (hid_t file) if ((space = H5Dget_space (dset2))<0) goto error; if (H5Sget_simple_extent_dims (space, tmp_size, NULL)<0) goto error; if (cur_size[0]!=tmp_size[0]) { - puts ("*FAILED*"); - printf (" Got %d instead of %d!\n", + FAILED(); + printf (" Got %d instead of %d!\n", (int)tmp_size[0], (int)cur_size[0]); goto error; } @@ -733,7 +645,7 @@ test_multiopen (hid_t file) if (H5Dclose (dset2)<0) goto error; if (H5Sclose (space)<0) goto error; if (H5Pclose (dcpl)<0) goto error; - puts (" PASSED"); + PASSED(); return 0; error: @@ -748,29 +660,6 @@ test_multiopen (hid_t file) /*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(TEST_FILE_NAME); - } -} - - -/*------------------------------------------------------------------------- * Function: main * * Purpose: Tests the dataset interface (H5D) @@ -790,64 +679,43 @@ int main(void) { hid_t file, grp, fapl; - herr_t status; int nerrors=0, mdc_nelmts; + char filename[1024]; - status = H5open (); - assert (status>=0); - - /* Automatic error reporting to standard output */ - H5Eset_auto (display_error_cb, NULL); - - /* Create the file */ - fapl = H5Pcreate(H5P_FILE_ACCESS); - assert(fapl>=0); - + h5_reset(); + fapl = h5_fileaccess(); + #if 1 /* Turn off raw data cache */ - status = H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL); - assert(status>=0); - status = H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0); - assert(status>=0); + if (H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL)<0) goto error; + if (H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0)<0) goto error; #endif - file = H5Fcreate(TEST_FILE_NAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, fapl); - assert(file >= 0); - H5Pclose(fapl); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate(filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; /* Cause the library to emit initial messages */ - grp = H5Gcreate (file, "emit diagnostics", 0); - H5Gset_comment(grp, ".", "Causes diagnostic messages to be emitted"); - H5Gclose (grp); - - status = test_create(file); - nerrors += status < 0 ? 1 : 0; - - status = test_simple_io(file); - nerrors += status < 0 ? 1 : 0; - - status = test_tconv(file); - nerrors += status < 0 ? 1 : 0; - - status = test_compression(file); - nerrors += status < 0 ? 1 : 0; - - status = test_multiopen (file); - nerrors += status < 0 ? 1 : 0; + if ((grp = H5Gcreate (file, "emit diagnostics", 0))<0) goto error; + if (H5Gset_comment(grp, ".", "Causes diagnostic messages to be emitted")<0) + goto error; + if (H5Gclose (grp)<0) goto error; - status = H5Fclose(file); + nerrors += test_create(file)<0 ?1:0; + nerrors += test_simple_io(file)<0 ?1:0; + nerrors += test_tconv(file)<0 ?1:0; + nerrors += test_compression(file)<0 ?1:0; + nerrors += test_multiopen (file)<0 ?1:0; - if (nerrors) { - printf("***** %d DATASET TEST%s FAILED! *****\n", - nerrors, 1 == nerrors ? "" : "S"); - exit(1); - } + if (H5Fclose(file)<0) goto error; + if (nerrors) goto error; printf("All dataset tests passed.\n"); - - status = H5close (); - assert (status>=0); - - cleanup(); + h5_cleanup(fapl); return 0; + + error: + nerrors = MAX(1, nerrors); + printf("***** %d DATASET TEST%s FAILED! *****\n", + nerrors, 1 == nerrors ? "" : "S"); + return 1; } diff --git a/test/dtypes.c b/test/dtypes.c index 926ecfa..fef773a 100644 --- a/test/dtypes.c +++ b/test/dtypes.c @@ -8,49 +8,17 @@ * Purpose: Tests the data type interface (H5T) */ -/* See H5private.h for how to include headers */ -#undef NDEBUG -#include <hdf5.h> - -#ifdef STDC_HEADERS -# include <assert.h> -# include <float.h> -# include <math.h> -# include <signal.h> -# include <stdio.h> -# include <stdlib.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <sys/types.h> -# include <unistd.h> -#endif -#ifdef _POSIX_VERSION -# include <sys/wait.h> -#endif - -#define H5T_PACKAGE -#include <H5Tpkg.h> /*to turn off hardware conversions*/ - -#ifndef HAVE_ATTRIBUTE -# undef __attribute__ -# define __attribute__(X) /*void*/ -# define __unused__ /*void*/ -#else -# define __unused__ __attribute__((unused)) -#endif +#include <h5test.h> #if SIZEOF_DOUBLE != SIZEOF_LONG_DOUBLE # define USE_LDOUBLE #endif -#ifndef MAX -# define MAX(X,Y) ((X)>(Y)?(X):(Y)) -# define MIN(X,Y) ((X)<(Y)?(X):(Y)) -#endif - -#define FILE_NAME_1 "dtypes1.h5" -#define FILE_NAME_2 "dtypes2.h5" +const char *FILENAME[] = { + "dtypes1", + "dtypes2", + NULL +}; typedef struct complex_t { double re; @@ -79,10 +47,7 @@ static int noverflows_g = 0; /* Skip overflow tests if non-zero */ static int skip_overflow_tests_g = 0; -/* - * If set then all known hardware conversion functions are unregistered when - * the library is reset. - */ +/* Don't use hardware conversions if set */ static int without_hardware_g = 0; /* @@ -116,11 +81,11 @@ void some_dummy_func(float x); static void fpe_handler(int __unused__ signo) { - puts(" -SKIP-"); - puts(" Test skipped due to SIGFPE."); + SKIPPED(); + puts(" Test skipped due to SIGFPE."); #ifndef HANDLE_SIGFPE - puts(" Remaining tests could not be run."); - puts(" Please turn off SIGFPE on overflows and try again."); + puts(" Remaining tests could not be run."); + puts(" Please turn off SIGFPE on overflows and try again."); #endif exit(255); } @@ -234,55 +199,6 @@ generates_sigfpe(void) /*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Removes test files - * - * Return: void - * - * Programmer: Robb Matzke - * Thursday, June 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup (void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove (FILE_NAME_1); - remove (FILE_NAME_2); - } -} - - -/*------------------------------------------------------------------------- - * Function: display_error_cb - * - * Purpose: Displays the error stack after printing "*FAILED*". - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Robb Matzke - * Wednesday, March 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -display_error_cb (void __unused__ *client_data) -{ - puts ("*FAILED*"); - H5Eprint (stdout); - return 0; -} - - -/*------------------------------------------------------------------------- * Function: reset_hdf5 * * Purpose: Reset the hdf5 library. This causes statistics to be printed @@ -300,80 +216,9 @@ display_error_cb (void __unused__ *client_data) static void reset_hdf5(void) { - fflush(stdout); - fflush(stderr); - H5close(); - H5Eset_auto (display_error_cb, NULL); + h5_reset(); H5Tset_overflow(overflow_handler); - - if (without_hardware_g) { - H5Tunregister(H5T_conv_char_uchar); - H5Tunregister(H5T_conv_char_short); - H5Tunregister(H5T_conv_char_ushort); - H5Tunregister(H5T_conv_char_int); - H5Tunregister(H5T_conv_char_uint); - H5Tunregister(H5T_conv_char_long); - H5Tunregister(H5T_conv_char_ulong); - - H5Tunregister(H5T_conv_uchar_char); - H5Tunregister(H5T_conv_uchar_short); - H5Tunregister(H5T_conv_uchar_ushort); - H5Tunregister(H5T_conv_uchar_int); - H5Tunregister(H5T_conv_uchar_uint); - H5Tunregister(H5T_conv_uchar_long); - H5Tunregister(H5T_conv_uchar_ulong); - - H5Tunregister(H5T_conv_short_char); - H5Tunregister(H5T_conv_short_uchar); - H5Tunregister(H5T_conv_short_ushort); - H5Tunregister(H5T_conv_short_int); - H5Tunregister(H5T_conv_short_uint); - H5Tunregister(H5T_conv_short_long); - H5Tunregister(H5T_conv_short_ulong); - - H5Tunregister(H5T_conv_ushort_char); - H5Tunregister(H5T_conv_ushort_uchar); - H5Tunregister(H5T_conv_ushort_short); - H5Tunregister(H5T_conv_ushort_int); - H5Tunregister(H5T_conv_ushort_uint); - H5Tunregister(H5T_conv_ushort_long); - H5Tunregister(H5T_conv_ushort_ulong); - - H5Tunregister(H5T_conv_int_char); - H5Tunregister(H5T_conv_int_uchar); - H5Tunregister(H5T_conv_int_short); - H5Tunregister(H5T_conv_int_ushort); - H5Tunregister(H5T_conv_int_uint); - H5Tunregister(H5T_conv_int_long); - H5Tunregister(H5T_conv_int_ulong); - - H5Tunregister(H5T_conv_uint_char); - H5Tunregister(H5T_conv_uint_uchar); - H5Tunregister(H5T_conv_uint_short); - H5Tunregister(H5T_conv_uint_ushort); - H5Tunregister(H5T_conv_uint_int); - H5Tunregister(H5T_conv_uint_long); - H5Tunregister(H5T_conv_uint_ulong); - - H5Tunregister(H5T_conv_long_char); - H5Tunregister(H5T_conv_long_uchar); - H5Tunregister(H5T_conv_long_short); - H5Tunregister(H5T_conv_long_ushort); - H5Tunregister(H5T_conv_long_int); - H5Tunregister(H5T_conv_long_uint); - H5Tunregister(H5T_conv_long_ulong); - - H5Tunregister(H5T_conv_ulong_char); - H5Tunregister(H5T_conv_ulong_uchar); - H5Tunregister(H5T_conv_ulong_short); - H5Tunregister(H5T_conv_ulong_ushort); - H5Tunregister(H5T_conv_ulong_int); - H5Tunregister(H5T_conv_ulong_uint); - H5Tunregister(H5T_conv_ulong_long); - - H5Tunregister(H5T_conv_float_double); - H5Tunregister(H5T_conv_double_float); - } + if (without_hardware_g) h5_no_hwconv(); } @@ -398,21 +243,21 @@ test_classes(void) { H5T_class_t tcls; - printf("%-70s", "Testing H5Tget_class()"); + TESTING("H5Tget_class()"); if ((tcls=H5Tget_class(H5T_NATIVE_INT))<0) goto error; if (H5T_INTEGER!=tcls) { - puts("*FAILED*"); - puts(" Invalid type class for H5T_NATIVE_INT"); + FAILED(); + puts(" Invalid type class for H5T_NATIVE_INT"); goto error; } if ((tcls=H5Tget_class(H5T_NATIVE_DOUBLE))<0) goto error; if (H5T_FLOAT!=tcls) { - puts("*FAILED*"); - puts(" Invalid type class for H5T_NATIVE_DOUBLE"); + FAILED(); + puts(" Invalid type class for H5T_NATIVE_DOUBLE"); goto error; } - puts(" PASSED"); + PASSED(); return 0; error: @@ -440,22 +285,24 @@ static herr_t test_copy(void) { hid_t a_copy; + herr_t status; - printf("%-70s", "Testing H5Tcopy()"); + TESTING("H5Tcopy()"); if ((a_copy = H5Tcopy(H5T_NATIVE_SHORT)) < 0) goto error; if (H5Tclose(a_copy) < 0) goto error; /* We should not be able to close a built-in byte */ H5E_BEGIN_TRY { - if (H5Tclose (H5T_NATIVE_CHAR)>=0) { - puts ("*FAILED*"); - puts (" Should not be able to close a predefined type!"); - goto error; - } + status = H5Tclose (H5T_NATIVE_CHAR); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Should not be able to close a predefined type!"); + goto error; + } - puts(" PASSED"); + PASSED(); return 0; error: @@ -485,7 +332,7 @@ test_compound(void) complex_t tmp; hid_t complex_id; - printf("%-70s", "Testing compound data types"); + TESTING("compound data types"); /* Create the empty type */ if ((complex_id = H5Tcreate(H5T_COMPOUND, sizeof tmp))<0) goto error; @@ -497,7 +344,7 @@ test_compound(void) H5T_NATIVE_DOUBLE)<0) goto error; if (H5Tclose (complex_id)<0) goto error; - puts(" PASSED"); + PASSED(); return 0; error: @@ -522,29 +369,37 @@ test_compound(void) *------------------------------------------------------------------------- */ static herr_t -test_transient (void) +test_transient (hid_t fapl) { static hsize_t ds_size[2] = {10, 20}; hid_t file=-1, type=-1, space=-1, dset=-1, t2=-1; + char filename[1024]; + herr_t status; - printf ("%-70s", "Testing transient data types"); - if ((file=H5Fcreate (FILE_NAME_1, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, H5P_DEFAULT))<0) goto error; - space = H5Screate_simple (2, ds_size, ds_size); + TESTING("transient data types"); + + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file=H5Fcreate (filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; + if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error; /* Predefined types cannot be modified or closed */ H5E_BEGIN_TRY { - if (H5Tset_precision (H5T_NATIVE_INT, 256)>=0) { - puts ("*FAILED*"); - puts (" Predefined types should not be modifiable!"); - goto error; - } - if (H5Tclose (H5T_NATIVE_INT)>=0) { - puts ("*FAILED*"); - puts (" Predefined types should not be closable!"); - goto error; - } + status = H5Tset_precision (H5T_NATIVE_INT, 256); + } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Predefined types should not be modifiable!"); + goto error; + } + H5E_BEGIN_TRY { + status = H5Tclose (H5T_NATIVE_INT); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Predefined types should not be closable!"); + goto error; + } /* Copying a predefined type results in a modifiable copy */ if ((type=H5Tcopy (H5T_NATIVE_INT))<0) goto error; @@ -552,29 +407,30 @@ test_transient (void) /* It should not be possible to create an attribute for a transient type */ H5E_BEGIN_TRY { - if (H5Acreate (type, "attr1", H5T_NATIVE_INT, space, H5P_DEFAULT)>=0) { - puts ("*FAILED*"); - puts (" Attributes should not be allowed for transient types!"); - goto error; - } + status = H5Acreate (type, "attr1", H5T_NATIVE_INT, space, H5P_DEFAULT); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Attributes should not be allowed for transient types!"); + goto error; + } /* Create a dataset from a transient data type */ if (H5Tclose (type)<0) goto error; if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error; - if ((dset=H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0) { + if ((dset=H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0) goto error; - } /* The type returned from a dataset should not be modifiable */ if ((t2 = H5Dget_type (dset))<0) goto error; H5E_BEGIN_TRY { - if (H5Tset_precision (t2, 256)>=0) { - puts ("*FAILED*"); - puts (" Dataset data types should not be modifiable!"); - goto error; - } + status = H5Tset_precision (t2, 256); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Dataset data types should not be modifiable!"); + goto error; + } if (H5Tclose (t2)<0) goto error; /* @@ -585,12 +441,13 @@ test_transient (void) if ((dset=H5Dopen (file, "dset1"))<0) goto error; if ((t2 = H5Dget_type (dset))<0) goto error; H5E_BEGIN_TRY { - if (H5Tset_precision (t2, 256)>=0) { - puts ("*FAILED*"); - puts (" Dataset data types should not be modifiable!"); - goto error; - } + status = H5Tset_precision (t2, 256); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Dataset data types should not be modifiable!"); + goto error; + } if (H5Tclose (t2)<0) goto error; /* @@ -606,7 +463,7 @@ test_transient (void) H5Fclose (file); H5Tclose (type); H5Sclose (space); - puts (" PASSED"); + PASSED(); return 0; error: @@ -638,54 +495,60 @@ test_transient (void) *------------------------------------------------------------------------- */ static herr_t -test_named (void) +test_named (hid_t fapl) { hid_t file=-1, type=-1, space=-1, dset=-1, t2=-1, attr1=-1; herr_t status; static hsize_t ds_size[2] = {10, 20}; + char filename[1024]; - printf ("%-70s", "Testing named data types"); - if ((file=H5Fcreate (FILE_NAME_2, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, H5P_DEFAULT))<0) goto error; - space = H5Screate_simple (2, ds_size, ds_size); + TESTING("named data types"); + + h5_fixname(FILENAME[1], fapl, filename, sizeof filename); + if ((file=H5Fcreate (filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; + if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error; /* Predefined types cannot be committed */ H5E_BEGIN_TRY { - if (H5Tcommit (file, "test_named_1 (should not exist)", - H5T_NATIVE_INT)>=0) { - puts ("*FAILED*"); - puts (" Predefined types should not be committable!"); - goto error; - } + status = H5Tcommit (file, "test_named_1 (should not exist)", + H5T_NATIVE_INT); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Predefined types should not be committable!"); + goto error; + } /* Copy a predefined data type and commit the copy */ if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error; if (H5Tcommit (file, "native-int", type)<0) goto error; if ((status=H5Tcommitted (type))<0) goto error; if (0==status) { - puts ("*FAILED*"); - puts (" H5Tcommitted() returned false!"); + FAILED(); + puts (" H5Tcommitted() returned false!"); goto error; } /* We should not be able to modify a type after it has been committed. */ H5E_BEGIN_TRY { - if (H5Tset_precision (type, 256)>=0) { - puts ("*FAILED*"); - puts (" Committed type is not constant!"); - goto error; - } + status = H5Tset_precision (type, 256); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Committed type is not constant!"); + goto error; + } /* We should not be able to re-commit a committed type */ H5E_BEGIN_TRY { - if (H5Tcommit (file, "test_named_2 (should not exist)", type)>=0) { - puts ("*FAILED*"); - puts (" Committed types should not be recommitted!"); - goto error; - } + status = H5Tcommit(file, "test_named_2 (should not exist)", type); } H5E_END_TRY; + if (status>=0) { + FAILED(); + puts (" Committed types should not be recommitted!"); + goto error; + } /* It should be possible to define an attribute for the named type */ if ((attr1=H5Acreate (type, "attr1", H5T_NATIVE_INT, space, @@ -699,8 +562,8 @@ test_named (void) if ((t2 = H5Tcopy (type))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (status) { - puts ("*FAILED*"); - puts (" Copying a named type should result in a transient type!"); + FAILED(); + puts (" Copying a named type should result in a transient type!"); goto error; } if (H5Tset_precision (t2, 256)<0) goto error; @@ -713,8 +576,8 @@ test_named (void) if ((type=H5Topen (file, "native-int"))<0) goto error; if ((status=H5Tcommitted (type))<0) goto error; if (!status) { - puts ("*FAILED*"); - puts (" Opened named types should be named types!"); + FAILED(); + puts (" Opened named types should be named types!"); goto error; } @@ -727,8 +590,8 @@ test_named (void) if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { - puts ("*FAILED*"); - puts (" Dataset type should be a named type!"); + FAILED(); + puts (" Dataset type should be a named type!"); goto error; } @@ -741,8 +604,8 @@ test_named (void) if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { - puts ("*FAILED*"); - puts (" Dataset type should be a named type!"); + FAILED(); + puts (" Dataset type should be a named type!"); goto error; } @@ -762,8 +625,8 @@ test_named (void) if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { - puts ("*FAILED*"); - puts (" Dataset type should be a named type!"); + FAILED(); + puts (" Dataset type should be a named type!"); goto error; } if (H5Tclose (t2)<0) goto error; @@ -781,7 +644,7 @@ test_named (void) if (H5Tclose (type)<0) goto error; if (H5Sclose (space)<0) goto error; if (H5Fclose (file)<0) goto error; - puts (" PASSED"); + PASSED(); return 0; error: @@ -846,8 +709,7 @@ test_conv_str_1(void) char *buf=NULL; hid_t src_type, dst_type; - printf("%-70s", "Testing string conversions"); - fflush(stdout); + TESTING("string conversions"); /* * Convert a null-terminated string to a shorter and longer null @@ -859,19 +721,19 @@ test_conv_str_1(void) memcpy(buf, "abcdefghi\0abcdefghi\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd\0abcd\0abcdefghi\0", 20)) { - puts("*FAILED*"); - puts(" Truncated C-string test failed"); + FAILED(); + puts(" Truncated C-string test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd\0\0\0\0\0\0abcd\0\0\0\0\0\0", 20)) { - puts("*FAILED*"); - puts(" Extended C-string test failed"); + FAILED(); + puts(" Extended C-string test failed"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; /* * Convert a null padded string to a shorter and then longer string. @@ -882,19 +744,19 @@ test_conv_str_1(void) memcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdeabcdeabcdefghij", 20)) { - puts("*FAILED*"); - puts(" Truncated C buffer test failed"); + FAILED(); + puts(" Truncated C buffer test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { - puts("*FAILED*"); - puts(" Extended C buffer test failed"); + FAILED(); + puts(" Extended C buffer test failed"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; /* * Convert a space-padded string to a shorter and then longer string. @@ -905,19 +767,19 @@ test_conv_str_1(void) memcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdeabcdeabcdefghij", 20)) { - puts("*FAILED*"); - puts(" Truncated Fortran-string test failed"); + FAILED(); + puts(" Truncated Fortran-string test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcde abcde ", 20)) { - puts("*FAILED*"); - puts(" Extended Fortran-string test failed"); + FAILED(); + puts(" Extended Fortran-string test failed"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; /* * What happens if a null-terminated string is not null terminated? If @@ -931,8 +793,8 @@ test_conv_str_1(void) memcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdefghijabcdefghij", 20)) { - puts("*FAILED*"); - puts(" Non-terminated string test 1"); + FAILED(); + puts(" Non-terminated string test 1"); goto error; } H5Tclose(dst_type); @@ -940,20 +802,20 @@ test_conv_str_1(void) memcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd\0abcd\0abcdefghij", 20)) { - puts("*FAILED*"); - puts(" Non-terminated string test 2"); + FAILED(); + puts(" Non-terminated string test 2"); goto error; } memcpy(buf, "abcdeabcdexxxxxxxxxx", 20); if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { - puts("*FAILED*"); - puts(" Non-terminated string test 2"); + FAILED(); + puts(" Non-terminated string test 2"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; /* * Test C string to Fortran and vice versa. @@ -964,51 +826,51 @@ test_conv_str_1(void) memcpy(buf, "abcdefghi\0abcdefghi\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdefghi abcdefghi ", 20)) { - puts("*FAILED*"); - puts(" C string to Fortran test 1"); + FAILED(); + puts(" C string to Fortran test 1"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdefghi\0abcdefghi\0", 20)) { - puts("*FAILED*"); - puts(" Fortran to C string test 1"); + FAILED(); + puts(" Fortran to C string test 1"); goto error; } - H5Tclose(dst_type); + if (H5Tclose(dst_type)<0) goto error; dst_type = mkstr(5, H5T_STR_SPACEPAD); memcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) { - puts("*FAILED*"); - puts(" C string to Fortran test 2"); + FAILED(); + puts(" C string to Fortran test 2"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { - puts("*FAILED*"); - puts(" Fortran to C string test 2"); + FAILED(); + puts(" Fortran to C string test 2"); goto error; } - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; src_type = mkstr(5, H5T_STR_NULLTERM); dst_type = mkstr(10, H5T_STR_SPACEPAD); memcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd abcd ", 20)) { - puts("*FAILED*"); - puts(" C string to Fortran test 3"); + FAILED(); + puts(" C string to Fortran test 3"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd\0abcd\0abcd ", 20)) { - puts("*FAILED*"); - puts(" Fortran to C string test 3"); + FAILED(); + puts(" Fortran to C string test 3"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; /* * Test C buffer to Fortran and vice versa. @@ -1019,53 +881,53 @@ test_conv_str_1(void) memcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdefghijabcdefghij", 20)) { - puts("*FAILED*"); - puts(" C buffer to Fortran test 1"); + FAILED(); + puts(" C buffer to Fortran test 1"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdefghijabcdefghij", 20)) { - puts("*FAILED*"); - puts(" Fortran to C buffer test 1"); + FAILED(); + puts(" Fortran to C buffer test 1"); goto error; } - H5Tclose(dst_type); + if (H5Tclose(dst_type)<0) goto error; dst_type = mkstr(5, H5T_STR_SPACEPAD); memcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) { - puts("*FAILED*"); - puts(" C buffer to Fortran test 2"); + FAILED(); + puts(" C buffer to Fortran test 2"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { - puts("*FAILED*"); - puts(" Fortran to C buffer test 2"); + FAILED(); + puts(" Fortran to C buffer test 2"); goto error; } - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; src_type = mkstr(5, H5T_STR_NULLPAD); dst_type = mkstr(10, H5T_STR_SPACEPAD); memcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd abcd ", 20)) { - puts("*FAILED*"); - puts(" C buffer to Fortran test 3"); + FAILED(); + puts(" C buffer to Fortran test 3"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL)<0) goto error; if (memcmp(buf, "abcd\0abcd\0abcd ", 20)) { - puts("*FAILED*"); - puts(" Fortran to C buffer test 3"); + FAILED(); + puts(" Fortran to C buffer test 3"); goto error; } free(buf); - H5Tclose(src_type); - H5Tclose(dst_type); + if (H5Tclose(src_type)<0) goto error; + if (H5Tclose(dst_type)<0) goto error; - puts(" PASSED"); + PASSED(); reset_hdf5(); return 0; @@ -1120,10 +982,9 @@ test_conv_str_2(void) (int)(i+1), (int)ntests); printf("%-70s", s); fflush(stdout); - if (H5Tconvert(c_type, f_type, nelmts, buf, NULL)<0) goto error; if (H5Tconvert(f_type, c_type, nelmts, buf, NULL)<0) goto error; - puts(" PASSED"); + PASSED(); } ret_value = 0; @@ -1155,19 +1016,13 @@ test_conv_str_2(void) static herr_t test_conv_int (void) { - const size_t ntests=100; - const size_t nelmts=2000; - - size_t i, j; - void *buf=NULL, *saved=NULL; unsigned char byte[4]; /*--------------------------------------------------------------------- * Test some specific overflow/underflow cases. *--------------------------------------------------------------------- */ - printf ("%-70s", "Testing integer overflow conversions"); - fflush (stdout); + TESTING("integer overflow conversions"); /* (unsigned)0x80000000 -> (unsigned)0xffff */ byte[0] = byte[1] = byte[2] = 0; @@ -1176,10 +1031,10 @@ test_conv_int (void) goto error; } if (byte[0]!=0xff || byte[1]!=0xff) { - puts ("*FAILED*"); - printf(" src: 0x80000000 unsigned\n"); - printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); - printf(" ans: 0xffff unsigned\n"); + FAILED(); + printf(" src: 0x80000000 unsigned\n"); + printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); + printf(" ans: 0xffff unsigned\n"); goto error; } @@ -1189,10 +1044,10 @@ test_conv_int (void) goto error; } if (byte[0]!=0xff || byte[1]!=0x7f) { - puts ("*FAILED*"); - printf(" src: 0xffffffff unsigned\n"); - printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); - printf(" ans: 0x7fff signed\n"); + FAILED(); + printf(" src: 0xffffffff unsigned\n"); + printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); + printf(" ans: 0x7fff signed\n"); goto error; } @@ -1202,10 +1057,10 @@ test_conv_int (void) goto error; } if (byte[0]!=0x00 || byte[1]!=0x00) { - puts ("*FAILED*"); - printf(" src: 0xffffffff signed\n"); - printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); - printf(" ans: 0x0000 unsigned\n"); + FAILED(); + printf(" src: 0xffffffff signed\n"); + printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); + printf(" ans: 0x0000 unsigned\n"); goto error; } @@ -1216,10 +1071,10 @@ test_conv_int (void) goto error; } if (byte[0]!=0xff || byte[1]!=0xff) { - puts ("*FAILED*"); - printf(" src: 0x7fffffff signed\n"); - printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); - printf(" ans: 0xffff unsigned\n"); + FAILED(); + printf(" src: 0x7fffffff signed\n"); + printf(" dst: 0x%02x%02x unsigned\n", byte[1], byte[0]); + printf(" ans: 0xffff unsigned\n"); goto error; } @@ -1230,10 +1085,10 @@ test_conv_int (void) goto error; } if (byte[0]!=0xff || byte[1]!=0x7f) { - puts ("*FAILED*"); - printf(" src: 0x7fffffff signed\n"); - printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); - printf(" ans: 0x7fff signed\n"); + FAILED(); + printf(" src: 0x7fffffff signed\n"); + printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); + printf(" ans: 0x7fff signed\n"); goto error; } @@ -1244,60 +1099,18 @@ test_conv_int (void) goto error; } if (byte[0]!=0x00 || byte[1]!=0x80) { - puts ("*FAILED*"); - printf(" src: 0xbfffffff signed\n"); - printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); - printf(" ans: 0x8000 signed\n"); + FAILED(); + printf(" src: 0xbfffffff signed\n"); + printf(" dst: 0x%02x%02x signed\n", byte[1], byte[0]); + printf(" ans: 0x8000 signed\n"); goto error; } - puts (" PASSED"); - - - /*----------------------------------------------------------------------- - * Test random cases. - *----------------------------------------------------------------------- - */ - printf ("%-70s", "Testing random integer conversions"); - fflush (stdout); - - /* Allocate buffers */ - buf = malloc (nelmts*8); - saved = malloc (nelmts*8); - - for (i=0; i<ntests; i++) { - - /* Start with NATIVE_INT */ - for (j=0; j<nelmts; j++) ((int*)buf)[j] = rand(); - memcpy (saved, buf, nelmts*sizeof(int)); - - /* Convert there and back */ - if (H5Tconvert (H5T_NATIVE_INT, H5T_STD_I64LE, nelmts, buf, - NULL)<0) goto error; - if (H5Tconvert (H5T_STD_I64LE, H5T_NATIVE_INT, nelmts, buf, - NULL)<0) goto error; - - /* Check results */ - for (j=0; j<nelmts; j++) { - if (((int*)buf)[j]!=((int*)saved)[j]) { - puts ("*FAILED*"); - printf (" Test %lu, elmt %lu, got %d instead of %d\n", - (unsigned long)i, (unsigned long)j, - ((int*)buf)[j], ((int*)saved)[j]); - goto error; - } - } - } - - puts (" PASSED"); - free (buf); - free (saved); + PASSED(); reset_hdf5(); return 0; error: - if (buf) free (buf); - if (saved) free (saved); reset_hdf5(); return -1; } @@ -1421,8 +1234,8 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) sprintf(str, "Testing random %s %s -> %s conversions", name, src_type_name, dst_type_name); printf("%-70s", str); - puts("*FAILED*"); - puts(" Unknown data type."); + FAILED(); + puts(" Unknown data type."); goto error; } @@ -1817,10 +1630,10 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) } /* Print errors */ - if (0==fails_this_test++) puts("*FAILED*"); - printf(" test %u elmt %u\n", (unsigned)i+1, (unsigned)j); + if (0==fails_this_test++) FAILED(); + printf(" test %u elmt %u\n", (unsigned)i+1, (unsigned)j); - printf(" src = "); + printf(" src = "); for (k=0; k<src_size; k++) { printf(" %02x", saved[j*src_size+ENDIAN(src_size, k)]); } @@ -1854,7 +1667,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) break; } - printf(" dst = "); + printf(" dst = "); for (k=0; k<dst_size; k++) { printf(" %02x", buf[j*dst_size+ENDIAN(dst_size, k)]); } @@ -1888,7 +1701,7 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) break; } - printf(" ans = "); + printf(" ans = "); for (k=0; k<dst_size; k++) { printf(" %02x", hw[ENDIAN(dst_size, k)]); } @@ -1923,14 +1736,14 @@ test_conv_int_1(const char *name, hid_t src, hid_t dst) } if (++fails_all_tests>=max_fails) { - puts(" maximum failures reached, aborting test..."); + puts(" maximum failures reached, aborting test..."); goto done; } } - puts(" PASSED"); + PASSED(); } if (noverflows_g>0) { - printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); + printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); } done: @@ -2135,9 +1948,9 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) if (FLT_OTHER==src_type || FLT_OTHER==dst_type) { sprintf(str, "Testing random %s %s -> %s conversions", name, src_type_name, dst_type_name); - printf ("%-70s", str); - puts("*FAILED*"); - puts(" Unknown data type."); + printf("%-70s", str); + FAILED(); + puts(" Unknown data type."); goto error; } @@ -2157,7 +1970,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) */ sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)", name, src_type_name, dst_type_name, (int)i+1, (int)ntests); - printf ("%-70s", str); + printf("%-70s", str); fflush(stdout); fails_this_test = 0; @@ -2321,10 +2134,10 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } #endif - if (0==fails_this_test++) puts("*FAILED*"); - printf(" test %u, elmt %u\n", (unsigned)i+1, (unsigned)j); + if (0==fails_this_test++) FAILED(); + printf(" test %u, elmt %u\n", (unsigned)i+1, (unsigned)j); - printf(" src ="); + printf(" src ="); for (k=0; k<src_size; k++) { printf(" %02x", saved[j*src_size+ENDIAN(src_size,k)]); } @@ -2339,7 +2152,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) #endif } - printf(" dst ="); + printf(" dst ="); for (k=0; k<dst_size; k++) { printf(" %02x", buf[j*dst_size+ENDIAN(dst_size,k)]); } @@ -2354,7 +2167,7 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) #endif } - printf(" ans ="); + printf(" ans ="); for (k=0; k<dst_size; k++) { printf(" %02x", hw[ENDIAN(dst_size,k)]); } @@ -2370,14 +2183,14 @@ test_conv_flt_1 (const char *name, hid_t src, hid_t dst) } if (++fails_all_tests>=max_fails) { - puts(" maximum failures reached, aborting test..."); + puts(" maximum failures reached, aborting test..."); goto done; } } - puts(" PASSED"); + PASSED(); } if (noverflows_g>0) { - printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); + printf(" %d overflow%s\n", noverflows_g, 1==noverflows_g?"":"s"); } done: @@ -2424,15 +2237,17 @@ int main(void) { unsigned long nerrors = 0; + hid_t fapl=-1; reset_hdf5(); + fapl = h5_fileaccess(); /* Do the tests */ nerrors += test_classes()<0 ? 1 : 0; nerrors += test_copy()<0 ? 1 : 0; nerrors += test_compound()<0 ? 1 : 0; - nerrors += test_transient ()<0 ? 1 : 0; - nerrors += test_named ()<0 ? 1 : 0; + nerrors += test_transient (fapl)<0 ? 1 : 0; + nerrors += test_named (fapl)<0 ? 1 : 0; reset_hdf5(); nerrors += test_conv_str_1()<0 ? 1 : 0; @@ -2635,6 +2450,6 @@ main(void) exit(1); } printf("All data type tests passed.\n"); - cleanup (); + h5_cleanup (fapl); return 0; } diff --git a/test/extend.c b/test/extend.c index a13d606..42348bc 100644 --- a/test/extend.c +++ b/test/extend.c @@ -8,44 +8,18 @@ * Purpose: Tests extendible datasets. */ -/* See H5private.h for how to include headers */ -#undef NDEBUG -#include <hdf5.h> +#include <h5test.h> -#ifdef STDC_HEADERS -# include <assert.h> -# include <stdlib.h> -#endif +const char *FILENAME[] = { + "extend", + NULL +}; -#define TEST_FILE_NAME "extend.h5" #define NX 100 /* USE AN EVEN NUMBER!*/ #define NY 100 /* USE AN EVEN NUMBER!*/ /*------------------------------------------------------------------------- - * Function: cleanup - * - * Purpose: Cleanup temporary test files - * - * Return: none - * - * Programmer: Albert Cheng - * May 28, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static void -cleanup(void) -{ - if (!getenv ("HDF5_NOCLEANUP")) { - remove(TEST_FILE_NAME); - } -} - - -/*------------------------------------------------------------------------- * Function: main * * Purpose: Tests extendible datasets @@ -65,6 +39,7 @@ int main (void) { hid_t file, dataset, mem_space, file_space, cparms; + hid_t fapl; herr_t status; int i, j, k, m; static int buf1[NY][NX], buf2[NX/2][NY/2]; @@ -74,6 +49,11 @@ main (void) static hsize_t maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED}; static hsize_t size[2]; hssize_t offset[2]; + char filename[1024]; + + TESTING("dataset extend"); + h5_reset(); + fapl = h5_fileaccess(); /* Initialize buffer and space */ for (i=0; i<NX; i++) { @@ -81,22 +61,19 @@ main (void) buf1[i][j] = i*NY+j; } } - mem_space = H5Screate_simple (2, dims, maxdims); - assert (mem_space>=0); + if ((mem_space = H5Screate_simple (2, dims, maxdims))<0) goto error; /* Create the file */ - file = H5Fcreate (TEST_FILE_NAME, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, H5P_DEFAULT); - assert (file>=0); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file = H5Fcreate (filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; /* Create the dataset which is originally NX by NY */ - cparms = H5Pcreate (H5P_DATASET_CREATE); - assert (cparms>=0); - status = H5Pset_chunk (cparms, 2, chunk_dims); - assert (status>=0); - dataset = H5Dcreate (file, "dataset", H5T_NATIVE_INT, mem_space, cparms); - assert (dataset>=0); - H5Pclose (cparms); + if ((cparms = H5Pcreate (H5P_DATASET_CREATE))<0) goto error; + if (H5Pset_chunk (cparms, 2, chunk_dims)<0) goto error; + if ((dataset = H5Dcreate (file, "dataset", H5T_NATIVE_INT, mem_space, + cparms))<0) goto error; + if (H5Pclose (cparms)<0) goto error; /* Write the data */ for (i=0; i<5; i++) { @@ -107,57 +84,60 @@ main (void) offset[1] = j * NY; size[0] = offset[0] + NX; size[1] = offset[1] + NY; - status = H5Dextend (dataset, size); - assert (status>=0); + if (H5Dextend (dataset, size)<0) goto error; /* Select a hyperslab */ - file_space = H5Dget_space (dataset); - assert (file_space>=0); - status = H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset, NULL, dims, NULL); - assert (status>=0); + if ((file_space = H5Dget_space (dataset))<0) goto error; + if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset, + NULL, dims, NULL)<0) goto error; /* Write to the hyperslab */ - status = H5Dwrite (dataset, H5T_NATIVE_INT, mem_space, file_space, - H5P_DEFAULT, buf1); - assert (status>=0); - H5Sclose (file_space); + if (H5Dwrite (dataset, H5T_NATIVE_INT, mem_space, file_space, + H5P_DEFAULT, buf1)<0) goto error; + if (H5Sclose (file_space)<0) goto error; } } - H5Sclose (mem_space); - + if (H5Sclose (mem_space)<0) goto error; /* Read the data */ - mem_space = H5Screate_simple (2, half_dims, NULL); - file_space = H5Dget_space (dataset); + if ((mem_space = H5Screate_simple (2, half_dims, NULL))<0) goto error; + if ((file_space = H5Dget_space (dataset))<0) goto error; for (i=0; i<10; i++) { for (j=0; j<10; j++) { /* Select a hyperslab */ offset[0] = i * NX/2; offset[1] = j * NY/2; - assert (file_space>=0); - status = H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset, NULL, half_dims, NULL); - assert (status>=0); + if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset, + NULL, half_dims, NULL)<0) goto error; /* Read */ - status = H5Dread (dataset, H5T_NATIVE_INT, mem_space, file_space, - H5P_DEFAULT, buf2); - assert (status>=0); + if (H5Dread (dataset, H5T_NATIVE_INT, mem_space, file_space, + H5P_DEFAULT, buf2)<0) goto error; /* Compare */ for (k=0; k<NX/2; k++) { for (m=0; m<NY/2; m++) { - assert (buf2[k][m]==buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]); + if (buf2[k][m]!=buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]) { + FAILED(); + printf(" i=%d, j=%d, k=%d, m=%d\n", i, j, k, m); + goto error; + } } } } } - H5Dclose (dataset); - H5Fclose (file); + if (H5Dclose (dataset)<0) goto error; + if (H5Fclose (file)<0) goto error; + PASSED(); printf("All extend tests passed.\n"); - cleanup(); + h5_cleanup(fapl); return 0; + + error: + printf("*** One or more extend tests failed ***\n"); + return 1; } diff --git a/test/external.c b/test/external.c index a6ecc16..cfb413a 100644 --- a/test/external.c +++ b/test/external.c @@ -7,69 +7,20 @@ * * Purpose: Tests datasets stored in external raw files. */ - -/* See H5private.h for how to include headers */ -#undef NDEBUG -#include <H5config.h> - -#ifdef STDC_HEADERS -# include <assert.h> -# include <fcntl.h> -# include <stdio.h> -# include <stdlib.h> -# include <string.h> -#endif - -#ifdef HAVE_IO_H -# include <io.h> -#endif - -#ifdef HAVE_UNISTD_H -# include <sys/types.h> -# include <unistd.h> -#endif - -#include <hdf5.h> - -#ifndef HAVE_ATTRIBUTE -# undef __attribute__ -# define __attribute__(X) /*void*/ -# define __unused__ /*void*/ +#if 1 /* have to go, and this is only half baked.... 19981120 rpm*/ +int main(void) {return 0;} #else -# define __unused__ __attribute__((unused)) -#endif -#define TEST_FILE_NAME1 "extern_1.h5" -#define TEST_FILE_NAME2 "extern_2.h5" -#define TEST_FILE_NAME3 "extern_3.h5" +#include <h5test.h> -static int nerrors_g = 0; +const char *FILENAME[] = { + "extern_1", + "extern_2", + "extern_3", + NULL +}; - -/*------------------------------------------------------------------------- - * Function: display_error_cb - * - * Purpose: Displays the error stack after printing "*FAILED*". - * - * Return: Success: 0 - * - * Failure: -1 - * - * Programmer: Robb Matzke - * Wednesday, March 4, 1998 - * - * Modifications: - * - *------------------------------------------------------------------------- - */ -static herr_t -display_error_cb (void __unused__ *client_data) -{ - puts ("*FAILED*"); - H5Eprint (stdout); - nerrors_g++; - return 0; -} +static int nerrors_g = 0; /*------------------------------------------------------------------------- @@ -135,7 +86,7 @@ same_contents (const char *name1, const char *name2) *------------------------------------------------------------------------- */ static void -test_1 (void) +test_1 (hid_t fapl) { hid_t file, plist, space, dset, grp; herr_t status; @@ -143,42 +94,37 @@ test_1 (void) herr_t (*func)(void*) = NULL; void *client_data = NULL; int n; - + char filename[1024]; /* * Create the file and an initial group. This causes messages about * debugging to be emitted before we start playing games with what the * output looks like. */ - file = H5Fcreate (TEST_FILE_NAME1, H5F_ACC_TRUNC|H5F_ACC_DEBUG, - H5P_DEFAULT, H5P_DEFAULT); - assert (file>=0); - grp = H5Gcreate (file, "emit-diagnostics", 8); - H5Gclose (grp); + h5_fixname(FILENAME[0], fapl, filename, sizeof filename); + if ((file = H5Fcreate (filename, H5F_ACC_TRUNC|H5F_ACC_DEBUG, + H5P_DEFAULT, fapl))<0) goto error; + if ((grp = H5Gcreate (file, "emit-diagnostics", 8))<0) goto error; + if (H5Gclose (grp)<0) goto error; /* * A single external file for a non-extendible dataset. */ - do { - printf ("%-70s", "...fixed-size data space, exact storage"); - fflush (stdout); - plist = H5Pcreate (H5P_DATASET_CREATE); - assert (plist>=0); - status = H5Pset_external (plist, "ext1.data", 0, (hsize_t)400); - assert (status>=0); + TESTING("fixed-size data space, exact storage"); + if ((plist = H5Pcreate (H5P_DATASET_CREATE))<0) goto error; + if (H5Pset_external (plist, "ext1.data", 0, (hsize_t)400)<0) goto error; - size[0] = max_size[0] = 100; - space = H5Screate_simple (1, size, max_size); - assert (space>=0); + size[0] = max_size[0] = 100; + if ((space = H5Screate_simple (1, size, max_size))<0) goto error; + + /* Create the dataset, the `dset1' name is used later too */ + if ((dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, space, plist))<0) + goto error; + if (H5Dclose (dset)<0) goto error; + if (H5Sclose (space)<0) goto error; + if (H5Pclose (plist)<0) goto error; + PASSED(); - /* Create the dataset, the `dset1' name is used later too */ - dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, space, plist); - if (dset<0) break; - H5Dclose (dset); - puts (" PASSED"); - } while (0); - H5Sclose (space); - H5Pclose (plist); /* * A single external file which is too small to represent all the data. @@ -490,6 +436,8 @@ test_1 (void) /* END OF TESTS */ H5Fclose (file); + + error: } @@ -586,7 +534,7 @@ test_2 (void) puts (" Failed to read dataset"); break; } - + for (i=0; i<100; i++) { if (whole[i]!=(signed)i) { puts ("*FAILED*"); @@ -856,3 +804,4 @@ main (void) return (nerrors_g?1:0); } +#endif diff --git a/test/flush1.c b/test/flush1.c index 17b2c46..f353100 100644 --- a/test/flush1.c +++ b/test/flush1.c @@ -107,13 +107,13 @@ main(void) /* Write some data */ for (i=0; i<ds_size[0]; i++) { - /* - * The extra cast in the following statement is a bug workaround - * for the Win32 version 5.0 compiler. - * 1998-11-06 ptl - */ + /* + * The extra cast in the following statement is a bug workaround + * for the Win32 version 5.0 compiler. + * 1998-11-06 ptl + */ for (j=0; j<ds_size[1]; j++) { - the_data[i][j] = (double)((hssize_t)(i/(j+1))); + the_data[i][j] = (double)(hssize_t)i/((hssize_t)(j+1)); } } if (H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT, diff --git a/test/flush2.c b/test/flush2.c index 95818b8..42fcdab 100644 --- a/test/flush2.c +++ b/test/flush2.c @@ -131,7 +131,7 @@ main(void) * for the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - error = fabs(the_data[i][j]-(double)((hssize_t)(i/(j+1)))); + error = fabs(the_data[i][j]-(double)(hssize_t)i/((hssize_t)j+1)); assert(error<0.0001); } } diff --git a/test/h5test.c b/test/h5test.c new file mode 100644 index 0000000..4144455 --- /dev/null +++ b/test/h5test.c @@ -0,0 +1,366 @@ +/* + * Copyright © 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Thursday, November 19, 1998 + * + * Purpose: Provides support functions for most of the hdf5 tests cases. + * + */ + +#undef NDEBUG /*override -DNDEBUG */ +#include <h5test.h> + +/* + * Define these environment variables or constants to influence functions in + * this test support library. The environment variable is used in preference + * to the cpp constant. If neither is defined then use some default value. + * + * HDF5_PREFIX: A string to add to the beginning of all file names. + * This can be used to tell MPIO what driver to use + * (e.g., "gfs:", "ufs:", or "nfs:") or to use a + * different file system (e.g., "/tmp" or "/usr/tmp"). + * The prefix will be separated from the base file name + * by a slash. See h5_fixname() for details. + * + * HDF5_DRIVER: This string describes what low level file driver to + * use for HDF5 file access. The first word in the + * value is the name of the driver and subsequent data + * is interpreted according to the driver. See + * h5_fileaccess() for details. + * + */ + + + +/*------------------------------------------------------------------------- + * Function: h5_errors + * + * Purpose: Displays the error stack after printing "*FAILED*". + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Robb Matzke + * Wednesday, March 4, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +herr_t +h5_errors(void __unused__ *client_data) +{ + FAILED(); + H5Eprint (stdout); + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: h5_cleanup + * + * Purpose: Cleanup temporary test files. The list of test files is in + * `extern const char *FILENAMES[]' -- these are only the base + * names. The file access property list is also closed. + * + * Return: none + * + * Programmer: Albert Cheng + * May 28, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +h5_cleanup(hid_t fapl) +{ + char filename[1024]; + char temp[2048]; + int i, j; + + if (!getenv("HDF5_NOCLEANUP")) { + for (i=0; FILENAME[i]; i++) { + if (NULL==h5_fixname(FILENAME[i], fapl, filename, + sizeof filename)) { + continue; + } + + switch (H5Pget_driver(fapl)) { + case H5F_LOW_CORE: + break; /*nothing to remove*/ + + case H5F_LOW_SPLIT: + snprintf(temp, sizeof temp, "%s.raw", filename); + remove(temp); + snprintf(temp, sizeof temp, "%s.meta", filename); + remove(temp); + break; + + case H5F_LOW_FAMILY: + for (j=0; /*void*/; j++) { + snprintf(temp, sizeof temp, filename, j); + if (access(temp, F_OK)<0) break; + remove(temp); + } + break; + + default: + remove(filename); + break; + } + } + } + H5Pclose(fapl); +} + + +/*------------------------------------------------------------------------- + * Function: h5_reset + * + * Purpose: Reset the library by closing it. + * + * Return: void + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +h5_reset(void) +{ + fflush(stdout); + fflush(stderr); + H5close(); + H5Eset_auto (h5_errors, NULL);} + + +/*------------------------------------------------------------------------- + * Function: h5_fixname + * + * Purpose: Create a file name from a file base name like `test' and + * return it through the FULLNAME (at most SIZE characters + * counting the null terminator). The full name is created by + * prepending the contents of HDF5_PREFIX (separated from the + * base name by a slash) and appending a file extension based on + * the driver supplied. + * + * Return: Success: The FULLNAME pointer. + * + * Failure: NULL if BASENAME or FULLNAME is the null + * pointer or if FULLNAME isn't large enough for + * the result. + * + * Programmer: Robb Matzke + * Thursday, November 19, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +char * +h5_fixname(const char *basename, hid_t fapl, char *fullname, size_t size) +{ + const char *prefix=NULL, *suffix=NULL; + H5F_driver_t driver; + + if (!basename || !fullname || size<1) return NULL; + + /* First use the environment variable, then try the constant */ + prefix = getenv("HDF5_PREFIX"); +#ifdef HDF5_PREFIX + if (!prefix) prefix = HDF5_PREFIX; +#endif + + /* Prepend the prefix value to the base name */ + if (prefix && *prefix) { + if (snprintf(fullname, size, "%s/%s", prefix, basename)==(int)size) { + return NULL; /*buffer is too small*/ + } + } else if (strlen(basename)>=size) { + return NULL; /*buffer is too small*/ + } else { + strcpy(fullname, basename); + } + + /* Append a suffix */ + if ((driver=H5Pget_driver(fapl))<0) return NULL; + switch (driver) { + case H5F_LOW_SPLIT: + case H5F_LOW_CORE: + suffix = NULL; + break; + case H5F_LOW_FAMILY: + suffix = "%05d.h5"; + break; + default: + suffix = ".h5"; + break; + } + if (suffix) { + if (strlen(fullname)+strlen(suffix)>=size) return NULL; + strcat(fullname, suffix); + } + + return fullname; +} + + +/*------------------------------------------------------------------------- + * Function: h5_fileaccess + * + * Purpose: Returns a file access template which is the default template + * but with a file driver set according to the constant or + * environment variable HDF5_DRIVER + * + * Return: Success: A file access property list + * + * Failure: -1 + * + * Programmer: Robb Matzke + * Thursday, November 19, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +hid_t +h5_fileaccess(void) +{ + const char *val = NULL; + const char *name; + char s[1024]; + hid_t fapl = -1; + hsize_t fam_size = 1024*1024; + + /* First use the environment variable, then the constant */ + val = getenv("HDF5_DRIVER"); +#ifdef HDF5_DRIVER + if (!val) val = HDF5_DRIVER; +#endif + + if ((fapl=H5Pcreate(H5P_FILE_ACCESS))<0) return -1; + if (!val || !*val) return fapl; /*use default*/ + + strncpy(s, val, sizeof s); + s[sizeof(s)-1] = '\0'; + if (NULL==(name=strtok(s, " \t\n\r"))) return fapl; + + if (!strcmp(name, "sec2")) { + /* Unix read() and write() system calls */ + if (H5Pset_sec2(fapl)<0) return -1; + } else if (!strcmp(name, "stdio")) { + /* C standard I/O library */ + if (H5Pset_stdio(fapl)<0) return -1; + } else if (!strcmp(name, "core")) { + /* In-core temporary file with 1MB increment */ + if (H5Pset_core(fapl, 1024*1024)<0) return -1; + } else if (!strcmp(name, "split")) { + /* Split meta data and raw data each using default driver */ + if (H5Pset_split(fapl, NULL, H5P_DEFAULT, NULL, H5P_DEFAULT)<0) + return -1; + } else if (!strcmp(name, "family")) { + /* Family of files, each 1MB and using the default driver */ + if ((val=strtok(NULL, " \t\n\r"))) { + fam_size = strtod(val, NULL) * 1024*1024; + } + if (H5Pset_family(fapl, fam_size, H5P_DEFAULT)<0) return -1; + } else { + /* Unknown driver */ + return -1; + } + + return fapl; +} + + +/*------------------------------------------------------------------------- + * Function: h5_no_hwconv + * + * Purpose: Turn off hardware data type conversions. + * + * Return: void + * + * Programmer: Robb Matzke + * Friday, November 20, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +h5_no_hwconv(void) +{ + H5Tunregister(H5T_conv_char_uchar); + H5Tunregister(H5T_conv_char_short); + H5Tunregister(H5T_conv_char_ushort); + H5Tunregister(H5T_conv_char_int); + H5Tunregister(H5T_conv_char_uint); + H5Tunregister(H5T_conv_char_long); + H5Tunregister(H5T_conv_char_ulong); + + H5Tunregister(H5T_conv_uchar_char); + H5Tunregister(H5T_conv_uchar_short); + H5Tunregister(H5T_conv_uchar_ushort); + H5Tunregister(H5T_conv_uchar_int); + H5Tunregister(H5T_conv_uchar_uint); + H5Tunregister(H5T_conv_uchar_long); + H5Tunregister(H5T_conv_uchar_ulong); + + H5Tunregister(H5T_conv_short_char); + H5Tunregister(H5T_conv_short_uchar); + H5Tunregister(H5T_conv_short_ushort); + H5Tunregister(H5T_conv_short_int); + H5Tunregister(H5T_conv_short_uint); + H5Tunregister(H5T_conv_short_long); + H5Tunregister(H5T_conv_short_ulong); + + H5Tunregister(H5T_conv_ushort_char); + H5Tunregister(H5T_conv_ushort_uchar); + H5Tunregister(H5T_conv_ushort_short); + H5Tunregister(H5T_conv_ushort_int); + H5Tunregister(H5T_conv_ushort_uint); + H5Tunregister(H5T_conv_ushort_long); + H5Tunregister(H5T_conv_ushort_ulong); + + H5Tunregister(H5T_conv_int_char); + H5Tunregister(H5T_conv_int_uchar); + H5Tunregister(H5T_conv_int_short); + H5Tunregister(H5T_conv_int_ushort); + H5Tunregister(H5T_conv_int_uint); + H5Tunregister(H5T_conv_int_long); + H5Tunregister(H5T_conv_int_ulong); + + H5Tunregister(H5T_conv_uint_char); + H5Tunregister(H5T_conv_uint_uchar); + H5Tunregister(H5T_conv_uint_short); + H5Tunregister(H5T_conv_uint_ushort); + H5Tunregister(H5T_conv_uint_int); + H5Tunregister(H5T_conv_uint_long); + H5Tunregister(H5T_conv_uint_ulong); + + H5Tunregister(H5T_conv_long_char); + H5Tunregister(H5T_conv_long_uchar); + H5Tunregister(H5T_conv_long_short); + H5Tunregister(H5T_conv_long_ushort); + H5Tunregister(H5T_conv_long_int); + H5Tunregister(H5T_conv_long_uint); + H5Tunregister(H5T_conv_long_ulong); + + H5Tunregister(H5T_conv_ulong_char); + H5Tunregister(H5T_conv_ulong_uchar); + H5Tunregister(H5T_conv_ulong_short); + H5Tunregister(H5T_conv_ulong_ushort); + H5Tunregister(H5T_conv_ulong_int); + H5Tunregister(H5T_conv_ulong_uint); + H5Tunregister(H5T_conv_ulong_long); + + H5Tunregister(H5T_conv_float_double); + H5Tunregister(H5T_conv_double_float); +} diff --git a/test/h5test.h b/test/h5test.h new file mode 100644 index 0000000..fa69b9f --- /dev/null +++ b/test/h5test.h @@ -0,0 +1,69 @@ +/* + * Copyright © 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Friday, November 20, 1998 + * + * Purpose: Test support stuff. + */ +#ifndef _H5TEST_H +#define _H5TEST_H + +#undef NDEBUG +#include <hdf5.h> + +#include <H5private.h> +#ifdef STDC_HEADERS +# include <signal.h> +#endif + +#define H5T_PACKAGE +#include <H5Tpkg.h> /*to turn off hardware conversions*/ + + +/* + * This array should contain a list of file base names created by the test. + * The base name is a word like `test' which will have a prefix and suffix + * added to result in something like `ufs:/u/matzke/test.h5' + */ +extern const char *FILENAME[]; + +/* + * The name of the test is printed by saying TESTING("something") which will + * result in the string `Testing something' being flushed to standard output. + * If a test passes, fails, or is skipped then the PASSED(), FAILED(), or + * SKIPPED() macro should be called. After FAILED() or SKIPPED() the caller + * should print additional information to stdout indented by at least four + * spaces. If the h5_errors() is used for automatic error handling then + * the FAILED() macro is invoked automatically when an API function fails. + */ +#define TESTING(WHAT) {printf("%-70s", "Testing " WHAT); fflush(stdout);} +#define PASSED() puts(" PASSED") +#define FAILED() puts("*FAILED*") +#define SKIPPED() puts(" -SKIP-") + +/* + * Print the current location on the standard output stream. + */ +#define AT() printf (" at %s:%d in %s()...\n", \ + __FILE__, __LINE__, __FUNCTION__); + + +#ifdef __cplusplus +extern "C" { +#endif + +void h5_cleanup(hid_t fapl); +void h5_cleanup(hid_t fapl); +herr_t h5_errors(void __unused__ *client_data); +char *h5_fixname(const char *basename, hid_t fapl, char *fullname, + size_t size); +hid_t h5_fileaccess(void); +void h5_no_hwconv(void); +void h5_reset(void); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/test/iopipe.c b/test/iopipe.c index ca1b375..0e1fb12 100644 --- a/test/iopipe.c +++ b/test/iopipe.c @@ -188,7 +188,7 @@ main (void) * 1998-11-06 ptl */ printf ("I/O request size is %1.1fMB\n", - ((double)((hssize_t)(size[0]*size[1])))/(1024.0*1024)); + (double)(hssize_t)(size[0]*size[1])/1024.0*1024); /* Open the files */ file = H5Fcreate (HDF5_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); diff --git a/test/overhead.c b/test/overhead.c index 13a6c7d..4656fa5 100644 --- a/test/overhead.c +++ b/test/overhead.c @@ -10,7 +10,7 @@ /* See H5private.h for how to include headers */ #undef NDEBUG -#include <H5config.h> +#include <hdf5.h> #ifdef STDC_HEADERS # include <ctype.h> @@ -29,7 +29,9 @@ # include <unistd.h> #endif -#include <hdf5.h> +#ifdef HAVE_IO_H +# include <io.h> +#endif #ifndef HAVE_ATTRIBUTE # undef __attribute__ @@ -244,14 +246,14 @@ test(fill_t fill_style, const double splits[], if (verbose) { if (H5Fflush(file, H5F_SCOPE_LOCAL)<0) goto error; if (fstat(fd, &sb)<0) goto error; - /* + /* * The extra cast in the following statement is a bug workaround * for the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - printf("%4lu %8.3f\n", + printf("%4lu %8.3f ***\n", (unsigned long)i, - (double)((hssize_t)((sb.st_size-i*sizeof(int))/i))); + (double)(hssize_t)(sb.st_size-i*sizeof(int))/(hssize_t)i); } } @@ -282,14 +284,14 @@ test(fill_t fill_style, const double splits[], abort(); } if (fstat(fd, &sb)<0) goto error; - /* - * The extra cast in the following statement is a bug workaround - * for the Win32 version 5.0 compiler. - * 1998-11-06 ptl - */ - printf("%-7s %8.3f\n", sname, - (double)((hssize_t)((sb.st_size-cur_size[0]*sizeof(int))/cur_size[0]))); - + /* + * The extra cast in the following statement is a bug workaround + * for the Win32 version 5.0 compiler. + * 1998-11-06 ptl + */ + printf("%-7s %8.3f\n", sname, + (double)(hssize_t)(sb.st_size-cur_size[0]*sizeof(int))/ + (hssize_t)cur_size[0]); } close(fd); return 0; diff --git a/test/ragged.c b/test/ragged.c index f9f1f99..6b75dab 100644 --- a/test/ragged.c +++ b/test/ragged.c @@ -8,8 +8,13 @@ /* See H5private.h for how to include headers */ #undef NDEBUG +#include <hdf5.h> #include <H5private.h> /*for performance monitoring*/ +#ifdef STDC_HEADERS +# include <signal.h> +#endif + #define NOTIFY_INTERVAL 2 /*seconds*/ #define TIME_LIMIT 60 /*seconds*/ #define CH_SIZE 8192*8 /*approx chunk size in bytes*/ @@ -242,7 +247,7 @@ ragged_write_all(hid_t ra, hsize_t rows_at_once) * 1998-11-06 ptl */ H5_bandwidth(s, - (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s%s\n", (unsigned long)(row+i), (unsigned long)total_nelmts, @@ -261,7 +266,7 @@ ragged_write_all(hid_t ra, hsize_t rows_at_once) * the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - H5_bandwidth(s, (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + H5_bandwidth(s, (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s\n", (unsigned long)row, (unsigned long)total_nelmts, @@ -375,8 +380,7 @@ ragged_read_all(hid_t ra, hsize_t rows_at_once) * for the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - H5_bandwidth(s, - (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + H5_bandwidth(s, (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s%s\n", (unsigned long)(row+i), (unsigned long)total_nelmts, @@ -403,7 +407,7 @@ ragged_read_all(hid_t ra, hsize_t rows_at_once) * the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - H5_bandwidth(s, (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + H5_bandwidth(s, (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s\n", (unsigned long)row, (unsigned long)total_nelmts, @@ -540,7 +544,7 @@ ragged_read_short(hid_t ra, hsize_t rows_at_once, hsize_t width) * 1998-11-06 ptl */ H5_bandwidth(s, - (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s%s\n", (unsigned long)(row+i), (unsigned long)read_nelmts, @@ -567,7 +571,7 @@ ragged_read_short(hid_t ra, hsize_t rows_at_once, hsize_t width) * the Win32 version 5.0 compiler. * 1998-11-06 ptl */ - H5_bandwidth(s, (double)((hssize_t)interval_nelmts)*sizeof(C_MTYPE), + H5_bandwidth(s, (double)(hssize_t)interval_nelmts*sizeof(C_MTYPE), timer.etime); printf(" %8lu %8lu %7.3f%% %10s\n", (unsigned long)row, (unsigned long)read_nelmts, @@ -579,7 +583,7 @@ ragged_read_short(hid_t ra, hsize_t rows_at_once, hsize_t width) * Win32 version 5.0 compiler. * 1998-11-06 ptl */ - H5_bandwidth(s, (double)((hssize_t)read_nelmts)*sizeof(C_MTYPE), + H5_bandwidth(s, (double)(hssize_t)read_nelmts*sizeof(C_MTYPE), timer_total.etime); printf(" %27s%10s\n", "", s); |