[svn-r1010] Changes since 19981217

----------------------

./src/H5.c
./src/H5private.h
        Renamed `library_initialize_g' to `H5_libinit_g' to make it
        conform to our naming scheme.

./src/H5I.c
        Fixed a bug in H5I_dec_ref() that caused the return value to
        always be zero instead of the new reference count.

./src/H5.c
./src/H5Odtype.c
./src/H5T.c
./src/H5Tconv.c
./src/H5Tpkg.h
./src/H5Tprivate.h
./src/H5Tpublic.h
        Added support for enumeration data types.

./src/H5RA.c
        Renamed H5T_insert() to H5T_struct_insert() and added
        H5T_enum_insert().

./src/H5RA.c
./src/H5Shyper.c
        Added casts to size_t for the third argument of memcpy() to
        shut up a warning message from insure++.

./src/H5T.c
        Changed "can't" to "unable to" in some error messages to be
        more consistent.

./src/H5detect.c
        If fork() or waitpid() are unavailable then we assume no
        alignment constraints. Hopefully this is the case only on NT
        and Intel CPU's don't have alignment constraints.

./src/H5public.h
        Include <limits.h> because the H5T_NATIVE_CHAR macro needs the
        definition for CHAR_MIN.
This commit is contained in:
Robb Matzke 1999-01-07 06:41:25 -05:00
parent 04bec43fa2
commit 504aa95bd9
13 changed files with 2881 additions and 1200 deletions

View File

@ -34,13 +34,13 @@ FILE *fdopen(int fd, const char *mode);
#define PABLO_MASK H5_mask
hbool_t library_initialize_g = FALSE;
hbool_t H5_libinit_g = FALSE;
hbool_t dont_atexit_g = FALSE;
H5_debug_t H5_debug_g; /*debugging info */
static void H5_debug_mask(const char*);
/* Interface initialization */
static intn interface_initialize_g = 0;
static intn interface_initialize_g = 0;
#define INTERFACE_INIT NULL
/*--------------------------------------------------------------------------
@ -131,7 +131,7 @@ void
H5_term_library(void)
{
/* Don't do anything if the library is already closed */
if (!library_initialize_g) return;
if (!H5_libinit_g) return;
/*
* Close interfaces in a well-defined order based on dependencies. The
@ -179,7 +179,7 @@ H5_term_library(void)
H5Z_term_interface(0);
/* Mark library as closed */
library_initialize_g = FALSE;
H5_libinit_g = FALSE;
}
@ -2191,34 +2191,37 @@ H5_trace (hbool_t returning, const char *func, const char *type, ...)
fprintf(out, "NULL");
}
} else {
H5T_class_t type_class = va_arg (ap, H5T_class_t);
H5T_class_t type_class = va_arg(ap, H5T_class_t);
switch (type_class) {
case H5T_NO_CLASS:
fprintf (out, "H5T_NO_CLASS");
fprintf(out, "H5T_NO_CLASS");
break;
case H5T_INTEGER:
fprintf (out, "H5T_INTEGER");
fprintf(out, "H5T_INTEGER");
break;
case H5T_FLOAT:
fprintf (out, "H5T_FLOAT");
fprintf(out, "H5T_FLOAT");
break;
case H5T_TIME:
fprintf (out, "H5T_TIME");
fprintf(out, "H5T_TIME");
break;
case H5T_STRING:
fprintf (out, "H5T_STRING");
fprintf(out, "H5T_STRING");
break;
case H5T_BITFIELD:
fprintf (out, "H5T_BITFIELD");
fprintf(out, "H5T_BITFIELD");
break;
case H5T_OPAQUE:
fprintf (out, "H5T_OPAQUE");
fprintf(out, "H5T_OPAQUE");
break;
case H5T_COMPOUND:
fprintf (out, "H5T_COMPOUND");
fprintf(out, "H5T_COMPOUND");
break;
case H5T_ENUM:
fprintf(out, "H5T_ENUM");
break;
default:
fprintf (out, "%ld", (long)type_class);
fprintf(out, "%ld", (long)type_class);
break;
}
}

View File

