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/H5A.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/H5A.c')
-rw-r--r-- | src/H5A.c | 42 |
1 files changed, 29 insertions, 13 deletions
@@ -93,13 +93,21 @@ H5A_init_interface(void) EXAMPLES REVISION LOG --------------------------------------------------------------------------*/ -void -H5A_term_interface(intn status) +intn +H5A_term_interface(void) { - if (interface_initialize_g>0) { - H5I_destroy_group(H5I_ATTR); + intn n=0; + + if (interface_initialize_g) { + if ((n=H5I_nmembers(H5I_ATTR))) { + H5I_clear_group(H5I_ATTR); + } else { + H5I_destroy_group(H5I_ATTR); + interface_initialize_g = 0; + n = 1; + } } - interface_initialize_g = status; + return n; } @@ -602,6 +610,7 @@ static herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, void *buf) { uint8_t *tconv_buf = NULL; /* data type conv buffer */ + uint8_t *bkg_buf = NULL; /* temp conversion buffer */ size_t nelmts; /* elements in attribute */ H5T_path_t *tpath = NULL; /* conversion information*/ hid_t src_id = -1, dst_id = -1;/* temporary type atoms */ @@ -626,7 +635,8 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, void *buf) /* Get the maximum buffer size needed and allocate it */ buf_size = nelmts*MAX(src_type_size,dst_type_size); - if (NULL==(tconv_buf = H5MM_malloc (buf_size))) { + if (NULL==(tconv_buf = H5MM_malloc (buf_size)) || + NULL==(bkg_buf = H5MM_malloc(buf_size))) { HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed"); } @@ -650,7 +660,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, void *buf) } /* Perform data type conversion */ - if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, NULL)<0) { + if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, bkg_buf)<0) { HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed"); } @@ -683,6 +693,8 @@ done: H5I_dec_ref(dst_id); if (tconv_buf) H5MM_xfree(tconv_buf); + if (bkg_buf) + H5MM_xfree(bkg_buf); FUNC_LEAVE(ret_value); } /* H5A_write() */ @@ -761,6 +773,7 @@ static herr_t H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf) { uint8_t *tconv_buf = NULL; /* data type conv buffer*/ + uint8_t *bkg_buf = NULL; /* background buffer */ size_t nelmts; /* elements in attribute*/ H5T_path_t *tpath = NULL; /* type conversion info */ hid_t src_id = -1, dst_id = -1;/* temporary type atoms*/ @@ -789,7 +802,8 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf) else { /* Attribute exists and has a value */ /* Get the maximum buffer size needed and allocate it */ buf_size = nelmts*MAX(src_type_size,dst_type_size); - if (NULL==(tconv_buf = H5MM_malloc (buf_size))) { + if (NULL==(tconv_buf = H5MM_malloc (buf_size)) || + NULL==(bkg_buf = H5MM_malloc(buf_size))) { HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed"); } @@ -812,11 +826,11 @@ H5A_read(H5A_t *attr, const H5T_t *mem_type, void *buf) } } - /* Perform data type conversion. */ - if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, NULL)<0) { - HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, - "data type conversion failed"); - } + /* Perform data type conversion. */ + if (H5T_convert(tpath, src_id, dst_id, nelmts, tconv_buf, bkg_buf)<0) { + HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, + "data type conversion failed"); + } /* Copy the converted data into the user's buffer */ HDmemcpy(buf,tconv_buf,dst_type_size*nelmts); @@ -832,6 +846,8 @@ done: H5I_dec_ref(dst_id); if (tconv_buf) H5MM_xfree(tconv_buf); + if (bkg_buf) + H5MM_xfree(bkg_buf); FUNC_LEAVE(ret_value); } /* H5A_read() */ |