Files
src_old/src/h5/attribs.c
T
gsell bac53ee2d2 test/h5t/Makefile.am
test/h5u/Makefile.am
test/h5b/H5BlockTestAttributes.c
test/h5b/Makefile.am
src/H5Part.c
src/H5Block.c
src/H5Part.h
src/Makefile.am
src/h5/errorhandling.c
src/h5/h5_types.h
src/h5/attribs.c
src/h5/t_readwrite.c
src/h5/u_readwrite.c
src/h5/t_openclose.c
src/h5/h5_private.h
src/h5/readwrite.c
src/h5/openclose.c
src/h5/Makefile.am
- changes due to removed H5PartTypes.h, H5BlockTyes.h and H5PartPrivate.h
2008-02-18 14:33:30 +00:00

158 lines
3.5 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h> /* va_arg - System dependent ?! */
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <hdf5.h>
#include "h5.h"
#include "h5_private.h"
#include "H5Part.h"
#include "H5Block.h"
h5part_int64_t
H5_read_attrib (
hid_t id,
const char *attrib_name,
void *attrib_value
) {
herr_t herr;
hid_t attrib_id;
hid_t space_id;
hid_t type_id;
hid_t mytype;
hsize_t nelem;
attrib_id = H5Aopen_name ( id, attrib_name );
if ( attrib_id <= 0 ) return HANDLE_H5A_OPEN_NAME_ERR( attrib_name );
mytype = H5Aget_type ( attrib_id );
if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR;
space_id = H5Aget_space ( attrib_id );
if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR;
nelem = H5Sget_simple_extent_npoints ( space_id );
if ( nelem < 0 ) return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR;
type_id = H5_normalize_h5_type ( mytype );
herr = H5Aread (attrib_id, type_id, attrib_value );
if ( herr < 0 ) return HANDLE_H5A_READ_ERR;
herr = H5Sclose ( space_id );
if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR;
herr = H5Tclose ( mytype );
if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR;
herr = H5Aclose ( attrib_id );
if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR;
return H5PART_SUCCESS;
}
h5part_int64_t
H5_write_attrib (
hid_t id,
const char *attrib_name,
const hid_t attrib_type,
const void *attrib_value,
const hsize_t attrib_nelem
) {
herr_t herr;
hid_t space_id;
hid_t attrib_id;
space_id = H5Screate_simple (1, &attrib_nelem, NULL);
if ( space_id < 0 )
return HANDLE_H5S_CREATE_SIMPLE_ERR ( 1 );
attrib_id = H5Acreate (
id,
attrib_name,
attrib_type,
space_id,
H5P_DEFAULT );
if ( attrib_id < 0 ) return HANDLE_H5A_CREATE_ERR ( attrib_name );
herr = H5Awrite ( attrib_id, attrib_type, attrib_value);
if ( herr < 0 ) return HANDLE_H5A_WRITE_ERR ( attrib_name );
herr = H5Aclose ( attrib_id );
if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR;
herr = H5Sclose ( space_id );
if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR;
return H5PART_SUCCESS;
}
h5part_int64_t
H5_get_attrib_info (
hid_t id,
const h5part_int64_t attrib_idx,
char *attrib_name,
const h5part_int64_t len_attrib_name,
h5part_int64_t *attrib_type,
h5part_int64_t *attrib_nelem
) {
herr_t herr;
hid_t attrib_id;
hid_t mytype;
hid_t space_id;
attrib_id = H5Aopen_idx ( id, (unsigned int)attrib_idx );
if ( attrib_id < 0 ) return HANDLE_H5A_OPEN_IDX_ERR ( attrib_idx );
if ( attrib_nelem ) {
space_id = H5Aget_space ( attrib_id );
if ( space_id < 0 ) return HANDLE_H5A_GET_SPACE_ERR;
*attrib_nelem = H5Sget_simple_extent_npoints ( space_id );
if ( *attrib_nelem < 0 )
return HANDLE_H5S_GET_SIMPLE_EXTENT_NPOINTS_ERR;
herr = H5Sclose ( space_id );
if ( herr < 0 ) return HANDLE_H5S_CLOSE_ERR;
}
if ( attrib_name ) {
herr = H5Aget_name (
attrib_id,
(size_t)len_attrib_name,
attrib_name );
if ( herr < 0 ) return HANDLE_H5A_GET_NAME_ERR;
}
if ( attrib_type ) {
mytype = H5Aget_type ( attrib_id );
if ( mytype < 0 ) return HANDLE_H5A_GET_TYPE_ERR;
*attrib_type = H5_normalize_h5_type ( mytype );
herr = H5Tclose ( mytype );
if ( herr < 0 ) return HANDLE_H5T_CLOSE_ERR;
}
herr = H5Aclose ( attrib_id);
if ( herr < 0 ) return HANDLE_H5A_CLOSE_ERR;
return H5PART_SUCCESS;
}
h5part_int64_t
H5_get_num_attribs (
h5_file *f,
hid_t id
) {
CHECK_FILEHANDLE ( f );
int nattribs = H5Aget_num_attrs ( id );
if ( nattribs < 0 ) HANDLE_H5A_GET_NUM_ATTRS_ERR;
return (h5part_int64_t) nattribs;
}