@ -706,6 +706,10 @@ H5I_remove(hid_t id)
* zero and no `free' function has been defined. The object is still
* removed from the list.
*
* Robb Matzke, 30 Dec 1998
* Fixed a bug where the return value was always zero instead of the new
* reference count.
*
*-------------------------------------------------------------------------
*/
intn
@ -742,7 +746,6 @@ H5I_dec_ref(hid_t id)
}
}
}
ret_value = SUCCEED;
}
FUNC_LEAVE(ret_value);
}

File diff suppressed because it is too large Load Diff

View File

@ -86,12 +86,12 @@ H5RA_init_interface(void)
/* The meta dataset type */
if (NULL==(type=H5T_create(H5T_COMPOUND, sizeof(H5RA_meta_t))) ||
H5T_insert(type, "nelmts", HOFFSET(H5RA_meta_t, nelmts),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))<0 ||
H5T_insert(type, "offset", HOFFSET(H5RA_meta_t, offset),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSSIZE_g))<0 ||
H5T_insert(type, "nover", HOFFSET(H5RA_meta_t, nover),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))) {
H5T_struct_insert(type, "nelmts", HOFFSET(H5RA_meta_t, nelmts),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))<0 ||
H5T_struct_insert(type, "offset", HOFFSET(H5RA_meta_t, offset),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSSIZE_g))<0 ||
H5T_struct_insert(type, "nover", HOFFSET(H5RA_meta_t, nover),
0, NULL, NULL, H5I_object(H5T_NATIVE_HSIZE_g))) {
HRETURN_ERROR(H5E_RAGGED, H5E_CANTINIT, FAIL,
"unable to define ragged array meta type");
}
@ -1154,7 +1154,7 @@ H5RA_read(H5RA_t *ra, hssize_t start_row, hsize_t nrows, H5T_t *type,
/* Copy the part of the row from the raw dataset */
HDmemcpy(buf_out[i], raw_buf+i*raw_read_size[1]*type_size,
MIN(size[i], raw_read_size[1])*type_size);
(size_t)(MIN(size[i], raw_read_size[1])*type_size));
/* Copy the part of the row from the overflow dataset */
if (size[i]>raw_read_size[1]) {

View File

@ -503,7 +503,7 @@ H5S_hyper_block_read (H5S_hyper_node_t *node, H5S_hyper_fhyper_info_t *fhyper_in
*/
HDmemcpy(fhyper_info->dst,
node->cinfo.pos,
region_size*fhyper_info->elmt_size);
(size_t)(region_size*fhyper_info->elmt_size));
/*
* Decrement the number of elements left in block to read & move the
@ -559,7 +559,7 @@ H5S_hyper_block_write (H5S_hyper_node_t *node,
*/
HDmemcpy(node->cinfo.pos,
fhyper_info->src,
region_size*fhyper_info->elmt_size);
(size_t)(region_size*fhyper_info->elmt_size));
/*
* Decrement the number of elements left in block to read & move the

1786
src/H5T.c

File diff suppressed because it is too large Load Diff

View File

@ -24,6 +24,13 @@ typedef struct H5T_conv_struct_t {
size_t *memb_nelmts; /*member element count */
} H5T_conv_struct_t;
/* Conversion data for H5T_conv_enum() */
typedef struct H5T_enum_struct_t {
intn base; /*lowest `in' value */
intn length; /*num elements in arrays */
intn *src2dst; /*map from src to dst index */
} H5T_enum_struct_t;
/* Conversion data for the hardware conversion functions */
typedef struct H5T_conv_hw_t {
hsize_t s_aligned; /*number source elements aligned */
@ -336,7 +343,7 @@ static intn interface_initialize_g = 0;
} \
}
#else
# define CI_PRINT_STATS /*void*/
# define CI_PRINT_STATS(STYPE,DTYPE) /*void*/
#endif
/*-------------------------------------------------------------------------
@ -543,8 +550,8 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
/*
* Insure that members are sorted.
*/
H5T_sort_by_offset (src);
H5T_sort_by_offset (dst);
H5T_sort_value(src);
H5T_sort_value(dst);
/*
* Build a mapping from source member number to destination member
@ -582,8 +589,8 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
*/
for (i=0; i<src->u.compnd.nmembs; i++) {
if (src2dst[i]>=0) {
H5T_member_t *src_memb = src->u.compnd.memb + i;
H5T_member_t *dst_memb = dst->u.compnd.memb + src2dst[i];
H5T_cmemb_t *src_memb = src->u.compnd.memb + i;
H5T_cmemb_t *dst_memb = dst->u.compnd.memb + src2dst[i];
if (src_memb->ndims != dst_memb->ndims) {
HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
"source and dest members have incompatible "
@ -687,8 +694,8 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
H5T_t *src = NULL; /*source data type */
H5T_t *dst = NULL; /*destination data type */
intn *src2dst = NULL; /*maps src member to dst member */
H5T_member_t *src_memb = NULL; /*source struct member descript.*/
H5T_member_t *dst_memb = NULL; /*destination struct memb desc. */
H5T_cmemb_t *src_memb = NULL; /*source struct member descript.*/
H5T_cmemb_t *dst_memb = NULL; /*destination struct memb desc. */
size_t offset; /*byte offset wrt struct */
size_t src_delta, dst_delta; /*source & destination stride */
uintn elmtno;
@ -754,8 +761,8 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
/*
* Insure that members are sorted.
*/
H5T_sort_by_offset (src);
H5T_sort_by_offset (dst);
H5T_sort_value(src);
H5T_sort_value(dst);
src2dst = priv->src2dst;
/*
@ -859,6 +866,298 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
FUNC_LEAVE (SUCCEED);
}
/*-------------------------------------------------------------------------
* Function: H5T_conv_enum_init
*
* Purpose: Initialize information for H5T_conv_enum().
*
* Return: Success: Non-negative
*
* Failure: Negative
*
* Programmer: Robb Matzke
* Monday, January 4, 1999
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
static herr_t
H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
{
H5T_enum_struct_t *priv=NULL; /*private conversion data */
intn n; /*src value cast as native int */
intn domain[2]; /*min and max source values */
intn *map=NULL; /*map from src value to dst idx */
intn length; /*nelmts in map array */
herr_t ret_value=FAIL; /*return value */
intn i, j; /*counters */
FUNC_ENTER(H5T_conv_enum_init, FAIL);
cdata->need_bkg = H5T_BKG_NO;
if (NULL==(priv=cdata->priv=H5MM_calloc(sizeof(*priv)))) {
HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");
}
if (0==src->u.enumer.nmembs) {
HRETURN(SUCCEED);
}
/*
* Check that the source symbol names are a subset of the destination
* symbol names and build a map from source member index to destination
* member index.
*/
H5T_sort_name(src);
H5T_sort_name(dst);
if (NULL==(priv->src2dst=H5MM_malloc(src->u.enumer.nmembs*sizeof(int)))) {
HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");;
}
for (i=0, j=0;
i<src->u.enumer.nmembs && j<dst->u.enumer.nmembs;
i++, j++) {
while (j<dst->u.enumer.nmembs &&
HDstrcmp(src->u.enumer.name[i], dst->u.enumer.name[j])) j++;
if (j>=dst->u.enumer.nmembs) {
HRETURN_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
"source type is not a subset of destination type");
}
priv->src2dst[i] = j;
}
/*
* The conversion function will use an O(log N) lookup method for each
* value converted. However, if all of the following constraints are met
* then we can build a perfect hash table and use an O(1) lookup method.
*
* A: The source data type size matches one of our native data type
* sizes.
*
* B: After casting the source value bit pattern to a native type
* the size of the range of values is less than 20% larger than
* the number of values.
*
* If this special case is met then we use the source bit pattern cast as
* a native integer type as an index into the `val2dst'. The values of
* that array are the index numbers in the destination type or negative
* if the entry is unused.
*/
if (1==src->size || sizeof(short)==src->size || sizeof(int)==src->size) {
for (i=0; i<src->u.enumer.nmembs; i++) {
if (1==src->size) {
n = *((signed char*)(src->u.enumer.value+i));
} else if (sizeof(short)==src->size) {
n = *((short*)(src->u.enumer.value+i*src->size));
} else {
n = *((int*)(src->u.enumer.value+i*src->size));
}
if (0==i) {
domain[0] = domain[1] = n;
} else {
domain[0] = MIN(domain[0], n);
domain[1] = MAX(domain[1], n);
}
}
length = (domain[1]-domain[0])+1;
if (src->u.enumer.nmembs<2 ||
(double)length/src->u.enumer.nmembs<1.2) {
priv->base = domain[0];
priv->length = length;
if (NULL==(map=H5MM_malloc(length*sizeof(int)))) {
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
"memory allocation failed");
}
for (i=0; i<length; i++) map[i] = -1; /*entry unused*/
for (i=0; i<src->u.enumer.nmembs; i++) {
if (1==src->size) {
n = *((signed char*)(src->u.enumer.value+i));
} else if (sizeof(short)==src->size) {
n = *((short*)(src->u.enumer.value+i*src->size));
} else {
n = *((int*)(src->u.enumer.value+i*src->size));
}
n -= priv->base;
assert(n>=0 && n<priv->length);
assert(map[n]<0);
map[n] = priv->src2dst[i];
}
/*
* Replace original src2dst array with our new one. The original
* was indexed by source member number while the new one is
* indexed by source values.
*/
H5MM_xfree(priv->src2dst);
priv->src2dst = map;
HGOTO_DONE(SUCCEED);
}
}
ret_value = SUCCEED;
done:
if (ret_value<0 && priv) {
H5MM_xfree(priv->src2dst);
H5MM_xfree(priv);
cdata->priv = NULL;
}
FUNC_LEAVE(ret_value);
}
/*-------------------------------------------------------------------------
* Function: H5T_conv_enum
*
* Purpose: Converts one type of enumerated data to another.
*
* Return: Success: Non-negative
*
* Failure: negative
*
* Programmer: Robb Matzke
* Monday, January 4, 1999
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
herr_t
H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
size_t nelmts, void *_buf, void __unused__ *bkg)
{
uint8_t *buf = (uint8_t*)_buf; /*cast for pointer arithmetic */
H5T_t *src=NULL, *dst=NULL; /*src and dst data types */
uint8_t *s=NULL, *d=NULL; /*src and dst BUF pointers */
intn src_delta, dst_delta; /*conversion strides */
intn n; /*src value cast as native int */
size_t i; /*counters */
H5T_enum_struct_t *priv = (H5T_enum_struct_t*)(cdata->priv);
FUNC_ENTER(H5T_conv_enum, FAIL);
switch (cdata->command) {
case H5T_CONV_INIT:
/*
* Determine if this conversion function applies to the conversion
* path SRC_ID->DST_ID. If not return failure; otherwise initialize
* the `priv' field of `cdata' with information about the underlying
* integer conversion.
*/
if (H5I_DATATYPE != H5I_get_type(src_id) ||
NULL == (src = H5I_object(src_id)) ||
H5I_DATATYPE != H5I_get_type(dst_id) ||
NULL == (dst = H5I_object(dst_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
assert (H5T_ENUM==src->type);
assert (H5T_ENUM==dst->type);
if (H5T_conv_enum_init(src, dst, cdata)<0) {
HRETURN_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,
"unable to initialize private data");
}
break;
case H5T_CONV_FREE:
#ifdef H5T_DEBUG
if (H5DEBUG(T)) {
fprintf(H5DEBUG(T), " Using %s mapping function (%s)\n",
priv->length?"O(N)":"O(N log N)", "N==nelmts");
}
#endif
if (priv) {
H5MM_xfree(priv->src2dst);
H5MM_xfree(priv);
}
cdata->priv = NULL;
break;
case H5T_CONV_CONV:
if (H5I_DATATYPE != H5I_get_type(src_id) ||
NULL == (src = H5I_object(src_id)) ||
H5I_DATATYPE != H5I_get_type(dst_id) ||
NULL == (dst = H5I_object(dst_id))) {
HRETURN_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
}
assert (H5T_ENUM==src->type);
assert (H5T_ENUM==dst->type);
H5T_sort_name(src);
H5T_sort_name(dst);
/*
* Direction of conversion.
*/
if (dst->size <= src->size) {
src_delta = src->size;
dst_delta = dst->size;
s = d = buf;
} else {
src_delta = -(src->size);
dst_delta = -(dst->size);
s = buf + (nelmts-1) * src->size;
d = buf + (nelmts-1) * dst->size;
}
for (i=0; i<nelmts; i++, s+=src_delta, d+=dst_delta) {
if (priv->length) {
/* Use O(1) lookup */
if (1==src->size) {
n = *((signed char*)s);
} else if (sizeof(short)==src->size) {
n = *((short*)s);
} else {
n = *((int*)s);
}
if (n<0 || n>=priv->length || priv->src2dst[n]<0) {
if (!H5T_overflow_g ||
(H5T_overflow_g)(src_id, dst_id, s, d)<0) {
HDmemset(d, 0xff, dst->size);
}
} else {
HDmemcpy(d,
dst->u.enumer.value+priv->src2dst[n]*dst->size,
dst->size);
}
} else {
/* Use O(log N) lookup */
int lt = 0;
int rt = src->u.enumer.nmembs;
int md, cmp;
while (lt<rt) {
md = (lt+rt)/2;
cmp = HDmemcmp(s, src->u.enumer.value+md*src->size,
src->size);
if (cmp<0) {
rt = md;
} else if (cmp>0) {
lt = md+1;
} else {
break;
}
}
if (lt>=rt) {
if (!H5T_overflow_g ||
(H5T_overflow_g)(src_id, dst_id, s, d)<0) {
HDmemset(d, 0xff, dst->size);
}
} else {
HDmemcpy(d,
dst->u.enumer.value+priv->src2dst[md]*dst->size,
dst->size);
}
}
}
break;
default:
/* Some other command we don't know about yet.*/
HRETURN_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,
"unknown conversion command");
}
FUNC_LEAVE(SUCCEED);
}
/*-------------------------------------------------------------------------
* Function: H5T_conv_i_i

View File

@ -61,12 +61,30 @@ typedef struct H5T_atomic_t {
} u;
} H5T_atomic_t;
/* How members are sorted for compound or enum data types */
typedef enum H5T_sort_t {
H5T_SORT_NONE = 0, /*not sorted */
H5T_SORT_NAME = 1, /*sorted by member name */
H5T_SORT_VALUE = 2 /*sorted by memb offset or enum value*/
} H5T_sort_t;
/* A compound data type */
typedef struct H5T_compnd_t {
intn nalloc; /*num entries allocated in MEMB array*/
intn nmembs; /*number of members defined in struct*/
struct H5T_member_t *memb; /*array of struct members */
H5T_sort_t sorted; /*how are members sorted? */
struct H5T_cmemb_t *memb; /*array of struct members */
} H5T_compnd_t;
/* An enumeration data type */
typedef struct H5T_enum_t {
intn nalloc; /*num entries allocated */
intn nmembs; /*number of members defined in enum */
H5T_sort_t sorted; /*how are members sorted? */
uint8_t *value; /*array of values */
char **name; /*array of symbol names */
} H5T_enum_t;
typedef enum H5T_state_t {
H5T_STATE_TRANSIENT, /*type is a modifiable transient */
H5T_STATE_RDONLY, /*transient, not modifiable, closable*/
@ -81,13 +99,16 @@ struct H5T_t {
H5F_t *sh_file;/*file pointer if this is a shared type */
H5T_class_t type; /*which class of type is this? */
size_t size; /*total size of an instance of this type */
struct H5T_t *parent;/*parent type for derived data types */
union {
H5T_atomic_t atomic; /*an atomic data type */
H5T_compnd_t compnd; /*a compound data type (struct) */
H5T_enum_t enumer; /*an enumeration type (enum) */
} u;
};
typedef struct H5T_member_t {
/* A compound data type member */
typedef struct H5T_cmemb_t {
char *name; /*name of this member */
size_t offset; /*offset from beginning of struct */
size_t size; /*total size: dims * type_size */
@ -95,7 +116,7 @@ typedef struct H5T_member_t {
size_t dim[4]; /*size in each dimension */
intn perm[4]; /*index permutation */
struct H5T_t *type; /*type of this member */
} H5T_member_t;
} H5T_cmemb_t;
/* The master list of soft conversion functions */
typedef struct H5T_soft_t {
@ -142,6 +163,8 @@ herr_t H5T_conv_order (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
size_t nelmts, void *_buf, void *bkg);
herr_t H5T_conv_struct (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
size_t nelmts, void *_buf, void *bkg);
herr_t H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
size_t nelmts, void *buf, void __unused__ *bkg);
herr_t H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
size_t nelmts, void *_buf, void *bkg);
herr_t H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,

View File

@ -64,25 +64,33 @@ typedef struct H5T_path_t {
herr_t H5T_native_open(void);
herr_t H5T_init(void);
htri_t H5T_isa(H5G_entry_t *ent);
H5T_t *H5T_open (H5G_entry_t *loc, const char *name);
H5T_t *H5T_create (H5T_class_t type, size_t size);
H5T_t *H5T_copy (const H5T_t *old_dt, H5T_copy_t method);
herr_t H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type);
herr_t H5T_lock (H5T_t *dt, hbool_t immutable);
herr_t H5T_close (H5T_t *dt);
size_t H5T_get_size (const H5T_t *dt);
intn H5T_cmp (const H5T_t *dt1, const H5T_t *dt2);
htri_t H5T_is_atomic (const H5T_t *dt);
herr_t H5T_insert (H5T_t *parent, const char *name, size_t offset,
intn ndims, const size_t *dim, const intn *perm,
const H5T_t *member);
herr_t H5T_sort_by_offset (H5T_t *dt);
herr_t H5T_pack (H5T_t *dt);
herr_t H5T_debug (H5T_t *dt, FILE * stream);
H5G_entry_t *H5T_entof (H5T_t *dt);
H5T_path_t *H5T_path_find (const H5T_t *src, const H5T_t *dst,
const char *name, H5T_conv_t func);
H5T_t *H5T_open(H5G_entry_t *loc, const char *name);
H5T_t *H5T_create(H5T_class_t type, size_t size);
H5T_t *H5T_copy(const H5T_t *old_dt, H5T_copy_t method);
herr_t H5T_commit(H5G_entry_t *loc, const char *name, H5T_t *type);
herr_t H5T_lock(H5T_t *dt, hbool_t immutable);
herr_t H5T_close(H5T_t *dt);
size_t H5T_get_size(const H5T_t *dt);
intn H5T_cmp(const H5T_t *dt1, const H5T_t *dt2);
htri_t H5T_is_atomic(const H5T_t *dt);
herr_t H5T_struct_insert(H5T_t *parent, const char *name, size_t offset,
intn ndims, const size_t *dim, const intn *perm,
const H5T_t *member);
herr_t H5T_enum_insert(H5T_t *dt, const char *name, void *value);
herr_t H5T_sort_value(H5T_t *dt);
herr_t H5T_pack(H5T_t *dt);
herr_t H5T_debug(H5T_t *dt, FILE * stream);
H5G_entry_t *H5T_entof(H5T_t *dt);
H5T_path_t *H5T_path_find(const H5T_t *src, const H5T_t *dst,
const char *name, H5T_conv_t func);
herr_t H5T_sort_vaue(H5T_t *dt);
herr_t H5T_sort_name(H5T_t *dt);
herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id,
size_t nelmts, void *buf, void *bkg);
herr_t H5T_set_size(H5T_t *dt, size_t size);
herr_t H5T_set_precision(H5T_t *dt, size_t prec);
herr_t H5T_set_offset(H5T_t *dt, size_t offset);
char *H5T_enum_nameof(H5T_t *dt, void *value, char *name/*out*/, size_t size);
herr_t H5T_enum_valueof(H5T_t *dt, const char *name, void *value/*out*/);
#endif

