diff options
author | Robb Matzke <matzke@llnl.gov> | 1999-03-30 11:38:34 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1999-03-30 11:38:34 (GMT) |
commit | f003dead4d1701aedd7833354ede73c6eb93a971 (patch) | |
tree | e64999eb9d666aedd808f1c91f4a2be8676d6881 /src/H5T.c | |
parent | 804fae33ced79c63a2c7fa2adc8537c80597fb33 (diff) | |
download | hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.zip hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.tar.gz hdf5-f003dead4d1701aedd7833354ede73c6eb93a971.tar.bz2 |
[svn-r1169] ./configure.in
./configure [REGENERATED]
./src/H5D.c
./src/H5O.c
Removed H5AC, H5B, and H5T from the default list of packages
to debug (because they're pretty expensive debugging), and
added H5O. Also fixed a bug for undefined variable in H5D when
H5S debugging is turned on but H5T debugging is turned off.
./config/conclude.in
Fixed installation of header files for building in a directory
other than the source directory. This fixes a bug where
H5config.h wasn't being installed.
./src/H5.c
./src/H5A.c
./src/H5D.c
./src/H5F.c
./src/H5G.c
./src/H5I.c
./src/H5Iprivate.h
./src/H5P.c
./src/H5R.c
./src/H5RA.c
./src/H5S.c
./src/H5T.c
./src/H5TB.c
./src/H5Tprivate.h
./src/H5Z.c
./src/H5detect.c
./src/H5private.h
Changed the way the library shuts down again. Now it handles
cycles between packages and isn't so sensitive to dependencies
between packages. A package might shut down only to be
restarted to process a request from some other package being
shut down. Loops are detected after 100 iteractions and the
shutdown is aborted with a message on standard error. This
also makes it a lot easier to debug.
./src/H5A.c
Fixed H5A_write() and H5A_read() so they pass a non-null
background buffer to the conversion functions. This is
necessary when an attribute has a compound data type.
./src/H5Flow.c
./src/H5Fprivate.h
./src/H5Fsec2.c
Reindented new Win32 stuff.
./src/H5Odtype.c
Fixed a bug when enumeration types are used in a compound data
type. The byte pointer wasn't incremented after the type
information was written.
./tools/h5ls.c
Compound data types display their total size because it's not
always obvious from looking at the members.
Scalar attributes show their space as `scalar' instead of
`{}'.
The index value is not printed for attributes that have only a
few values. Instead the word `Data:' is printed on the first
line of attribute data.
Named types display their data type only if verbose output was
requested.
Diffstat (limited to 'src/H5T.c')
-rw-r--r-- | src/H5T.c | 88 |
1 files changed, 49 insertions, 39 deletions
@@ -192,7 +192,7 @@ H5T_init_interface(void) * Initialize pre-defined native data types from code generated during * the library configuration by H5detect. */ - if (H5T_native_open()<0) { + if (H5TN_init_interface()<0) { HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize interface"); } @@ -1091,7 +1091,11 @@ H5T_unlock_cb (void *_dt, const void __unused__ *key) * * Purpose: Close this interface. * - * Return: void + * Return: Success: Positive if any action might have caused a + * change in some other interface; zero + * otherwise. + * + * Failure: Negative * * Programmer: Robb Matzke * Friday, November 20, 1998 @@ -1102,53 +1106,59 @@ H5T_unlock_cb (void *_dt, const void __unused__ *key) * called. *------------------------------------------------------------------------- */ -void -H5T_term_interface(intn status) +intn +H5T_term_interface(void) { - intn i, nprint=0; + intn i, nprint=0, n=0; H5T_path_t *path = NULL; - if (interface_initialize_g>0) { - - /* Unregister all conversion functions */ - for (i=0; i<H5T_g.npaths; i++) { - path = H5T_g.path[i]; - assert (path); - - if (path->func) { - H5T_print_stats(path, &nprint/*in,out*/); - path->cdata.command = H5T_CONV_FREE; - if ((path->func)(FAIL, FAIL, &(path->cdata), - 0, NULL, NULL)<0) { + if (interface_initialize_g) { + if ((n=H5I_nmembers(H5I_DATATYPE))) { + H5I_clear_group(H5I_DATATYPE); + } else { + /* Unregister all conversion functions */ + for (i=0; i<H5T_g.npaths; i++) { + path = H5T_g.path[i]; + assert (path); + + if (path->func) { + H5T_print_stats(path, &nprint/*in,out*/); + 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 " - "0x%08lx failed to free private data for %s " - "(ignored)\n", - (unsigned long)(path->func), path->name); - } + if (H5DEBUG(T)) { + fprintf (H5DEBUG(T), "H5T: conversion function " + "0x%08lx failed to free private data for " + "%s (ignored)\n", + (unsigned long)(path->func), path->name); + } #endif - H5E_clear(); /*ignore the error*/ + H5E_clear(); /*ignore the error*/ + } } + H5T_close (path->src); + H5T_close (path->dst); + H5MM_xfree (path); + H5T_g.path[i] = NULL; } - H5T_close (path->src); - H5T_close (path->dst); - H5MM_xfree (path); - H5T_g.path[i] = NULL; - } - /* Clear conversion tables */ - H5T_g.path = H5MM_xfree(H5T_g.path); - H5T_g.npaths = H5T_g.apaths = 0; - H5T_g.soft = H5MM_xfree(H5T_g.soft); - H5T_g.nsoft = H5T_g.asoft = 0; + /* Clear conversion tables */ + H5T_g.path = H5MM_xfree(H5T_g.path); + H5T_g.npaths = H5T_g.apaths = 0; + H5T_g.soft = H5MM_xfree(H5T_g.soft); + H5T_g.nsoft = H5T_g.asoft = 0; - /* Unlock all datatypes, then free them */ - H5I_search (H5I_DATATYPE, H5T_unlock_cb, NULL); - H5I_destroy_group(H5I_DATATYPE); + /* Unlock all datatypes, then free them */ + H5I_search (H5I_DATATYPE, H5T_unlock_cb, NULL); + H5I_destroy_group(H5I_DATATYPE); + + /* Mark interface as closed */ + interface_initialize_g = 0; + n = 1; /*H5I*/ + } } - - interface_initialize_g = status; + return n; } |