View File

@ -33,8 +33,9 @@ typedef enum H5T_class_t {
H5T_OPAQUE = 5, /*opaque types */
H5T_COMPOUND = 6, /*compound types */
H5T_REFERENCE = 7, /*reference types */
H5T_ENUM = 8, /*enumeration types */
H5T_NCLASSES = 8 /*this must be last */
H5T_NCLASSES = 9 /*this must be last */
} H5T_class_t;
/* Byte orders */
@ -399,29 +400,37 @@ herr_t H5Tinsert_array (hid_t parent_id, const char *name, size_t offset,
hid_t member_id);
herr_t H5Tpack (hid_t type_id);
/* Operations defined on enumeration data types */
hid_t H5Tenum_create(hid_t base_id);
herr_t H5Tenum_insert(hid_t type, const char *name, void *value);
hid_t H5Tenum_nameof(hid_t type, void *value, char *name/*out*/, size_t size);
hid_t H5Tenum_valueof(hid_t type, const char *name, void *value/*out*/);
/* Querying property values */
H5T_class_t H5Tget_class (hid_t type_id);
size_t H5Tget_size (hid_t type_id);
H5T_order_t H5Tget_order (hid_t type_id);
size_t H5Tget_precision (hid_t type_id);
size_t H5Tget_offset (hid_t type_id);
herr_t H5Tget_pad (hid_t type_id, H5T_pad_t *lsb/*out*/,
H5T_pad_t *msb/*out*/);
H5T_sign_t H5Tget_sign (hid_t type_id);
herr_t H5Tget_fields (hid_t type_id, size_t *spos/*out*/,
size_t *epos/*out*/, size_t *esize/*out*/,
size_t *mpos/*out*/, size_t *msize/*out*/);
size_t H5Tget_ebias (hid_t type_id);
H5T_norm_t H5Tget_norm (hid_t type_id);
H5T_pad_t H5Tget_inpad (hid_t type_id);
H5T_str_t H5Tget_strpad (hid_t type_id);
int H5Tget_nmembers (hid_t type_id);
char *H5Tget_member_name (hid_t type_id, int membno);
size_t H5Tget_member_offset (hid_t type_id, int membno);
int H5Tget_member_dims (hid_t type_id, int membno, size_t dims[]/*out*/,
int perm[]/*out*/);
hid_t H5Tget_member_type (hid_t type_id, int membno);
H5T_cset_t H5Tget_cset (hid_t type_id);
hid_t H5Tget_super(hid_t type);
H5T_class_t H5Tget_class(hid_t type_id);
size_t H5Tget_size(hid_t type_id);
H5T_order_t H5Tget_order(hid_t type_id);
size_t H5Tget_precision(hid_t type_id);
size_t H5Tget_offset(hid_t type_id);
herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/,
H5T_pad_t *msb/*out*/);
H5T_sign_t H5Tget_sign(hid_t type_id);
herr_t H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
size_t *epos/*out*/, size_t *esize/*out*/,
size_t *mpos/*out*/, size_t *msize/*out*/);
size_t H5Tget_ebias(hid_t type_id);
H5T_norm_t H5Tget_norm(hid_t type_id);
H5T_pad_t H5Tget_inpad(hid_t type_id);
H5T_str_t H5Tget_strpad(hid_t type_id);
int H5Tget_nmembers(hid_t type_id);
char *H5Tget_member_name(hid_t type_id, int membno);
size_t H5Tget_member_offset(hid_t type_id, int membno);
int H5Tget_member_dims(hid_t type_id, int membno, size_t dims[]/*out*/,
int perm[]/*out*/);
hid_t H5Tget_member_type(hid_t type_id, int membno);
herr_t H5Tget_member_value(hid_t type_id, int membno, void *value/*out*/);
H5T_cset_t H5Tget_cset(hid_t type_id);
/* Setting property values */
herr_t H5Tset_size (hid_t type_id, size_t size);

View File

@ -241,8 +241,9 @@ precision (detected_t *d)
precision (&(INFO)); \
}
#if defined(HAVE_FORK) && defined(HAVE_WAITPID)
#define ALIGNMENT(TYPE,ALIGN) { \
char *_buf=malloc(sizeof(TYPE)+align_g[NELMTS(align_g)-1]); \
char *_buf; \
TYPE _val=0; \
size_t _ano; \
pid_t _child; \
@ -252,7 +253,9 @@ precision (detected_t *d)
fflush(stdout); \
fflush(stderr); \
if (0==(_child=fork())) { \
_buf = malloc(sizeof(TYPE)+align_g[NELMTS(align_g)-1]); \
_val = *((TYPE*)(_buf+align_g[_ano])); \
free(_buf); \
exit(0); \
} else if (_child<0) { \
perror("fork"); \
@ -277,6 +280,10 @@ precision (detected_t *d)
fprintf(stderr, "unable to calculate alignment for %s\n", #TYPE); \
} \
}
#else
#define ALIGNMENT(TYPE,ALIGN) (ALIGN)=0
#endif
/*-------------------------------------------------------------------------

View File

@ -1,9 +1,9 @@
/*
* Copyright (C) 1998 NCSA
* All rights reserved.
* All rights reserved.
*
* Programmer: Robb Matzke <matzke@llnl.gov>
* Friday, October 30, 1998
* Programmer: Robb Matzke <matzke@llnl.gov>
* Friday, October 30, 1998
*
* Purpose: This file is included by all HDF5 library source files to
* define common things which are not defined in the HDF5 API.
@ -12,7 +12,7 @@
*/
#ifndef _H5private_H
#define _H5private_H
#include <H5public.h> /* Include Public Definitions */
#include <H5public.h> /* Include Public Definitions */
/*
* Include ANSI-C header files.
@ -47,7 +47,7 @@
/*
* The `struct stat' data type for stat() and fstat(). This is a Posix file
* but often apears on non-Posix systems also. The `struct stat' is required
* but often apears on non-Posix systems also. The `struct stat' is required
* for hdf5 to compile, although only a few fields are actually used.
*/
#ifdef HAVE_SYS_STAT_H
@ -82,7 +82,7 @@
#endif
/*
* Unix ioctls. These are used by h5ls (and perhaps others) to determine a
* Unix ioctls. These are used by h5ls (and perhaps others) to determine a
* resonable output width.
*/
#ifdef HAVE_SYS_IOCTL_H
@ -116,7 +116,7 @@
/*
* Does the compiler support the __attribute__(()) syntax? This is how gcc
* suppresses warnings about unused function arguments. It's no big deal if
* suppresses warnings about unused function arguments. It's no big deal if
* we don't.
*/
#ifdef HAVE_ATTRIBUTE
@ -132,14 +132,14 @@
* string.
*/
#ifndef HAVE_FUNCTION
# define __FUNCTION__ "NoFunctionName"
# define __FUNCTION__ "NoFunctionName"
#endif
/* Version #'s of the major components of the file format */
#define HDF5_BOOTBLOCK_VERSION 0 /* of the boot block format */
#define HDF5_FREESPACE_VERSION 0 /* of the Free-Space Info */
#define HDF5_OBJECTDIR_VERSION 0 /* of the Object Directory format */
#define HDF5_SHAREDHEADER_VERSION 0 /* of the Shared-Header Info */
#define HDF5_BOOTBLOCK_VERSION 0 /* of the boot block format */
#define HDF5_FREESPACE_VERSION 0 /* of the Free-Space Info */
#define HDF5_OBJECTDIR_VERSION 0 /* of the Object Directory format */
#define HDF5_SHAREDHEADER_VERSION 0 /* of the Shared-Header Info */
/*
* Status return values for the `herr_t' type.
@ -150,9 +150,9 @@
* function, remember to compare against zero and not one of these two
* values.
*/
#define SUCCEED 0
#define FAIL (-1)
#define UFAIL (unsigned)(-1)
#define SUCCEED 0
#define FAIL (-1)
#define UFAIL (unsigned)(-1)
/* number of members in an array */
#ifndef NELMTS
@ -168,7 +168,7 @@
/* maximum of two, three, or four values */
#undef MAX
#define MAX(a,b) (((a)>(b)) ? (a) : (b))
#define MAX(a,b) (((a)>(b)) ? (a) : (b))
#define MAX2(a,b) MAX(a,b)
#define MAX3(a,b,c) MAX(a,MAX(b,c))
#define MAX4(a,b,c,d) MAX(MAX(a,b),MAX(c,d))
@ -199,7 +199,7 @@
/*
* Although `long long' is part of the revised ANSI-C some compilers don't
* support it yet. We define `long_long' as the longest integral integer type
* supported by the compiler, usually 64 bits. It must be legal to qualify
* supported by the compiler, usually 64 bits. It must be legal to qualify
* `long_long' with `unsigned'.
*/
#if SIZEOF_LONG_LONG>0
@ -215,7 +215,7 @@
#endif
/*
* Numeric data types. Some of these might be defined in Posix.1g, otherwise
* Numeric data types. Some of these might be defined in Posix.1g, otherwise
* we define them with the closest available type which is at least as large
* as the number of bits indicated in the type name. The `int8' types *must*
* be exactly one byte wide because we use it for pointer calculations to
@ -353,7 +353,7 @@ typedef double float64;
#endif
/*
* Define a type for generic integers. Use this instead of `int' to
* Define a type for generic integers. Use this instead of `int' to
* show that some thought went into the algorithm.
*/
typedef int intn;
@ -363,13 +363,13 @@ typedef unsigned uintn;
* File addresses.
*/
typedef struct {
uint64_t offset; /*offset within an HDF5 file */
uint64_t offset; /*offset within an HDF5 file */
} haddr_t;
#define H5F_ADDR_UNDEF {((uint64_t)(-1L))}
/*
* Maximum and minimum values. These should be defined in <limits.h> for the
* Maximum and minimum values. These should be defined in <limits.h> for the
* most part.
*/
#ifndef LLONG_MAX
@ -386,7 +386,7 @@ typedef struct {
/*
* Some compilers have problems declaring auto variables that point
* to string constants. Use the CONSTR() macro so it's easy to fix
* to string constants. Use the CONSTR() macro so it's easy to fix
* those compilers.
*/
#ifndef CONSTR
@ -411,263 +411,263 @@ void H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds);
* Redefine all the POSIX functions. We should never see a POSIX
* function (or any other non-HDF5 function) in the source!
*/
#define HDabort() abort()
#define HDabs(X) abs(X)
#define HDaccess(F,M) access(F, M)
#define HDacos(X) acos(X)
#define HDalarm(N) alarm(N)
#define HDasctime(T) asctime(T)
#define HDasin(X) asin(X)
#define HDassert(X) assert(X)
#define HDatan(X) atan(X)
#define HDatan2(X,Y) atan2(X,Y)
#define HDatexit(F) atexit(F)
#define HDatof(S) atof(S)
#define HDatoi(S) atoi(S)
#define HDatol(S) atol(S)
#define HDbsearch(K,B,N,Z,F) bsearch(K,B,N,Z,F)
#define HDcalloc(N,Z) calloc(N,Z)
#define HDceil(X) ceil(X)
#define HDcfgetispeed(T) cfgetispeed(T)
#define HDcfgetospeed(T) cfgetospeed(T)
#define HDcfsetispeed(T,S) cfsetispeed(T,S)
#define HDcfsetospeed(T,S) cfsetospeed(T,S)
#define HDchdir(S) chdir(S)
#define HDchmod(S,M) chmod(S,M)
#define HDchown(S,O,G) chown(S,O,G)
#define HDclearerr(F) clearerr(F)
#define HDclock() clock()
#define HDclose(F) close(F)
#define HDclosedir(D) closedir(D)
#define HDcos(X) cos(X)
#define HDcosh(X) cosh(X)
#define HDcreat(S,M) creat(S,M)
#define HDctermid(S) ctermid(S)
#define HDctime(T) ctime(T)
#define HDcuserid(S) cuserid(S)
#define HDabort() abort()
#define HDabs(X) abs(X)
#define HDaccess(F,M) access(F, M)
#define HDacos(X) acos(X)
#define HDalarm(N) alarm(N)
#define HDasctime(T) asctime(T)
#define HDasin(X) asin(X)
#define HDassert(X) assert(X)
#define HDatan(X) atan(X)
#define HDatan2(X,Y) atan2(X,Y)
#define HDatexit(F) atexit(F)
#define HDatof(S) atof(S)
#define HDatoi(S) atoi(S)
#define HDatol(S) atol(S)
#define HDbsearch(K,B,N,Z,F) bsearch(K,B,N,Z,F)
#define HDcalloc(N,Z) calloc(N,Z)
#define HDceil(X) ceil(X)
#define HDcfgetispeed(T) cfgetispeed(T)
#define HDcfgetospeed(T) cfgetospeed(T)
#define HDcfsetispeed(T,S) cfsetispeed(T,S)
#define HDcfsetospeed(T,S) cfsetospeed(T,S)
#define HDchdir(S) chdir(S)
#define HDchmod(S,M) chmod(S,M)
#define HDchown(S,O,G) chown(S,O,G)
#define HDclearerr(F) clearerr(F)
#define HDclock() clock()
#define HDclose(F) close(F)
#define HDclosedir(D) closedir(D)
#define HDcos(X) cos(X)
#define HDcosh(X) cosh(X)
#define HDcreat(S,M) creat(S,M)
#define HDctermid(S) ctermid(S)
#define HDctime(T) ctime(T)
#define HDcuserid(S) cuserid(S)
#ifdef HAVE_DIFFTIME
#define HDdifftime(X,Y) difftime(X,Y)
#define HDdifftime(X,Y) difftime(X,Y)
#else
#define HDdifftime(X,Y) ((double)(X)-(double)(Y))
#endif
#define HDdiv(X,Y) div(X,Y)
#define HDdup(F) dup(F)
#define HDdup2(F,I) dup2(F,I)
#define HDdiv(X,Y) div(X,Y)
#define HDdup(F) dup(F)
#define HDdup2(F,I) dup2(F,I)
/* execl() variable arguments */
/* execle() variable arguments */
/* execlp() variable arguments */
#define HDexecv(S,AV) execv(S,AV)
#define HDexecve(S,AV,E) execve(S,AV,E)
#define HDexecvp(S,AV) execvp(S,AV)
#define HDexit(N) exit(N)
#define HD_exit(N) _exit(N)
#define HDexp(X) exp(X)
#define HDfabs(X) fabs(X)
#define HDfclose(F) fclose(F)
#define HDexecv(S,AV) execv(S,AV)
#define HDexecve(S,AV,E) execve(S,AV,E)
#define HDexecvp(S,AV) execvp(S,AV)
#define HDexit(N) exit(N)
#define HD_exit(N) _exit(N)
#define HDexp(X) exp(X)
#define HDfabs(X) fabs(X)
#define HDfclose(F) fclose(F)
/* fcntl() variable arguments */
#define HDfdopen(N,S) fdopen(N,S)
#define HDfeof(F) feof(F)
#define HDferror(F) ferror(F)
#define HDfflush(F) fflush(F)
#define HDfgetc(F) fgetc(F)
#define HDfgetpos(F,P) fgetpos(F,P)
#define HDfgets(S,N,F) fgets(S,N,F)
#define HDfileno(F) fileno(F)
#define HDfloor(X) floor(X)
#define HDfmod(X,Y) fmod(X,Y)
#define HDfopen(S,M) fopen(S,M)
#define HDfork() fork()
#define HDfpathconf(F,N) fpathconf(F,N)
#define HDfdopen(N,S) fdopen(N,S)
#define HDfeof(F) feof(F)
#define HDferror(F) ferror(F)
#define HDfflush(F) fflush(F)
#define HDfgetc(F) fgetc(F)
#define HDfgetpos(F,P) fgetpos(F,P)
#define HDfgets(S,N,F) fgets(S,N,F)
#define HDfileno(F) fileno(F)
#define HDfloor(X) floor(X)
#define HDfmod(X,Y) fmod(X,Y)
#define HDfopen(S,M) fopen(S,M)
#define HDfork() fork()
#define HDfpathconf(F,N) fpathconf(F,N)
int HDfprintf (FILE *stream, const char *fmt, ...);
#define HDfputc(C,F) fputc(C,F)
#define HDfputs(S,F) fputs(S,F)
#define HDfread(M,Z,N,F) fread(M,Z,N,F)
#define HDfree(M) free(M)
#define HDfreopen(S,M,F) freopen(S,M,F)
#define HDfrexp(X,N) frexp(X,N)
#define HDfputc(C,F) fputc(C,F)
#define HDfputs(S,F) fputs(S,F)
#define HDfread(M,Z,N,F) fread(M,Z,N,F)
#define HDfree(M) free(M)
#define HDfreopen(S,M,F) freopen(S,M,F)
#define HDfrexp(X,N) frexp(X,N)
/* fscanf() variable arguments */
#define HDfseek(F,O,W) fseek(F,O,W)
#define HDfsetpos(F,P) fsetpos(F,P)
#define HDfstat(F,B) fstat(F,B)
#define HDftell(F) ftell(F)
#define HDfwrite(M,Z,N,F) fwrite(M,Z,N,F)
#define HDgetc(F) getc(F)
#define HDgetchar() getchar()
#define HDgetcwd(S,Z) getcwd(S,Z)
#define HDgetegid() getegid()
#define HDgetenv(S) getenv(S)
#define HDgeteuid() geteuid()
#define HDgetgid() getgid()
#define HDgetgrgid(G) getgrgid(G)
#define HDgetgrnam(S) getgrnam(S)
#define HDgetgroups(Z,G) getgroups(Z,G)
#define HDgetlogin() getlogin()
#define HDgetpgrp() getpgrp()
#define HDgetpid() getpid()
#define HDgetppid() getppid()
#define HDgetpwnam(S) getpwnam(S)
#define HDgetpwuid(U) getpwuid(U)
#define HDgets(S) gets(S)
#define HDgetuid() getuid()
#define HDgmtime(T) gmtime(T)
#define HDisalnum(C) isalnum(C)
#define HDisalpha(C) isalpha(C)
#define HDisatty(F) isatty(F)
#define HDiscntrl(C) iscntrl(C)
#define HDisdigit(C) isdigit(C)
#define HDisgraph(C) isgraph(C)
#define HDislower(C) islower(C)
#define HDisprint(C) isprint(C)
#define HDispunct(C) ispunct(C)
#define HDisspace(C) isspace(C)
#define HDisupper(C) isupper(C)
#define HDisxdigit(C) isxdigit(C)
#define HDkill(P,S) kill(P,S)
#define HDlabs(X) labs(X)
#define HDldexp(X,N) ldexp(X,N)
#define HDldiv(X,Y) ldiv(X,Y)
#define HDlink(OLD,NEW) link(OLD,NEW)
#define HDlocaleconv() localeconv()
#define HDlocaltime(T) localtime(T)
#define HDlog(X) log(X)
#define HDlog10(X) log10(X)
#define HDlongjmp(J,N) longjmp(J,N)
#define HDlseek(F,O,W) lseek(F,O,W)
#define HDmalloc(Z) malloc(Z)
#define HDmblen(S,N) mblen(S,N)
#define HDmbstowcs(P,S,Z) mbstowcs(P,S,Z)
#define HDmbtowc(P,S,Z) mbtowc(P,S,Z)
#define HDmemchr(S,C,Z) memchr(S,C,Z)
#define HDmemcmp(X,Y,Z) memcmp(X,Y,Z)
#define HDmemcpy(X,Y,Z) memcpy(X,Y,Z)
#define HDmemmove(X,Y,Z) memmove(X,Y,Z)
#define HDmemset(X,C,Z) memset(X,C,Z)
#define HDmkdir(S,M) mkdir(S,M)
#define HDmkfifo(S,M) mkfifo(S,M)
#define HDmktime(T) mktime(T)
#define HDmodf(X,Y) modf(X,Y)
#define HDfseek(F,O,W) fseek(F,O,W)
#define HDfsetpos(F,P) fsetpos(F,P)
#define HDfstat(F,B) fstat(F,B)
#define HDftell(F) ftell(F)
#define HDfwrite(M,Z,N,F) fwrite(M,Z,N,F)
#define HDgetc(F) getc(F)
#define HDgetchar() getchar()
#define HDgetcwd(S,Z) getcwd(S,Z)
#define HDgetegid() getegid()
#define HDgetenv(S) getenv(S)
#define HDgeteuid() geteuid()
#define HDgetgid() getgid()
#define HDgetgrgid(G) getgrgid(G)
#define HDgetgrnam(S) getgrnam(S)
#define HDgetgroups(Z,G) getgroups(Z,G)
#define HDgetlogin() getlogin()
#define HDgetpgrp() getpgrp()
#define HDgetpid() getpid()
#define HDgetppid() getppid()
#define HDgetpwnam(S) getpwnam(S)
#define HDgetpwuid(U) getpwuid(U)
#define HDgets(S) gets(S)
#define HDgetuid() getuid()
#define HDgmtime(T) gmtime(T)
#define HDisalnum(C) isalnum(C)
#define HDisalpha(C) isalpha(C)
#define HDisatty(F) isatty(F)
#define HDiscntrl(C) iscntrl(C)
#define HDisdigit(C) isdigit(C)
#define HDisgraph(C) isgraph(C)
#define HDislower(C) islower(C)
#define HDisprint(C) isprint(C)
#define HDispunct(C) ispunct(C)
#define HDisspace(C) isspace(C)
#define HDisupper(C) isupper(C)
#define HDisxdigit(C) isxdigit(C)
#define HDkill(P,S) kill(P,S)
#define HDlabs(X) labs(X)
#define HDldexp(X,N) ldexp(X,N)
#define HDldiv(X,Y) ldiv(X,Y)
#define HDlink(OLD,NEW) link(OLD,NEW)
#define HDlocaleconv() localeconv()
#define HDlocaltime(T) localtime(T)
#define HDlog(X) log(X)
#define HDlog10(X) log10(X)
#define HDlongjmp(J,N) longjmp(J,N)
#define HDlseek(F,O,W) lseek(F,O,W)
#define HDmalloc(Z) malloc(Z)
#define HDmblen(S,N) mblen(S,N)
#define HDmbstowcs(P,S,Z) mbstowcs(P,S,Z)
#define HDmbtowc(P,S,Z) mbtowc(P,S,Z)
#define HDmemchr(S,C,Z) memchr(S,C,Z)
#define HDmemcmp(X,Y,Z) memcmp(X,Y,Z)
#define HDmemcpy(X,Y,Z) memcpy(X,Y,Z)
#define HDmemmove(X,Y,Z) memmove(X,Y,Z)
#define HDmemset(X,C,Z) memset(X,C,Z)
#define HDmkdir(S,M) mkdir(S,M)
#define HDmkfifo(S,M) mkfifo(S,M)
#define HDmktime(T) mktime(T)
#define HDmodf(X,Y) modf(X,Y)
#ifdef HAVE__O_BINARY
#define HDopen(S,F,M) open(S,F|_O_BINARY,M)
#else
#define HDopen(S,F,M) open(S,F,M)
#endif
#define HDopendir(S) opendir(S)
#define HDpathconf(S,N) pathconf(S,N)
#define HDpause() pause()
#define HDperror(S) perror(S)
#define HDpipe(F) pipe(F)
#define HDpow(X,Y) pow(X,Y)
#define HDopendir(S) opendir(S)
#define HDpathconf(S,N) pathconf(S,N)
#define HDpause() pause()
#define HDperror(S) perror(S)
#define HDpipe(F) pipe(F)
#define HDpow(X,Y) pow(X,Y)
/* printf() variable arguments */
#define HDputc(C,F) putc(C,F)
#define HDputchar(C) putchar(C)
#define HDputs(S) puts(S)
#define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
#define HDraise(N) raise(N)
#define HDrand() rand()
#define HDread(F,M,Z) read(F,M,Z)
#define HDreaddir(D) readdir(D)
#define HDrealloc(M,Z) realloc(M,Z)
#define HDremove(S) remove(S)
#define HDrename(OLD,NEW) rename(OLD,NEW)
#define HDrewind(F) rewind(F)
#define HDrewinddir(D) rewinddir(D)
#define HDrmdir(S) rmdir(S)
#define HDputc(C,F) putc(C,F)
#define HDputchar(C) putchar(C)
#define HDputs(S) puts(S)
#define HDqsort(M,N,Z,F) qsort(M,N,Z,F)
#define HDraise(N) raise(N)
#define HDrand() rand()
#define HDread(F,M,Z) read(F,M,Z)
#define HDreaddir(D) readdir(D)
#define HDrealloc(M,Z) realloc(M,Z)
#define HDremove(S) remove(S)
#define HDrename(OLD,NEW) rename(OLD,NEW)
#define HDrewind(F) rewind(F)
#define HDrewinddir(D) rewinddir(D)
#define HDrmdir(S) rmdir(S)
/* scanf() variable arguments */
#define HDsetbuf(F,S) setbuf(F,S)
#define HDsetgid(G) setgid(G)
#define HDsetjmp(J) setjmp(J)
#define HDsetlocale(N,S) setlocale(N,S)
#define HDsetpgid(P,PG) setpgid(P,PG)
#define HDsetsid() setsid()
#define HDsetuid(U) setuid(U)
#define HDsetvbuf(F,S,M,Z) setvbuf(F,S,M,Z)
#define HDsigaction(N,A) sigaction(N,A)
#define HDsigaddset(S,N) sigaddset(S,N)
#define HDsigdelset(S,N) sigdelset(S,N)
#define HDsigemptyset(S) sigemptyset(S)
#define HDsigfillset(S) sigfillset(S)
#define HDsigismember(S,N) sigismember(S,N)
#define HDsiglongjmp(J,N) siglongjmp(J,N)
#define HDsignal(N,F) signal(N,F)
#define HDsigpending(S) sigpending(S)
#define HDsigprocmask(H,S,O) sigprocmask(H,S,O)
#define HDsigsetjmp(J,N) sigsetjmp(J,N)
#define HDsigsuspend(S) sigsuspend(S)
#define HDsin(X) sin(X)
#define HDsinh(X) sinh(X)
#define HDsleep(N) sleep(N)
#define HDsetbuf(F,S) setbuf(F,S)
#define HDsetgid(G) setgid(G)
#define HDsetjmp(J) setjmp(J)
#define HDsetlocale(N,S) setlocale(N,S)
#define HDsetpgid(P,PG) setpgid(P,PG)
#define HDsetsid() setsid()
#define HDsetuid(U) setuid(U)
#define HDsetvbuf(F,S,M,Z) setvbuf(F,S,M,Z)
#define HDsigaction(N,A) sigaction(N,A)
#define HDsigaddset(S,N) sigaddset(S,N)
#define HDsigdelset(S,N) sigdelset(S,N)
#define HDsigemptyset(S) sigemptyset(S)
#define HDsigfillset(S) sigfillset(S)
#define HDsigismember(S,N) sigismember(S,N)
#define HDsiglongjmp(J,N) siglongjmp(J,N)
#define HDsignal(N,F) signal(N,F)
#define HDsigpending(S) sigpending(S)
#define HDsigprocmask(H,S,O) sigprocmask(H,S,O)
#define HDsigsetjmp(J,N) sigsetjmp(J,N)
#define HDsigsuspend(S) sigsuspend(S)
#define HDsin(X) sin(X)
#define HDsinh(X) sinh(X)
#define HDsleep(N) sleep(N)
#ifdef HAVE_SNPRINTF
# define HDsnprintf snprintf /*varargs*/
#endif
/* sprintf() variable arguments */
#define HDsqrt(X) sqrt(X)
#define HDsrand(N) srand(N)
#define HDsqrt(X) sqrt(X)
#define HDsrand(N) srand(N)
/* sscanf() variable arguments */
#define HDstat(S,B) stat(S,B)
#define HDstrcat(X,Y) strcat(X,Y)
#define HDstrchr(S,C) strchr(S,C)
#define HDstrcmp(X,Y) strcmp(X,Y)
#define HDstrcoll(X,Y) strcoll(X,Y)
#define HDstrcpy(X,Y) strcpy(X,Y)
#define HDstrcspn(X,Y) strcspn(X,Y)
#define HDstrerror(N) strerror(N)
#define HDstrftime(S,Z,F,T) strftime(S,Z,F,T)
#define HDstrlen(S) strlen(S)
#define HDstrncat(X,Y,Z) strncat(X,Y,Z)
#define HDstrncmp(X,Y,Z) strncmp(X,Y,Z)
#define HDstrncpy(X,Y,Z) strncpy(X,Y,Z)
#define HDstrpbrk(X,Y) strpbrk(X,Y)
#define HDstrrchr(S,C) strrchr(S,C)
#define HDstrspn(X,Y) strspn(X,Y)
#define HDstrstr(X,Y) strstr(X,Y)
#define HDstrtod(S,R) strtod(S,R)
#define HDstrtok(X,Y) strtok(X,Y)
#define HDstrtol(S,R,N) strtol(S,R,N)
#define HDstat(S,B) stat(S,B)
#define HDstrcat(X,Y) strcat(X,Y)
#define HDstrchr(S,C) strchr(S,C)
#define HDstrcmp(X,Y) strcmp(X,Y)
#define HDstrcoll(X,Y) strcoll(X,Y)
#define HDstrcpy(X,Y) strcpy(X,Y)
#define HDstrcspn(X,Y) strcspn(X,Y)
#define HDstrerror(N) strerror(N)
#define HDstrftime(S,Z,F,T) strftime(S,Z,F,T)
#define HDstrlen(S) strlen(S)
#define HDstrncat(X,Y,Z) strncat(X,Y,Z)
#define HDstrncmp(X,Y,Z) strncmp(X,Y,Z)
#define HDstrncpy(X,Y,Z) strncpy(X,Y,Z)
#define HDstrpbrk(X,Y) strpbrk(X,Y)
#define HDstrrchr(S,C) strrchr(S,C)
#define HDstrspn(X,Y) strspn(X,Y)
#define HDstrstr(X,Y) strstr(X,Y)
#define HDstrtod(S,R) strtod(S,R)
#define HDstrtok(X,Y) strtok(X,Y)
#define HDstrtol(S,R,N) strtol(S,R,N)
int64_t HDstrtoll (const char *s, const char **rest, int base);
#define HDstrtoul(S,R,N) strtoul(S,R,N)
#define HDstrxfrm(X,Y,Z) strxfrm(X,Y,Z)
#define HDsysconf(N) sysconf(N)
#define HDsystem(S) system(S)
#define HDtan(X) tan(X)
#define HDtanh(X) tanh(X)
#define HDtcdrain(F) tcdrain(F)
#define HDtcflow(F,A) tcflow(F,A)
#define HDtcflush(F,N) tcflush(F,N)
#define HDtcgetattr(F,T) tcgetattr(F,T)
#define HDtcgetpgrp(F) tcgetpgrp(F)
#define HDtcsendbreak(F,N) tcsendbreak(F,N)
#define HDtcsetattr(F,O,T) tcsetattr(F,O,T)
#define HDtcsetpgrp(F,N) tcsetpgrp(F,N)
#define HDtime(T) time(T)
#define HDtimes(T) times(T)
#define HDtmpfile() tmpfile()
#define HDtmpnam(S) tmpnam(S)
#define HDtolower(C) tolower(C)
#define HDtoupper(C) toupper(C)
#define HDttyname(F) ttyname(F)
#define HDtzset() tzset()
#define HDumask(N) umask(N)
#define HDuname(S) uname(S)
#define HDungetc(C,F) ungetc(C,F)
#define HDunlink(S) unlink(S)
#define HDutime(S,T) utime(S,T)
#define HDva_arg(A,T) va_arg(A,T)
#define HDva_end(A) va_end(A)
#define HDva_start(A,P) va_start(A,P)
#define HDvfprintf(F,FMT,A) vfprintf(F,FMT,A)
#define HDvprintf(FMT,A) vprintf(FMT,A)
#define HDvsprintf(S,FMT,A) vsprintf(S,FMT,A)
#define HDwait(W) wait(W)
#define HDwaitpid(P,W,O) waitpid(P,W,O)
#define HDwcstombs(S,P,Z) wcstombs(S,P,Z)
#define HDwctomb(S,C) wctomb(S,C)
#define HDwrite(F,M,Z) write(F,M,Z)
#define HDstrtoul(S,R,N) strtoul(S,R,N)
#define HDstrxfrm(X,Y,Z) strxfrm(X,Y,Z)
#define HDsysconf(N) sysconf(N)
#define HDsystem(S) system(S)
#define HDtan(X) tan(X)
#define HDtanh(X) tanh(X)
#define HDtcdrain(F) tcdrain(F)
#define HDtcflow(F,A) tcflow(F,A)
#define HDtcflush(F,N) tcflush(F,N)
#define HDtcgetattr(F,T) tcgetattr(F,T)
#define HDtcgetpgrp(F) tcgetpgrp(F)
#define HDtcsendbreak(F,N) tcsendbreak(F,N)
#define HDtcsetattr(F,O,T) tcsetattr(F,O,T)
#define HDtcsetpgrp(F,N) tcsetpgrp(F,N)
#define HDtime(T) time(T)
#define HDtimes(T) times(T)
#define HDtmpfile() tmpfile()
#define HDtmpnam(S) tmpnam(S)
#define HDtolower(C) tolower(C)
#define HDtoupper(C) toupper(C)
#define HDttyname(F) ttyname(F)
#define HDtzset() tzset()
#define HDumask(N) umask(N)
#define HDuname(S) uname(S)
#define HDungetc(C,F) ungetc(C,F)
#define HDunlink(S) unlink(S)
#define HDutime(S,T) utime(S,T)
#define HDva_arg(A,T) va_arg(A,T)
#define HDva_end(A) va_end(A)
#define HDva_start(A,P) va_start(A,P)
#define HDvfprintf(F,FMT,A) vfprintf(F,FMT,A)
#define HDvprintf(FMT,A) vprintf(FMT,A)
#define HDvsprintf(S,FMT,A) vsprintf(S,FMT,A)
#define HDwait(W) wait(W)
#define HDwaitpid(P,W,O) waitpid(P,W,O)
#define HDwcstombs(S,P,Z) wcstombs(S,P,Z)
#define HDwctomb(S,C) wctomb(S,C)
#define HDwrite(F,M,Z) write(F,M,Z)
/*
* And now for a couple non-Posix functions...
*/
char *strdup(const char *s);
#define HDstrdup(S) strdup(S)
#define HDstrdup(S) strdup(S)
#ifndef HAVE_SNPRINTF
int HDsnprintf(char *buf, size_t size, const char *fmt, ...);
@ -675,8 +675,8 @@ int HDsnprintf(char *buf, size_t size, const char *fmt, ...);
/*
* These macros check whether debugging has been requested for a certain
* package at run-time. Code for debugging is conditionally compiled by
* defining constants like `H5X_DEBUG'. In order to see the output though
* package at run-time. Code for debugging is conditionally compiled by
* defining constants like `H5X_DEBUG'. In order to see the output though
* the code must be enabled at run-time with an environment variable
* HDF5_DEBUG which is a list of packages to debug.
*
@ -695,7 +695,7 @@ typedef enum {
H5_PKG_HL, /*Local heap */
H5_PKG_I, /*Interface */
H5_PKG_MF, /*File memory management */
H5_PKG_MM, /*Core memory management */
H5_PKG_MM, /*Core memory management */
H5_PKG_O, /*Object headers */
H5_PKG_P, /*Property lists */
H5_PKG_S, /*Data spaces */
@ -725,7 +725,7 @@ extern H5_debug_t H5_debug_g;
* Arguments: R - Return type encoded as a string
* T - Argument types encoded as a string
* A0-An - Arguments. The number at the end of the macro name
* indicates the number of arguments.
* indicates the number of arguments.
*
* Programmer: Robb Matzke
*
@ -735,32 +735,32 @@ extern H5_debug_t H5_debug_g;
#ifdef H5_DEBUG_API
#define H5TRACE_DECL const char *RTYPE=NULL
#define H5TRACE0(R,T) RTYPE=R; \
H5_trace(0,FUNC,T)
H5_trace(0,FUNC,T)
#define H5TRACE1(R,T,A0) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0)
H5_trace(0,FUNC,T,#A0,A0)
#define H5TRACE2(R,T,A0,A1) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1)
#define H5TRACE3(R,T,A0,A1,A2) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2)
H5_trace(0,FUNC,T,#A0,A0,#A1,A1)
#define H5TRACE3(R,T,A0,A1,A2) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2)
#define H5TRACE4(R,T,A0,A1,A2,A3) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3)
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3)
#define H5TRACE5(R,T,A0,A1,A2,A3,A4) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4)
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4)
#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4, \
#A5,A5)
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4, \
#A5,A5)
#define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6) RTYPE=R; \
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4, \
#A5,A5,#A6,A6)
H5_trace(0,FUNC,T,#A0,A0,#A1,A1, \
#A2,A2,#A3,A3,#A4,A4, \
#A5,A5,#A6,A6)
#define H5TRACE_RETURN(V) if (RTYPE) { \
H5_trace(1,NULL,RTYPE,NULL,V); \
RTYPE=NULL; \
}
H5_trace(1,NULL,RTYPE,NULL,V); \
RTYPE=NULL; \
}
#else
#define H5TRACE_DECL /*void*/
#define H5TRACE0(R,T) /*void*/
@ -778,54 +778,54 @@ void H5_trace (hbool_t returning, const char *func, const char *type, ...);
/*-------------------------------------------------------------------------
* Purpose: Register function entry for library initialization and code
* profiling.
* Purpose: Register function entry for library initialization and code
* profiling.
*
* Notes: Every file must have a file-scope variable called
* `initialize_interface_g' of type hbool_t which is initialized
* to FALSE.
* Notes: Every file must have a file-scope variable called
* `initialize_interface_g' of type hbool_t which is initialized
* to FALSE.
*
* Don't use local variable initializers which contain
* calls to other library functions since the initializer
* would happen before the FUNC_ENTER() gets called. Don't
* use initializers that require special cleanup code to
* execute if FUNC_ENTER() fails since a failing FUNC_ENTER()
* returns immediately without branching to the `done' label.
* Don't use local variable initializers which contain
* calls to other library functions since the initializer
* would happen before the FUNC_ENTER() gets called. Don't
* use initializers that require special cleanup code to
* execute if FUNC_ENTER() fails since a failing FUNC_ENTER()
* returns immediately without branching to the `done' label.
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
*
* Modifications:
*
* Robb Matzke, 4 Aug 1997
* The `interface_init_func' can be the null pointer. Changed
* HGOTO_ERROR() to HRETURN_ERROR() since no clean-up needs to occur
* when an error is detected at this point since this must be the
* first executable statement in a function. This allows functions
* to omit the `done:' label when convenient to do so.
* Robb Matzke, 4 Aug 1997
* The `interface_init_func' can be the null pointer. Changed
* HGOTO_ERROR() to HRETURN_ERROR() since no clean-up needs to occur
* when an error is detected at this point since this must be the
* first executable statement in a function. This allows functions
* to omit the `done:' label when convenient to do so.
*
* Robb Matzke, 4 Aug 1997
* The pablo mask comes from the constant PABLO_MASK defined on
* a per-file basis. The `pablo_func_id' is generated from the
* `func_name' argument by prepending an `ID_' to the name. The
* pablo function identifier should be saved in a local variable
* so FUNC_LEAVE() can access it.
* Robb Matzke, 4 Aug 1997
* The pablo mask comes from the constant PABLO_MASK defined on
* a per-file basis. The `pablo_func_id' is generated from the
* `func_name' argument by prepending an `ID_' to the name. The
* pablo function identifier should be saved in a local variable
* so FUNC_LEAVE() can access it.
*
* Robb Matzke, 4 Aug 1997
* It is safe to call this function even inside various library
* initializing functions. Infinite recursion is no longer a
* danger.
* Robb Matzke, 4 Aug 1997
* It is safe to call this function even inside various library
* initializing functions. Infinite recursion is no longer a
* danger.
*
* Robb Matzke, 3 Dec 1997
* The interface initialization function is no longer passed as an
* argument unless the `FUNC_ENTER_INIT' form is called. Instead, the
* function comes from the `INTERFACE_INIT' constant which must be
* defined in every source file.
* Robb Matzke, 3 Dec 1997
* The interface initialization function is no longer passed as an
* argument unless the `FUNC_ENTER_INIT' form is called. Instead, the
* function comes from the `INTERFACE_INIT' constant which must be
* defined in every source file.
*
* Robb Matzke, 17 Jun 1998
* Robb Matzke, 17 Jun 1998
* Added auto variable RTYPE which is initialized by the tracing macros.
*-------------------------------------------------------------------------
*/
extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */
extern hbool_t H5_libinit_g; /*good thing C's lazy about extern! */
/* Is `S' the name of an API function? */
#define H5_IS_API(S) ('_'!=S[2] && '_'!=S[3] && (!S[4] || '_'!=S[4]))
@ -840,21 +840,21 @@ extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */
PABLO_TRACE_ON (PABLO_MASK, pablo_func_id); \
\
/* Initialize the library */ \
if (!library_initialize_g) { \
library_initialize_g = TRUE; \
if (!H5_libinit_g) { \
H5_libinit_g = TRUE; \
if (H5_init_library()<0) { \
HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
"library initialization failed"); \
HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
"library initialization failed"); \
} \
} \
} \
\
/* Initialize this interface or bust */ \
if (!interface_initialize_g) { \
interface_initialize_g = 1; \
if (interface_init_func && \
((herr_t(*)(void))interface_init_func)()<0) { \
HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
"interface initialization failed"); \
((herr_t(*)(void))interface_init_func)()<0) { \
HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err, \
"interface initialization failed"); \
} \
} else if (interface_initialize_g<0) { \
HRETURN_ERROR(H5E_FUNC, H5E_CANTINIT, err, \
@ -869,17 +869,17 @@ extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */
{
/*-------------------------------------------------------------------------
* Purpose: Register function exit for code profiling. This should be
* the last statement executed by a function.
* Purpose: Register function exit for code profiling. This should be
* the last statement executed by a function.
*
* Programmer: Quincey Koziol
* Programmer: Quincey Koziol
*
* Modifications:
*
* Robb Matzke, 4 Aug 1997
* The pablo mask comes from the constant PABLO_MASK defined on a
* per-file basis. The pablo_func_id comes from an auto variable
* defined by FUNC_ENTER.
* Robb Matzke, 4 Aug 1997
* The pablo mask comes from the constant PABLO_MASK defined on a
* per-file basis. The pablo_func_id comes from an auto variable
* defined by FUNC_ENTER.
*
*-------------------------------------------------------------------------
*/
@ -891,12 +891,12 @@ extern hbool_t library_initialize_g; /*good thing C's lazy about extern! */
* through one of these two sets of macros.
*/
#ifdef HAVE_PABLO
# define PABLO_SAVE(func_id) intn pablo_func_id = func_id
# define PABLO_TRACE_ON(m, f) TRACE_ON(m,f)
# define PABLO_SAVE(func_id) intn pablo_func_id = func_id
# define PABLO_TRACE_ON(m, f) TRACE_ON(m,f)
# define PABLO_TRACE_OFF(m, f) TRACE_OFF(m,f)
#else
# define PABLO_SAVE(func_id) /*void */
# define PABLO_TRACE_ON(m, f) /*void */
# define PABLO_SAVE(func_id) /*void */
# define PABLO_TRACE_ON(m, f) /*void */
# define PABLO_TRACE_OFF(m, f) /*void */
#endif

View File

@ -18,6 +18,10 @@
#include <H5config.h> /*from configure */
#include <sys/types.h>
#ifdef STDC_HEADERS
# include <limits.h> /*for H5T_NATIVE_CHAR defn in H5Tpublic.h */
#endif
#include <stddef.h>
#ifdef HAVE_PARALLEL
# include <mpi.h>