mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
[svn-r6411] Purpose:
Code cleanup Description: Clean up miscellaneous warnings which have crept into the code. Fix "_POSIX_C_SOURCE not defined" warning on FreeBSD. Adjust gcc compiler flags to be more concise for production mode. Refactor the H5O code so that there is a stronger boundary between code in the H5O package and code in the library which just calls H5O routines. Platforms tested: Tested h5committest {arabica (fortran), eirene (fortran, C++) modi4 (parallel, fortran)} FreeBSD 4.7 (sleipnir) serial & parallel and gcc 2.95.4 & gcc 3.2.2 Misc. update: Update MANIFEST if you add or remove any file.
This commit is contained in:
parent
fb4be743d3
commit
946c606452
3
MANIFEST
3
MANIFEST
@ -871,13 +871,12 @@
|
||||
./src/H5Odtype.c
|
||||
./src/H5Oefl.c
|
||||
./src/H5Ofill.c
|
||||
./src/H5Ofphdf5.c
|
||||
./src/H5Olayout.c
|
||||
./src/H5Omtime.c
|
||||
./src/H5Oname.c
|
||||
./src/H5Onull.c
|
||||
./src/H5Opkg.h
|
||||
./src/H5Opline.c
|
||||
./src/H5Oplist.c
|
||||
./src/H5Oprivate.h
|
||||
./src/H5Opublic.h
|
||||
./src/H5Osdspace.c
|
||||
|
@ -14,6 +14,10 @@ fi
|
||||
# Architecture-specific flags
|
||||
ARCH=
|
||||
|
||||
# Add "_POSIX_C_SOURCE" define to cpp flags, to quiet warnings
|
||||
# from /usr/include/sys/cdefs.h
|
||||
CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=1"
|
||||
|
||||
# Omit frame pointer for optimized code?
|
||||
NOFP=${NOFP:=-fomit-frame-pointer}
|
||||
|
||||
|
@ -131,7 +131,7 @@ case "$cc_vendor-$cc_version" in
|
||||
CFLAGS="$CFLAGS $ARCH -ansi -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
|
||||
|
||||
# Production
|
||||
PROD_CFLAGS="-O2 $NOFP -finline-functions"
|
||||
PROD_CFLAGS="-O3 $NOFP"
|
||||
PROD_CPPFLAGS=
|
||||
|
||||
# Debug
|
||||
|
26
src/H5.c
26
src/H5.c
@ -1,16 +1,16 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* private headers */
|
||||
#include "H5private.h" /*library */
|
||||
|
86
src/H5A.c
86
src/H5A.c
@ -1,33 +1,33 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#define H5A_PACKAGE /*suppress error about including H5Apkg */
|
||||
#define H5S_PACKAGE /*suppress error about including H5Spkg */
|
||||
|
||||
/* Private header files */
|
||||
#include "H5private.h" /* Generic Functions */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5Apkg.h" /* Attributes */
|
||||
#include "H5Bprivate.h" /* B-tree subclass names */
|
||||
#include "H5Dprivate.h" /* Datasets */
|
||||
#include "H5Gprivate.h" /* Groups */
|
||||
#include "H5Tprivate.h" /* Datatypes */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5Gprivate.h" /* Groups */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5Oprivate.h" /* Object Headers */
|
||||
#include "H5Spkg.h" /* Data-space functions */
|
||||
#include "H5Apkg.h" /* Attributes */
|
||||
#include "H5Pprivate.h" /* Property lists */
|
||||
#include "H5Spkg.h" /* Dataspace functions */
|
||||
#include "H5Tprivate.h" /* Datatypes */
|
||||
|
||||
#define PABLO_MASK H5A_mask
|
||||
|
||||
@ -251,8 +251,10 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry");
|
||||
|
||||
/* Compute the internal sizes */
|
||||
attr->dt_size=(H5O_DTYPE[0].raw_size)(attr->ent.file,type);
|
||||
attr->ds_size=(H5O_SDSPACE[0].raw_size)(attr->ent.file,&(space->extent.u.simple));
|
||||
attr->dt_size=H5O_raw_size(H5O_DTYPE_ID,attr->ent.file,type);
|
||||
assert(attr->dt_size>0);
|
||||
attr->ds_size=H5O_raw_size(H5O_SDSPACE_ID,attr->ent.file,&(space->extent.u.simple));
|
||||
assert(attr->ds_size>0);
|
||||
H5_ASSIGN_OVERFLOW(attr->data_size,H5S_get_simple_extent_npoints(attr->ds)*H5T_get_size(attr->dt),hssize_t,size_t);
|
||||
|
||||
/* Hold the symbol table entry (and file) open */
|
||||
@ -262,22 +264,22 @@ H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
|
||||
|
||||
/* Read in the existing attributes to check for duplicates */
|
||||
seq=0;
|
||||
while(H5O_read(&(attr->ent), H5O_ATTR, seq, &found_attr, dxpl_id)!=NULL) {
|
||||
while(H5O_read(&(attr->ent), H5O_ATTR_ID, seq, &found_attr, dxpl_id)!=NULL) {
|
||||
/*
|
||||
* Compare found attribute name to new attribute name reject creation
|
||||
* if names are the same.
|
||||
*/
|
||||
if(HDstrcmp(found_attr.name,attr->name)==0) {
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_ALREADYEXISTS, FAIL, "attribute already exists");
|
||||
}
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
seq++;
|
||||
}
|
||||
H5E_clear ();
|
||||
|
||||
/* Create the attribute message and save the attribute index */
|
||||
if (H5O_modify(&(attr->ent), H5O_ATTR, H5O_NEW_MESG, 0, 1, attr, dxpl_id) < 0)
|
||||
if (H5O_modify(&(attr->ent), H5O_ATTR_ID, H5O_NEW_MESG, 0, 1, attr, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages");
|
||||
|
||||
/* Register the new attribute and get an ID for it */
|
||||
@ -331,17 +333,17 @@ H5A_get_index(H5G_entry_t *ent, const char *name, hid_t dxpl_id)
|
||||
|
||||
/* Look up the attribute for the object */
|
||||
i=0;
|
||||
while(H5O_read(ent, H5O_ATTR, i, &found_attr, dxpl_id)!=NULL) {
|
||||
while(H5O_read(ent, H5O_ATTR_ID, i, &found_attr, dxpl_id)!=NULL) {
|
||||
/*
|
||||
* Compare found attribute name to new attribute name reject creation
|
||||
* if names are the same.
|
||||
*/
|
||||
if(HDstrcmp(found_attr.name,name)==0) {
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
ret_value = i;
|
||||
break;
|
||||
}
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
i++;
|
||||
}
|
||||
H5E_clear ();
|
||||
@ -497,7 +499,7 @@ H5A_open(H5G_entry_t *ent, unsigned idx, hid_t dxpl_id)
|
||||
|
||||
/* Read in attribute with H5O_read() */
|
||||
H5_CHECK_OVERFLOW(idx,unsigned,int);
|
||||
if (NULL==(attr=H5O_read(ent, H5O_ATTR, (int)idx, attr, dxpl_id)))
|
||||
if (NULL==(attr=H5O_read(ent, H5O_ATTR_ID, (int)idx, attr, dxpl_id)))
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from dataset header");
|
||||
attr->initialized=1;
|
||||
|
||||
@ -652,7 +654,7 @@ H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
|
||||
|
||||
/* Modify the attribute data */
|
||||
attr->data=tconv_buf; /* Set the data pointer temporarily */
|
||||
if (H5O_modify(&(attr->ent), H5O_ATTR, idx, 0, 1, attr, dxpl_id) < 0)
|
||||
if (H5O_modify(&(attr->ent), H5O_ATTR_ID, idx, 0, 1, attr, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL,
|
||||
"unable to update attribute header messages");
|
||||
|
||||
@ -1113,7 +1115,7 @@ H5Aget_num_attrs(hid_t loc_id)
|
||||
}
|
||||
|
||||
/* Look up the attribute for the object */
|
||||
ret_value=H5O_count(ent, H5O_ATTR, H5AC_ind_dxpl_id);
|
||||
ret_value=H5O_count(ent, H5O_ATTR_ID, H5AC_ind_dxpl_id);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value);
|
||||
@ -1197,7 +1199,7 @@ H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t d
|
||||
|
||||
/* Read in the existing attributes to check for duplicates */
|
||||
seq=0;
|
||||
while(H5O_read(ent, H5O_ATTR, seq, found_attr, dxpl_id)!=NULL) {
|
||||
while(H5O_read(ent, H5O_ATTR_ID, seq, found_attr, dxpl_id)!=NULL) {
|
||||
/*
|
||||
* Compare found attribute name.
|
||||
*/
|
||||
@ -1205,7 +1207,7 @@ H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t d
|
||||
idx = seq;
|
||||
break;
|
||||
}
|
||||
H5O_reset (H5O_ATTR, found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, found_attr);
|
||||
seq++;
|
||||
}
|
||||
|
||||
@ -1224,7 +1226,7 @@ H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t d
|
||||
found_attr->initialized=TRUE;
|
||||
|
||||
/* Modify the attribute message */
|
||||
if (H5O_modify(ent, H5O_ATTR, idx, 0, 1, found_attr, dxpl_id) < 0)
|
||||
if (H5O_modify(ent, H5O_ATTR_ID, idx, 0, 1, found_attr, dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages");
|
||||
|
||||
/* Close the attribute */
|
||||
@ -1303,17 +1305,17 @@ H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
|
||||
* reasonable.
|
||||
*/
|
||||
idx = attr_num ? (int)*attr_num : 0;
|
||||
if(idx<H5O_count(ent, H5O_ATTR, H5AC_dxpl_id)) {
|
||||
while(H5O_read(ent, H5O_ATTR, idx++, &found_attr, H5AC_dxpl_id)!=NULL) {
|
||||
if(idx<H5O_count(ent, H5O_ATTR_ID, H5AC_dxpl_id)) {
|
||||
while(H5O_read(ent, H5O_ATTR_ID, idx++, &found_attr, H5AC_dxpl_id)!=NULL) {
|
||||
/*
|
||||
* Compare found attribute name to new attribute name reject
|
||||
* creation if names are the same.
|
||||
*/
|
||||
if((ret_value=(op)(loc_id,found_attr.name,op_data))!=0) {
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
break;
|
||||
}
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
}
|
||||
H5E_clear ();
|
||||
}
|
||||
@ -1372,17 +1374,17 @@ H5Adelete(hid_t loc_id, const char *name)
|
||||
|
||||
/* Look up the attribute for the object */
|
||||
idx=0;
|
||||
while(H5O_read(ent, H5O_ATTR, idx, &found_attr, H5AC_dxpl_id)!=NULL) {
|
||||
while(H5O_read(ent, H5O_ATTR_ID, idx, &found_attr, H5AC_dxpl_id)!=NULL) {
|
||||
/*
|
||||
* Compare found attribute name to new attribute name reject
|
||||
* creation if names are the same.
|
||||
*/
|
||||
if(HDstrcmp(found_attr.name,name)==0) {
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
found = idx;
|
||||
break;
|
||||
}
|
||||
H5O_reset (H5O_ATTR, &found_attr);
|
||||
H5O_reset (H5O_ATTR_ID, &found_attr);
|
||||
idx++;
|
||||
}
|
||||
H5E_clear ();
|
||||
@ -1390,7 +1392,7 @@ H5Adelete(hid_t loc_id, const char *name)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "attribute not found");
|
||||
|
||||
/* Delete the attribute from the location */
|
||||
if ((ret_value=H5O_remove(ent, H5O_ATTR, found, H5AC_dxpl_id)) < 0)
|
||||
if ((ret_value=H5O_remove(ent, H5O_ATTR_ID, found, H5AC_dxpl_id)) < 0)
|
||||
HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute header message");
|
||||
|
||||
done:
|
||||
|
84
src/H5D.c
84
src/H5D.c
@ -1,16 +1,16 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#define H5S_PACKAGE /*suppress error about including H5Spkg */
|
||||
|
||||
@ -488,7 +488,7 @@ H5D_crt_copy(hid_t new_plist_id, hid_t old_plist_id, void UNUSED *copy_data)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
|
||||
|
||||
/* Make copies of fill value, external file list, and data pipeline */
|
||||
if(src_fill.buf && (NULL==H5O_copy(H5O_FILL, &src_fill, &dst_fill))) {
|
||||
if(src_fill.buf && (NULL==H5O_copy(H5O_FILL_ID, &src_fill, &dst_fill))) {
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy fill value");
|
||||
}
|
||||
else if (!src_fill.buf) {
|
||||
@ -496,9 +496,9 @@ H5D_crt_copy(hid_t new_plist_id, hid_t old_plist_id, void UNUSED *copy_data)
|
||||
dst_fill.size = src_fill.size;
|
||||
}
|
||||
HDmemset(&dst_efl,0,sizeof(H5O_efl_t));
|
||||
if(NULL==H5O_copy(H5O_EFL, &src_efl, &dst_efl))
|
||||
if(NULL==H5O_copy(H5O_EFL_ID, &src_efl, &dst_efl))
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy external file list");
|
||||
if(NULL==H5O_copy(H5O_PLINE, &src_pline, &dst_pline))
|
||||
if(NULL==H5O_copy(H5O_PLINE_ID, &src_pline, &dst_pline))
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy data pipeline");
|
||||
|
||||
/* Set the fill value, external file list, and data pipeline property
|
||||
@ -559,9 +559,9 @@ H5D_crt_close(hid_t dcpl_id, void UNUSED *close_data)
|
||||
|
||||
/* Clean up any values set for the fill-value, external file-list and
|
||||
* data pipeline */
|
||||
H5O_reset(H5O_FILL, &fill);
|
||||
H5O_reset(H5O_EFL, &efl);
|
||||
H5O_reset(H5O_PLINE, &pline);
|
||||
H5O_reset(H5O_FILL_ID, &fill);
|
||||
H5O_reset(H5O_EFL_ID, &efl);
|
||||
H5O_reset(H5O_PLINE_ID, &pline);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
@ -1531,7 +1531,7 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
H5O_fill_new_t fill = { NULL, 0, NULL, H5D_ALLOC_TIME_LATE, H5D_FILL_TIME_ALLOC, TRUE };
|
||||
H5D_fill_value_t fill_status;
|
||||
|
||||
H5O_t *oh=NULL; /* Pointer to dataset's object header */
|
||||
struct H5O_t *oh=NULL; /* Pointer to dataset's object header */
|
||||
|
||||
/* return code */
|
||||
herr_t ret_value = SUCCEED;
|
||||
@ -1589,7 +1589,7 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined");
|
||||
|
||||
if (fill_status == H5D_FILL_VALUE_DEFAULT || fill_status == H5D_FILL_VALUE_USER_DEFINED) {
|
||||
if (H5O_copy(H5O_FILL, fill_prop, &fill) == NULL)
|
||||
if (H5O_copy(H5O_FILL_ID, fill_prop, &fill) == NULL)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to copy fill value");
|
||||
|
||||
if (fill_prop->buf && fill_prop->size > 0 && H5O_fill_convert(&fill, type, dxpl_id) < 0)
|
||||
@ -1611,20 +1611,20 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to create dataset");
|
||||
|
||||
/* Write new fill value message */
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_FILL_NEW, H5O_FLAG_CONSTANT, &fill) < 0)
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_FILL_NEW_ID, H5O_FLAG_CONSTANT, &fill) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message");
|
||||
|
||||
/* If there is valid information for the old fill value struct, update it */
|
||||
if (fill.buf) {
|
||||
/* Clear any previous values */
|
||||
H5O_reset(H5O_FILL, fill_prop);
|
||||
H5O_reset(H5O_FILL_ID, fill_prop);
|
||||
|
||||
/* Copy new fill value information to old fill value struct */
|
||||
if(H5O_copy(H5O_FILL, &fill, fill_prop) == NULL)
|
||||
if(H5O_copy(H5O_FILL_ID, &fill, fill_prop) == NULL)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL,"unable to copy fill value");
|
||||
|
||||
/* Write old fill value */
|
||||
if (fill_prop->buf && H5O_append(file, dxpl_id, oh, H5O_FILL, H5O_FLAG_CONSTANT, fill_prop) < 0)
|
||||
if (fill_prop->buf && H5O_append(file, dxpl_id, oh, H5O_FILL_ID, H5O_FLAG_CONSTANT, fill_prop) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message");
|
||||
|
||||
/* Update dataset creation property */
|
||||
@ -1633,7 +1633,7 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
} /* end if */
|
||||
|
||||
/* Update the type and space header messages */
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_DTYPE, H5O_FLAG_CONSTANT | H5O_FLAG_SHARED, type) < 0 ||
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_DTYPE_ID, H5O_FLAG_CONSTANT | H5O_FLAG_SHARED, type) < 0 ||
|
||||
H5S_append(file, dxpl_id, oh, space) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update type or space header messages");
|
||||
|
||||
@ -1645,7 +1645,7 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve pipeline filter");
|
||||
|
||||
if (pline.nfilters > 0 &&
|
||||
H5O_append(file, dxpl_id, oh, H5O_PLINE, H5O_FLAG_CONSTANT, &pline) < 0)
|
||||
H5O_append(file, dxpl_id, oh, H5O_PLINE_ID, H5O_FLAG_CONSTANT, &pline) < 0)
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update filter header message");
|
||||
} /* end if */
|
||||
|
||||
@ -1681,14 +1681,14 @@ H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *p
|
||||
efl->slot[i].name_offset = offset;
|
||||
}
|
||||
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_EFL, H5O_FLAG_CONSTANT, efl) < 0)
|
||||
if (H5O_append(file, dxpl_id, oh, H5O_EFL_ID, H5O_FLAG_CONSTANT, efl) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update external file list message");
|
||||
}
|
||||
|
||||
/* Update layout message */
|
||||
/* (Don't make layout message constant yet, since space may not be allocated) */
|
||||
/* Note: this is relying on H5D_alloc_storage not calling H5O_modify during dataset creation */
|
||||
if (H5D_COMPACT != layout->type && H5O_append(file, dxpl_id, oh, H5O_LAYOUT, 0, layout) < 0)
|
||||
if (H5D_COMPACT != layout->type && H5O_append(file, dxpl_id, oh, H5O_LAYOUT_ID, 0, layout) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout");
|
||||
|
||||
#ifdef H5O_ENABLE_BOGUS
|
||||
@ -2047,14 +2047,14 @@ H5D_isa(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
assert(ent);
|
||||
|
||||
/* Data type */
|
||||
if ((exists=H5O_exists(ent, H5O_DTYPE, 0, dxpl_id))<0) {
|
||||
if ((exists=H5O_exists(ent, H5O_DTYPE_ID, 0, dxpl_id))<0) {
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header");
|
||||
} else if (!exists) {
|
||||
HGOTO_DONE(FALSE);
|
||||
}
|
||||
|
||||
/* Layout */
|
||||
if ((exists=H5O_exists(ent, H5O_LAYOUT, 0, dxpl_id))<0) {
|
||||
if ((exists=H5O_exists(ent, H5O_LAYOUT_ID, 0, dxpl_id))<0) {
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header");
|
||||
} else if (!exists) {
|
||||
HGOTO_DONE(FALSE);
|
||||
@ -2185,7 +2185,7 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "unable to open");
|
||||
|
||||
/* Get the type and space */
|
||||
if (NULL==(dataset->type=H5O_read(&(dataset->ent), H5O_DTYPE, 0, NULL, dxpl_id)))
|
||||
if (NULL==(dataset->type=H5O_read(&(dataset->ent), H5O_DTYPE_ID, 0, NULL, dxpl_id)))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to load type info from dataset header");
|
||||
|
||||
if (NULL==(dataset->space=H5S_read(&(dataset->ent),dxpl_id)))
|
||||
@ -2196,7 +2196,7 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get dataset creation property list");
|
||||
|
||||
/* Get the optional filters message */
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_PLINE, 0, &pline, dxpl_id)) {
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_PLINE_ID, 0, &pline, dxpl_id)) {
|
||||
H5E_clear();
|
||||
HDmemset(&pline, 0, sizeof(pline));
|
||||
}
|
||||
@ -2213,7 +2213,7 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
* values are copied to the dataset create plist so the user can query
|
||||
* them.
|
||||
*/
|
||||
if (NULL==H5O_read(&(dataset->ent), H5O_LAYOUT, 0, &(dataset->layout), dxpl_id))
|
||||
if (NULL==H5O_read(&(dataset->ent), H5O_LAYOUT_ID, 0, &(dataset->layout), dxpl_id))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to read data layout message");
|
||||
switch (dataset->layout.type) {
|
||||
case H5D_CONTIGUOUS:
|
||||
@ -2254,10 +2254,10 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
/* Retrieve & release the previous fill-value settings */
|
||||
if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, fill_prop) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't get fill value");
|
||||
H5O_reset(H5O_FILL, fill_prop);
|
||||
H5O_reset(H5O_FILL_ID, fill_prop);
|
||||
|
||||
/* Get the new fill value message */
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_FILL_NEW, 0, &fill, dxpl_id)) {
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_FILL_NEW_ID, 0, &fill, dxpl_id)) {
|
||||
H5E_clear();
|
||||
HDmemset(&fill, 0, sizeof(fill));
|
||||
|
||||
@ -2280,12 +2280,12 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
} /* end switch */
|
||||
} /* end if */
|
||||
if(fill.fill_defined) {
|
||||
if(NULL==H5O_copy(H5O_FILL, &fill, fill_prop))
|
||||
if(NULL==H5O_copy(H5O_FILL_ID, &fill, fill_prop))
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't copy fill value");
|
||||
} else {
|
||||
/* For compatibility with v1.4. Retrieve the old fill value message.
|
||||
* If size is 0, make it -1 for undefined. */
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_FILL, 0, fill_prop, dxpl_id)) {
|
||||
if(NULL == H5O_read(&(dataset->ent), H5O_FILL_ID, 0, fill_prop, dxpl_id)) {
|
||||
H5E_clear();
|
||||
HDmemset(fill_prop, 0, sizeof(H5O_fill_t));
|
||||
}
|
||||
@ -2309,7 +2309,7 @@ H5D_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
* also undefined when space allocate time is H5D_ALLOC_TIME_LATE. */
|
||||
if( !H5F_addr_defined(dataset->layout.addr)) {
|
||||
HDmemset(&dataset->efl,0,sizeof(H5O_efl_t));
|
||||
if(NULL != H5O_read(&(dataset->ent), H5O_EFL, 0, &dataset->efl, dxpl_id))
|
||||
if(NULL != H5O_read(&(dataset->ent), H5O_EFL_ID, 0, &dataset->efl, dxpl_id))
|
||||
if(H5P_set(plist, H5D_CRT_EXT_FILE_LIST_NAME, &dataset->efl) < 0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set external file list");
|
||||
}
|
||||
@ -2385,7 +2385,7 @@ H5D_close(H5D_t *dataset)
|
||||
|
||||
/* Update header message of layout for compact dataset. */
|
||||
if(dataset->layout.type==H5D_COMPACT && dataset->layout.dirty) {
|
||||
if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout), H5AC_dxpl_id)<0)
|
||||
if(H5O_modify(&(dataset->ent), H5O_LAYOUT_ID, 0, 0, 1, &(dataset->layout), H5AC_dxpl_id)<0)
|
||||
HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout message");
|
||||
dataset->layout.dirty = FALSE;
|
||||
} /* end if */
|
||||
@ -3496,7 +3496,7 @@ H5D_alloc_storage (H5F_t *f, hid_t dxpl_id, H5D_t *dset/*in,out*/, H5D_time_allo
|
||||
* (this is only for forward compatibility).
|
||||
*/
|
||||
if(time_alloc!=H5D_ALLOC_CREATE)
|
||||
if (H5O_modify (&(dset->ent), H5O_LAYOUT, 0, H5O_FLAG_CONSTANT, update_time, &(dset->layout), dxpl_id) < 0)
|
||||
if (H5O_modify (&(dset->ent), H5O_LAYOUT_ID, 0, H5O_FLAG_CONSTANT, update_time, &(dset->layout), dxpl_id) < 0)
|
||||
HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout message");
|
||||
} /* end if */
|
||||
} /* end if */
|
||||
@ -4467,7 +4467,7 @@ H5D_flush(H5F_t *f, hid_t dxpl_id)
|
||||
if(NULL==(dataset=H5I_object_verify(id_list[j], H5I_DATASET)))
|
||||
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to get dataset object");
|
||||
if(dataset->layout.type==H5D_COMPACT && dataset->layout.dirty)
|
||||
if(H5O_modify(&(dataset->ent), H5O_LAYOUT, 0, 0, 1, &(dataset->layout), dxpl_id)<0)
|
||||
if(H5O_modify(&(dataset->ent), H5O_LAYOUT_ID, 0, 0, 1, &(dataset->layout), dxpl_id)<0)
|
||||
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message");
|
||||
dataset->layout.dirty = FALSE;
|
||||
}
|
||||
|
@ -1,8 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, October 8, 1997
|
||||
*
|
||||
* Purpose: Indexed (chunked) I/O functions. The logical
|
||||
@ -983,8 +993,8 @@ H5F_istore_flush_entry(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t *ent, hbool_t res
|
||||
/* Reset, but do not free or removed from list */
|
||||
if (reset) {
|
||||
point_of_no_return = FALSE;
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if (buf==ent->chunk) buf = NULL;
|
||||
if(ent->chunk!=NULL)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
@ -1002,8 +1012,8 @@ done:
|
||||
* list.
|
||||
*/
|
||||
if (ret_value<0 && point_of_no_return) {
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if(ent->chunk)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
}
|
||||
@ -1049,8 +1059,8 @@ H5F_istore_preempt(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t * ent, hbool_t flush)
|
||||
}
|
||||
else {
|
||||
/* Reset, but do not free or remove from list */
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if(ent->chunk != NULL)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
}
|
||||
@ -1483,8 +1493,8 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
ent->dirty = FALSE;
|
||||
ent->chunk_size = chunk_size;
|
||||
ent->alloc_size = chunk_size;
|
||||
ent->layout = H5O_copy(H5O_LAYOUT, layout, NULL);
|
||||
ent->pline = H5O_copy(H5O_PLINE, pline, NULL);
|
||||
ent->layout = H5O_copy(H5O_LAYOUT_ID, layout, NULL);
|
||||
ent->pline = H5O_copy(H5O_PLINE_ID, pline, NULL);
|
||||
for (u=0; u<layout->ndims; u++)
|
||||
ent->offset[u] = offset[u];
|
||||
ent->rd_count = chunk_size;
|
||||
@ -1625,8 +1635,8 @@ H5F_istore_unlock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
HDmemset (&x, 0, sizeof x);
|
||||
x.dirty = TRUE;
|
||||
x.layout = H5O_copy (H5O_LAYOUT, layout, NULL);
|
||||
x.pline = H5O_copy (H5O_PLINE, pline, NULL);
|
||||
x.layout = H5O_copy (H5O_LAYOUT_ID, layout, NULL);
|
||||
x.pline = H5O_copy (H5O_PLINE_ID, pline, NULL);
|
||||
for (u=0, tempchunk_size=1; u<layout->ndims; u++) {
|
||||
x.offset[u] = offset[u];
|
||||
tempchunk_size *= layout->dim[u];
|
||||
|
@ -1,8 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, October 8, 1997
|
||||
*
|
||||
* Purpose: Indexed (chunked) I/O functions. The logical
|
||||
@ -983,8 +993,8 @@ H5F_istore_flush_entry(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t *ent, hbool_t res
|
||||
/* Reset, but do not free or removed from list */
|
||||
if (reset) {
|
||||
point_of_no_return = FALSE;
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if (buf==ent->chunk) buf = NULL;
|
||||
if(ent->chunk!=NULL)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
@ -1002,8 +1012,8 @@ done:
|
||||
* list.
|
||||
*/
|
||||
if (ret_value<0 && point_of_no_return) {
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if(ent->chunk)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
}
|
||||
@ -1049,8 +1059,8 @@ H5F_istore_preempt(H5F_t *f, hid_t dxpl_id, H5F_rdcc_ent_t * ent, hbool_t flush)
|
||||
}
|
||||
else {
|
||||
/* Reset, but do not free or remove from list */
|
||||
ent->layout = H5O_free(H5O_LAYOUT, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE, ent->pline);
|
||||
ent->layout = H5O_free(H5O_LAYOUT_ID, ent->layout);
|
||||
ent->pline = H5O_free(H5O_PLINE_ID, ent->pline);
|
||||
if(ent->chunk != NULL)
|
||||
ent->chunk = H5MM_xfree(ent->chunk);
|
||||
}
|
||||
@ -1483,8 +1493,8 @@ H5F_istore_lock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
ent->dirty = FALSE;
|
||||
ent->chunk_size = chunk_size;
|
||||
ent->alloc_size = chunk_size;
|
||||
ent->layout = H5O_copy(H5O_LAYOUT, layout, NULL);
|
||||
ent->pline = H5O_copy(H5O_PLINE, pline, NULL);
|
||||
ent->layout = H5O_copy(H5O_LAYOUT_ID, layout, NULL);
|
||||
ent->pline = H5O_copy(H5O_PLINE_ID, pline, NULL);
|
||||
for (u=0; u<layout->ndims; u++)
|
||||
ent->offset[u] = offset[u];
|
||||
ent->rd_count = chunk_size;
|
||||
@ -1625,8 +1635,8 @@ H5F_istore_unlock(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout,
|
||||
|
||||
HDmemset (&x, 0, sizeof x);
|
||||
x.dirty = TRUE;
|
||||
x.layout = H5O_copy (H5O_LAYOUT, layout, NULL);
|
||||
x.pline = H5O_copy (H5O_PLINE, pline, NULL);
|
||||
x.layout = H5O_copy (H5O_LAYOUT_ID, layout, NULL);
|
||||
x.pline = H5O_copy (H5O_PLINE_ID, pline, NULL);
|
||||
for (u=0, tempchunk_size=1; u<layout->ndims; u++) {
|
||||
x.offset[u] = offset[u];
|
||||
tempchunk_size *= layout->dim[u];
|
||||
|
50
src/H5G.c
50
src/H5G.c
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2002 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5G.c
|
||||
* Jul 18 1997
|
||||
@ -1449,7 +1459,7 @@ H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/,
|
||||
HDmemset(&tmp_grp_ent,0,sizeof(H5G_entry_t));
|
||||
|
||||
/* Get the link value */
|
||||
if (NULL==H5O_read (grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
|
||||
if (NULL==H5O_read (grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
|
||||
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
|
||||
if (NULL==(clv=H5HL_peek (grp_ent->file, dxpl_id, stab_mesg.heap_addr,
|
||||
obj_ent->cache.slink.lval_offset)))
|
||||
@ -1550,11 +1560,11 @@ H5G_mkroot (H5F_t *f, hid_t dxpl_id, H5G_entry_t *ent)
|
||||
*/
|
||||
if (H5O_open (ent)<0)
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open root group");
|
||||
if (NULL==H5O_read (ent, H5O_STAB, 0, &stab, dxpl_id)) {
|
||||
if (NULL==H5O_read (ent, H5O_STAB_ID, 0, &stab, dxpl_id)) {
|
||||
H5O_close(ent);
|
||||
HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "root object is not a group");
|
||||
}
|
||||
H5O_reset (H5O_STAB, &stab);
|
||||
H5O_reset (H5O_STAB_ID, &stab);
|
||||
}
|
||||
|
||||
/* Create the path names for the root group's entry */
|
||||
@ -1678,7 +1688,7 @@ H5G_isa(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
|
||||
assert(ent);
|
||||
|
||||
if ((ret_value=H5O_exists(ent, H5O_STAB, 0, dxpl_id))<0)
|
||||
if ((ret_value=H5O_exists(ent, H5O_STAB_ID, 0, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header");
|
||||
|
||||
done:
|
||||
@ -1781,7 +1791,7 @@ H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
/* Grab the object header */
|
||||
if (H5O_open(&(grp->ent)) < 0)
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to open group");
|
||||
if (NULL==H5O_read (&(grp->ent), H5O_STAB, 0, &mesg, dxpl_id)) {
|
||||
if (NULL==H5O_read (&(grp->ent), H5O_STAB_ID, 0, &mesg, dxpl_id)) {
|
||||
H5O_close(&(grp->ent));
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, NULL, "not a group");
|
||||
}
|
||||
@ -2221,12 +2231,12 @@ H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
|
||||
* Add the link-value to the local heap for the symbol table which
|
||||
* will contain the link.
|
||||
*/
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
|
||||
if ((size_t)(-1)==(offset=H5HL_insert (grp_ent.file, dxpl_id,
|
||||
stab_mesg.heap_addr, HDstrlen(cur_name)+1, cur_name)))
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to write link value to local heap");
|
||||
H5O_reset (H5O_STAB, &stab_mesg);
|
||||
H5O_reset (H5O_STAB_ID, &stab_mesg);
|
||||
|
||||
/*
|
||||
* Create a symbol table entry for the link. The object header is
|
||||
@ -2362,7 +2372,7 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
|
||||
if (statbuf) {
|
||||
if (H5G_CACHED_SLINK==obj_ent.type) {
|
||||
/* Named object is a symbolic link */
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id) ||
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id) ||
|
||||
NULL==(s=H5HL_peek (grp_ent.file, dxpl_id, stab_mesg.heap_addr,
|
||||
obj_ent.cache.slink.lval_offset)))
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value");
|
||||
@ -2383,9 +2393,9 @@ H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
|
||||
#endif
|
||||
statbuf->nlink = H5O_link (&obj_ent, 0, dxpl_id);
|
||||
statbuf->type = H5G_LINK;
|
||||
if (NULL==H5O_read(&obj_ent, H5O_MTIME, 0, &(statbuf->mtime), dxpl_id)) {
|
||||
if (NULL==H5O_read(&obj_ent, H5O_MTIME_ID, 0, &(statbuf->mtime), dxpl_id)) {
|
||||
H5E_clear();
|
||||
if (NULL==H5O_read(&obj_ent, H5O_MTIME_NEW, 0, &(statbuf->mtime), dxpl_id)) {
|
||||
if (NULL==H5O_read(&obj_ent, H5O_MTIME_NEW_ID, 0, &(statbuf->mtime), dxpl_id)) {
|
||||
H5E_clear();
|
||||
statbuf->mtime = 0;
|
||||
}
|
||||
@ -2582,7 +2592,7 @@ H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/,
|
||||
* Get the address of the local heap for the link value and a pointer
|
||||
* into that local heap.
|
||||
*/
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB, 0, &stab_mesg, dxpl_id))
|
||||
if (NULL==H5O_read (&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
|
||||
HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
|
||||
if (NULL==(s=H5HL_peek (grp_ent.file, dxpl_id, stab_mesg.heap_addr,
|
||||
obj_ent.cache.slink.lval_offset)))
|
||||
@ -2633,15 +2643,15 @@ H5G_set_comment(H5G_entry_t *loc, const char *name, const char *buf, hid_t dxpl_
|
||||
HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
|
||||
|
||||
/* Remove the previous comment message if any */
|
||||
if (H5O_remove(&obj_ent, H5O_NAME, 0, dxpl_id)<0)
|
||||
if (H5O_remove(&obj_ent, H5O_NAME_ID, 0, dxpl_id)<0)
|
||||
H5E_clear();
|
||||
|
||||
/* Add the new message */
|
||||
if (buf && *buf) {
|
||||
comment.s = H5MM_xstrdup(buf);
|
||||
if (H5O_modify(&obj_ent, H5O_NAME, H5O_NEW_MESG, 0, 1, &comment, dxpl_id)<0)
|
||||
if (H5O_modify(&obj_ent, H5O_NAME_ID, H5O_NEW_MESG, 0, 1, &comment, dxpl_id)<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to set comment object header message");
|
||||
H5O_reset(H5O_NAME, &comment);
|
||||
H5O_reset(H5O_NAME_ID, &comment);
|
||||
}
|
||||
|
||||
done:
|
||||
@ -2689,7 +2699,7 @@ H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf, h
|
||||
|
||||
/* Get the message */
|
||||
comment.s = NULL;
|
||||
if (NULL==H5O_read(&obj_ent, H5O_NAME, 0, &comment, dxpl_id)) {
|
||||
if (NULL==H5O_read(&obj_ent, H5O_NAME_ID, 0, &comment, dxpl_id)) {
|
||||
if (buf && bufsize>0)
|
||||
buf[0] = '\0';
|
||||
ret_value = 0;
|
||||
@ -2697,7 +2707,7 @@ H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf, h
|
||||
if(buf && bufsize)
|
||||
HDstrncpy(buf, comment.s, bufsize);
|
||||
ret_value = (int)HDstrlen(comment.s);
|
||||
H5O_reset(H5O_NAME, &comment);
|
||||
H5O_reset(H5O_NAME_ID, &comment);
|
||||
}
|
||||
|
||||
done:
|
||||
|
@ -253,8 +253,8 @@ H5G_node_size(H5F_t *f)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5G_node_t *
|
||||
H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
|
||||
void * UNUSED _udata2)
|
||||
H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_udata1,
|
||||
void UNUSED * _udata2)
|
||||
{
|
||||
H5G_node_t *sym = NULL;
|
||||
size_t size = 0;
|
||||
|
@ -1,13 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Friday, September 19, 1997
|
||||
*
|
||||
*/
|
||||
#define H5G_PACKAGE
|
||||
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
|
||||
#define H5G_PACKAGE /*suppress error about including H5Gpkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
@ -99,7 +109,7 @@ H5G_stab_create(H5F_t *f, hid_t dxpl_id, size_t init, H5G_entry_t *self/*out*/)
|
||||
* Insert the symbol table message into the object header and the symbol
|
||||
* table entry.
|
||||
*/
|
||||
if (H5O_modify(self, H5O_STAB, H5O_NEW_MESG, H5O_FLAG_CONSTANT, 1, &stab, dxpl_id)<0) {
|
||||
if (H5O_modify(self, H5O_STAB_ID, H5O_NEW_MESG, H5O_FLAG_CONSTANT, 1, &stab, dxpl_id)<0) {
|
||||
H5O_close(self);
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message");
|
||||
}
|
||||
@ -151,7 +161,7 @@ H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
|
||||
assert(name && *name);
|
||||
|
||||
/* set up the udata */
|
||||
if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
|
||||
if (NULL == H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't read message");
|
||||
udata.operation = H5G_OPER_FIND;
|
||||
udata.name = name;
|
||||
@ -223,7 +233,7 @@ H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent, hi
|
||||
HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "cannot insert name");
|
||||
|
||||
/* initialize data to pass through B-tree */
|
||||
if (NULL == H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
|
||||
if (NULL == H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table");
|
||||
udata.operation = H5G_OPER_INSERT;
|
||||
udata.name = name;
|
||||
@ -269,7 +279,7 @@ H5G_stab_remove(H5G_entry_t *grp_ent, const char *name, hid_t dxpl_id)
|
||||
assert(name && *name);
|
||||
|
||||
/* initialize data to pass through B-tree */
|
||||
if (NULL==H5O_read(grp_ent, H5O_STAB, 0, &stab, dxpl_id))
|
||||
if (NULL==H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
|
||||
HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table");
|
||||
udata.operation = H5G_OPER_REMOVE;
|
||||
udata.name = name;
|
||||
|
@ -217,8 +217,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5HG_heap_t *
|
||||
H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
|
||||
void * UNUSED udata2)
|
||||
H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * udata1,
|
||||
void UNUSED * udata2)
|
||||
{
|
||||
H5HG_heap_t *heap = NULL;
|
||||
H5HG_heap_t *ret_value = NULL;
|
||||
|
@ -196,8 +196,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5HL_t *
|
||||
H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED udata1,
|
||||
void * UNUSED udata2)
|
||||
H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * udata1,
|
||||
void UNUSED * udata2)
|
||||
{
|
||||
uint8_t hdr[52];
|
||||
size_t sizeof_hdr; /* Cache H5HL header size for file */
|
||||
|
676
src/H5O.c
676
src/H5O.c
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5O.c
|
||||
* Aug 5 1997
|
||||
@ -14,7 +24,9 @@
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5ACprivate.h"
|
||||
@ -24,7 +36,7 @@
|
||||
#include "H5Iprivate.h"
|
||||
#include "H5MFprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
#include "H5Pprivate.h"
|
||||
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
@ -40,12 +52,29 @@ static H5O_t *H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata
|
||||
void *_udata2);
|
||||
static herr_t H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh);
|
||||
static herr_t H5O_dest(H5F_t *f, H5O_t *oh);
|
||||
static herr_t H5O_reset_real(const H5O_class_t *type, void *native);
|
||||
static void * H5O_free_real(const H5O_class_t *type, void *mesg);
|
||||
static void * H5O_copy_real(const H5O_class_t *type, const void *mesg,
|
||||
void *dst);
|
||||
static int H5O_count_real (H5G_entry_t *ent, const H5O_class_t *type,
|
||||
hid_t dxpl_id);
|
||||
static htri_t H5O_exists_real(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, hid_t dxpl_id);
|
||||
static void * H5O_read_real(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, void *mesg, hid_t dxpl_id);
|
||||
#ifdef NOT_YET
|
||||
static herr_t H5O_share(H5F_t *f, hid_t dxpl_id, const H5O_class_t *type, const void *mesg,
|
||||
H5HG_t *hobj/*out*/);
|
||||
#endif /* NOT_YET */
|
||||
static unsigned H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, haddr_t addr,
|
||||
const H5O_class_t **type_p, int sequence);
|
||||
static int H5O_modify_real(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int overwrite, unsigned flags, unsigned update_time, const void *mesg,
|
||||
hid_t dxpl_id);
|
||||
static int H5O_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
|
||||
const H5O_class_t *type, unsigned flags, const void *mesg);
|
||||
static herr_t H5O_remove_real(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, hid_t dxpl_id);
|
||||
static unsigned H5O_alloc(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
|
||||
size_t size);
|
||||
static unsigned H5O_alloc_extend_chunk(H5O_t *oh, unsigned chunkno, size_t size);
|
||||
@ -423,8 +452,8 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5O_t *
|
||||
H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void * UNUSED _udata1,
|
||||
void * UNUSED _udata2)
|
||||
H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
|
||||
void UNUSED * _udata2)
|
||||
{
|
||||
H5O_t *oh = NULL;
|
||||
H5O_t *ret_value;
|
||||
@ -801,9 +830,9 @@ H5O_dest(H5F_t UNUSED *f, H5O_t *oh)
|
||||
assert (oh->mesg[i].dirty==0);
|
||||
|
||||
if (oh->mesg[i].flags & H5O_FLAG_SHARED)
|
||||
H5O_free(H5O_SHARED, oh->mesg[i].native);
|
||||
H5O_free_real(H5O_SHARED, oh->mesg[i].native);
|
||||
else
|
||||
H5O_free(oh->mesg[i].type, oh->mesg[i].native);
|
||||
H5O_free_real(oh->mesg[i].type, oh->mesg[i].native);
|
||||
}
|
||||
oh->mesg = H5FL_ARR_FREE(H5O_mesg_t,oh->mesg);
|
||||
|
||||
@ -828,15 +857,61 @@ H5O_dest(H5F_t UNUSED *f, H5O_t *oh)
|
||||
* Aug 12 1997
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5O_reset(const H5O_class_t *type, void *native)
|
||||
H5O_reset(hid_t type_id, void *native)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_reset,FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
|
||||
/* Call the "real" reset routine */
|
||||
if((ret_value=H5O_reset_real(type, native))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, FAIL, "unable to reset object header");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_reset() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_reset_real
|
||||
*
|
||||
* Purpose: Some message data structures have internal fields that
|
||||
* need to be freed. This function does that if appropriate
|
||||
* but doesn't free NATIVE.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* matzke@llnl.gov
|
||||
* Aug 12 1997
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5O_reset_real(const H5O_class_t *type, void *native)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_reset, FAIL);
|
||||
FUNC_ENTER_NOINIT(H5O_reset_real);
|
||||
|
||||
/* check args */
|
||||
assert(type);
|
||||
|
||||
if (native) {
|
||||
if (type->reset) {
|
||||
@ -849,7 +924,7 @@ H5O_reset(const H5O_class_t *type, void *native)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_reset_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -870,23 +945,64 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void *
|
||||
H5O_free (const H5O_class_t *type, void *mesg)
|
||||
H5O_free (hid_t type_id, void *mesg)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
void * ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_free, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
|
||||
/* Call the "real" free routine */
|
||||
if((ret_value=H5O_free_real(type, mesg))==NULL)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to free object header");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_free() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_free_real
|
||||
*
|
||||
* Purpose: Similar to H5O_reset() except it also frees the message
|
||||
* pointer.
|
||||
*
|
||||
* Return: Success: NULL
|
||||
*
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void *
|
||||
H5O_free_real(const H5O_class_t *type, void *mesg)
|
||||
{
|
||||
void * ret_value=NULL; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_free, NULL);
|
||||
FUNC_ENTER_NOINIT(H5O_free_real);
|
||||
|
||||
/* check args */
|
||||
assert(type);
|
||||
|
||||
if (mesg) {
|
||||
H5O_reset (type, mesg);
|
||||
H5O_reset_real(type, mesg);
|
||||
if (NULL!=(type->free))
|
||||
(type->free)(mesg);
|
||||
else
|
||||
H5MM_xfree (mesg);
|
||||
}
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_free_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -903,16 +1019,60 @@ done:
|
||||
* Thursday, May 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void *
|
||||
H5O_copy (const H5O_class_t *type, const void *mesg, void *dst)
|
||||
H5O_copy (hid_t type_id, const void *mesg, void *dst)
|
||||
{
|
||||
void *ret_value = NULL;
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
void *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_copy, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
|
||||
/* Call the "real" copy routine */
|
||||
if((ret_value=H5O_copy_real(type, mesg, dst))==NULL)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object header message");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_copy() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_copy_real
|
||||
*
|
||||
* Purpose: Copies a message. If MESG is is the null pointer then a null
|
||||
* pointer is returned with no error.
|
||||
*
|
||||
* Return: Success: Ptr to the new message
|
||||
*
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void *
|
||||
H5O_copy_real (const H5O_class_t *type, const void *mesg, void *dst)
|
||||
{
|
||||
void *ret_value = NULL;
|
||||
|
||||
FUNC_ENTER_NOINIT(H5O_copy_real);
|
||||
|
||||
/* check args */
|
||||
assert (type);
|
||||
assert (type->copy);
|
||||
|
||||
@ -923,7 +1083,7 @@ H5O_copy (const H5O_class_t *type, const void *mesg, void *dst)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_copy_real() */
|
||||
|
||||
|
||||
|
||||
@ -1006,18 +1166,64 @@ done:
|
||||
* Tuesday, April 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
H5O_count (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
|
||||
H5O_count (H5G_entry_t *ent, hid_t type_id, hid_t dxpl_id)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
int ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_count_real, FAIL);
|
||||
|
||||
/* Check args */
|
||||
assert (ent);
|
||||
assert (ent->file);
|
||||
assert (H5F_addr_defined(ent->header));
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert (type);
|
||||
|
||||
/* Call the "real" count routine */
|
||||
if((ret_value=H5O_count_real(ent, type, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTCOUNT, FAIL, "unable to count object header messages");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_count() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_count_real
|
||||
*
|
||||
* Purpose: Counts the number of messages in an object header which are a
|
||||
* certain type.
|
||||
*
|
||||
* Return: Success: Number of messages of specified type.
|
||||
*
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Tuesday, April 21, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
H5O_count_real (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
|
||||
{
|
||||
H5O_t *oh = NULL;
|
||||
int acc;
|
||||
unsigned u;
|
||||
int ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_count, FAIL);
|
||||
FUNC_ENTER_NOAPI(H5O_count_real, FAIL);
|
||||
|
||||
/* Check args */
|
||||
assert (ent);
|
||||
@ -1039,7 +1245,7 @@ H5O_count (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_count_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1059,17 +1265,65 @@ done:
|
||||
* Monday, November 2, 1998
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
htri_t
|
||||
H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
|
||||
H5O_exists(H5G_entry_t *ent, hid_t type_id, int sequence, hid_t dxpl_id)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
htri_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_exists, FAIL);
|
||||
|
||||
assert(ent);
|
||||
assert(ent->file);
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
assert(sequence>=0);
|
||||
|
||||
/* Call the "real" exists routine */
|
||||
if((ret_value=H5O_exists_real(ent, type, sequence, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, FAIL, "unable to verify object header message");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_exists() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_exists_real
|
||||
*
|
||||
* Purpose: Determines if a particular message exists in an object
|
||||
* header without trying to decode the message.
|
||||
*
|
||||
* Return: Success: FALSE if the message does not exist; TRUE if
|
||||
* th message exists.
|
||||
*
|
||||
* Failure: FAIL if the existence of the message could
|
||||
* not be determined due to some error such as
|
||||
* not being able to read the object header.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Monday, November 2, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static htri_t
|
||||
H5O_exists_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
|
||||
{
|
||||
H5O_t *oh=NULL;
|
||||
unsigned u;
|
||||
htri_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_exists, FAIL);
|
||||
FUNC_ENTER_NOINIT(H5O_exists_real);
|
||||
|
||||
assert(ent);
|
||||
assert(ent->file);
|
||||
@ -1093,7 +1347,7 @@ H5O_exists(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_i
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_exists_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1118,19 +1372,74 @@ done:
|
||||
* Aug 6 1997
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
void *
|
||||
H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg, hid_t dxpl_id)
|
||||
H5O_read(H5G_entry_t *ent, hid_t type_id, int sequence, void *mesg, hid_t dxpl_id)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
void *ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_read, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
assert(ent->file);
|
||||
assert(H5F_addr_defined(ent->header));
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
assert(sequence >= 0);
|
||||
|
||||
/* Call the "real" read routine */
|
||||
if((ret_value=H5O_read_real(ent, type, sequence, mesg, dxpl_id))==NULL)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to load object header");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_read() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_read_real
|
||||
*
|
||||
* Purpose: Reads a message from an object header and returns a pointer
|
||||
* to it. The caller will usually supply the memory through
|
||||
* MESG and the return value will be MESG. But if MESG is
|
||||
* the null pointer, then this function will malloc() memory
|
||||
* to hold the result and return its pointer instead.
|
||||
*
|
||||
* Return: Success: Ptr to message in native format. The message
|
||||
* should be freed by calling H5O_reset(). If
|
||||
* MESG is a null pointer then the caller should
|
||||
* also call H5MM_xfree() on the return value
|
||||
* after calling H5O_reset().
|
||||
*
|
||||
* Failure: NULL
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* matzke@llnl.gov
|
||||
* Aug 6 1997
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void *
|
||||
H5O_read_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg, hid_t dxpl_id)
|
||||
{
|
||||
H5O_t *oh = NULL;
|
||||
void *ret_value = NULL;
|
||||
int idx;
|
||||
H5G_cache_t *cache = NULL;
|
||||
H5G_type_t cache_type;
|
||||
void *ret_value = NULL;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_read, NULL);
|
||||
FUNC_ENTER_NOINIT(H5O_read_real);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
@ -1179,7 +1488,7 @@ H5O_read(H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg, hi
|
||||
ret_value = tmp_mesg;
|
||||
}
|
||||
} else {
|
||||
ret_value = H5O_read (&(shared->u.ent), type, 0, mesg, dxpl_id);
|
||||
ret_value = H5O_read_real(&(shared->u.ent), type, 0, mesg, dxpl_id);
|
||||
if (type->set_share &&
|
||||
(type->set_share)(ent->file, ret_value, shared)<0)
|
||||
HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, NULL, "unable to set sharing information");
|
||||
@ -1200,7 +1509,7 @@ done:
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, NULL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_read_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1321,21 +1630,95 @@ done:
|
||||
* constant it can never become non-constant. Constant messages cannot
|
||||
* be modified.
|
||||
*
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
|
||||
H5O_modify(H5G_entry_t *ent, hid_t type_id, int overwrite,
|
||||
unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
int ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_modify, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
assert(ent->file);
|
||||
assert(H5F_addr_defined(ent->header));
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
assert(mesg);
|
||||
assert (0==(flags & ~H5O_FLAG_BITS));
|
||||
|
||||
/* Call the "real" modify routine */
|
||||
if((ret_value= H5O_modify_real(ent, type, overwrite, flags, update_time, mesg, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_modify() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_modify_real
|
||||
*
|
||||
* Purpose: Modifies an existing message or creates a new message.
|
||||
* The cache fields in that symbol table entry ENT are *not*
|
||||
* updated, you must do that separately because they often
|
||||
* depend on multiple object header messages. Besides, we
|
||||
* don't know which messages will be constant and which will
|
||||
* not.
|
||||
*
|
||||
* The OVERWRITE argument is either a sequence number of a
|
||||
* message to overwrite (usually zero) or the constant
|
||||
* H5O_NEW_MESG (-1) to indicate that a new message is to
|
||||
* be created. If the message to overwrite doesn't exist then
|
||||
* it is created (but only if it can be inserted so its sequence
|
||||
* number is OVERWRITE; that is, you can create a message with
|
||||
* the sequence number 5 if there is no message with sequence
|
||||
* number 4).
|
||||
*
|
||||
* The UPDATE_TIME argument is a boolean that allows the caller
|
||||
* to skip updating the modification time. This is useful when
|
||||
* several calls to H5O_modify will be made in a sequence.
|
||||
*
|
||||
* Return: Success: The sequence number of the message that
|
||||
* was modified or created.
|
||||
*
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* matzke@llnl.gov
|
||||
* Aug 6 1997
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
* Robb Matzke, 7 Jan 1998
|
||||
* Handles constant vs non-constant messages. Once a message is made
|
||||
* constant it can never become non-constant. Constant messages cannot
|
||||
* be modified.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
H5O_modify_real(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
|
||||
unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id)
|
||||
{
|
||||
H5O_t *oh=NULL;
|
||||
int sequence;
|
||||
unsigned idx; /* Index of message to modify */
|
||||
H5O_mesg_t *idx_msg; /* Pointer to message to modify */
|
||||
int ret_value = FAIL;
|
||||
size_t size=0;
|
||||
H5O_shared_t sh_mesg;
|
||||
int ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_modify, FAIL);
|
||||
FUNC_ENTER_NOAPI(H5O_modify_real, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
@ -1433,7 +1816,7 @@ H5O_modify(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
|
||||
HDmemcpy(idx_msg->native,&sh_mesg,sizeof(H5O_shared_t));
|
||||
} else {
|
||||
if (idx_msg->native)
|
||||
H5O_reset (idx_msg->type, idx_msg->native);
|
||||
H5O_reset_real(idx_msg->type, idx_msg->native);
|
||||
idx_msg->native = (type->copy) (mesg, idx_msg->native);
|
||||
if (NULL == idx_msg->native)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to copy message to object header");
|
||||
@ -1455,7 +1838,7 @@ done:
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_modify_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1564,20 +1947,77 @@ done:
|
||||
* Dec 31 2002
|
||||
*
|
||||
* Modifications:
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
|
||||
H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, hid_t type_id, unsigned flags,
|
||||
const void *mesg)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
int ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_append,FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(oh);
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
assert(0==(flags & ~H5O_FLAG_BITS));
|
||||
assert(mesg);
|
||||
|
||||
/* Call the "real" append routine */
|
||||
if((ret_value=H5O_append_real( f, dxpl_id, oh, type, flags, mesg))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to append to object header");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_append() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_append_real
|
||||
*
|
||||
* Purpose: Simplified version of H5O_modify, used when creating a new
|
||||
* object header message (usually during object creation)
|
||||
*
|
||||
* Modifies an existing message or creates a new message.
|
||||
* The cache fields in that symbol table entry ENT are *not*
|
||||
* updated, you must do that separately because they often
|
||||
* depend on multiple object header messages. Besides, we
|
||||
* don't know which messages will be constant and which will
|
||||
* not.
|
||||
*
|
||||
* Return: Success: The sequence number of the message that
|
||||
* was created.
|
||||
*
|
||||
* Failure: Negative
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@ncsa.uiuc.edu
|
||||
* Dec 31 2002
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
H5O_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
|
||||
unsigned flags, const void *mesg)
|
||||
{
|
||||
unsigned idx; /* Index of message to modify */
|
||||
H5O_mesg_t *idx_msg; /* Pointer to message to modify */
|
||||
int ret_value = FAIL;
|
||||
size_t size=0;
|
||||
H5O_shared_t sh_mesg;
|
||||
int ret_value = FAIL;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_append, FAIL);
|
||||
FUNC_ENTER_NOINIT(H5O_append_real);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
@ -1640,7 +2080,7 @@ H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
|
||||
HDmemcpy(idx_msg->native,&sh_mesg,sizeof(H5O_shared_t));
|
||||
} else {
|
||||
if (idx_msg->native)
|
||||
H5O_reset (idx_msg->type, idx_msg->native);
|
||||
H5O_reset_real(idx_msg->type, idx_msg->native);
|
||||
idx_msg->native = (type->copy) (mesg, idx_msg->native);
|
||||
if (NULL == idx_msg->native)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to copy message to object header");
|
||||
@ -1655,7 +2095,7 @@ H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_append() */
|
||||
} /* end H5O_append_real () */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -1901,18 +2341,73 @@ done:
|
||||
* Robb Matzke, 7 Jan 1998
|
||||
* Does not remove constant messages.
|
||||
*
|
||||
* Changed to use IDs for types, instead of type objects, then
|
||||
* call "real" routine.
|
||||
* Quincey Koziol
|
||||
* Feb 14 2003
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
|
||||
H5O_remove(H5G_entry_t *ent, hid_t type_id, int sequence, hid_t dxpl_id)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_remove, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
assert(ent->file);
|
||||
assert(H5F_addr_defined(ent->header));
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
|
||||
/* Call the "real" remove routine */
|
||||
if((ret_value=H5O_remove_real(ent, type, sequence, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to remove object header message");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_remove() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_remove_real
|
||||
*
|
||||
* Purpose: Removes the specified message from the object header.
|
||||
* If sequence is H5O_ALL (-1) then all messages of the
|
||||
* specified type are removed. Removing a message causes
|
||||
* the sequence numbers to change for subsequent messages of
|
||||
* the same type.
|
||||
*
|
||||
* No attempt is made to join adjacent free areas of the
|
||||
* object header into a single larger free area.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* matzke@llnl.gov
|
||||
* Aug 28 1997
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
* Robb Matzke, 7 Jan 1998
|
||||
* Does not remove constant messages.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5O_remove_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
|
||||
{
|
||||
H5O_t *oh = NULL;
|
||||
int seq, nfailed = 0;
|
||||
unsigned u;
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
H5O_shared_t *sh_mesg = NULL;
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_remove, FAIL);
|
||||
FUNC_ENTER_NOINIT(H5O_remove_real);
|
||||
|
||||
/* check args */
|
||||
assert(ent);
|
||||
@ -1959,7 +2454,7 @@ H5O_remove(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_i
|
||||
/* change message type to nil and zero it */
|
||||
oh->mesg[u].type = H5O_NULL;
|
||||
HDmemset(oh->mesg[u].raw, 0, oh->mesg[u].raw_size);
|
||||
oh->mesg[u].native = H5O_free (type, oh->mesg[u].native);
|
||||
oh->mesg[u].native = H5O_free_real(type, oh->mesg[u].native);
|
||||
oh->mesg[u].dirty = TRUE;
|
||||
oh->cache_info.dirty = TRUE;
|
||||
H5O_touch_oh(ent->file, oh, FALSE);
|
||||
@ -1975,7 +2470,7 @@ done:
|
||||
HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
} /* end H5O_remove_real() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -2480,6 +2975,91 @@ done:
|
||||
}
|
||||
#endif /* NOT_YET */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_raw_size
|
||||
*
|
||||
* Purpose: Call the 'raw_size' method for a
|
||||
* particular class of object header.
|
||||
*
|
||||
* Return: Size of message on success, 0 on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@ncsa.uiuc.edu
|
||||
* Feb 13 2003
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
size_t
|
||||
H5O_raw_size(hid_t type_id, H5F_t *f, const void *mesg)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
size_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_raw_size,0);
|
||||
|
||||
/* Check args */
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert (type);
|
||||
assert (type->raw_size);
|
||||
assert (f);
|
||||
assert (mesg);
|
||||
|
||||
/* Compute the raw data size for the mesg */
|
||||
if ((ret_value = (type->raw_size)(f, mesg))==0)
|
||||
HGOTO_ERROR (H5E_OHDR, H5E_CANTCOUNT, 0, "unable to determine size of message");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_raw_size() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_debug_id
|
||||
*
|
||||
* Purpose: Act as a proxy for calling the 'debug' method for a
|
||||
* particular class of object header.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: Quincey Koziol
|
||||
* koziol@ncsa.uiuc.edu
|
||||
* Feb 13 2003
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5O_debug_id(hid_t type_id, H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, int indent, int fwidth)
|
||||
{
|
||||
const H5O_class_t *type; /* Actual H5O class type for the ID */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_debug_id,FAIL);
|
||||
|
||||
/* Check args */
|
||||
assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
|
||||
type=message_type_g[type_id]; /* map the type ID to the actual type object */
|
||||
assert(type);
|
||||
assert(type->debug);
|
||||
assert(f);
|
||||
assert(mesg);
|
||||
assert(stream);
|
||||
assert(indent >= 0);
|
||||
assert(fwidth >= 0);
|
||||
|
||||
/* Call the debug method in the class */
|
||||
if ((ret_value = (type->debug)(f, dxpl_id, mesg, stream, indent, fwidth))<0)
|
||||
HGOTO_ERROR (H5E_OHDR, H5E_INTERNAL, FAIL, "unable to debug message");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
} /* end H5O_debug_id() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5O_debug
|
||||
@ -2641,13 +3221,13 @@ H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int f
|
||||
mesg = (oh->mesg[i].type->decode)(f, dxpl_id, p, oh->mesg[i].native);
|
||||
H5MM_xfree (p);
|
||||
} else {
|
||||
mesg = H5O_read (&(shared->u.ent), oh->mesg[i].type, 0, NULL, dxpl_id);
|
||||
mesg = H5O_read_real(&(shared->u.ent), oh->mesg[i].type, 0, NULL, dxpl_id);
|
||||
}
|
||||
if (oh->mesg[i].type->debug) {
|
||||
(oh->mesg[i].type->debug)(f, dxpl_id, mesg, stream, indent+3,
|
||||
MAX (0, fwidth-3));
|
||||
}
|
||||
H5O_free (oh->mesg[i].type, mesg);
|
||||
H5O_free_real(oh->mesg[i].type, mesg);
|
||||
}
|
||||
}
|
||||
sequence = H5MM_xfree(sequence);
|
||||
|
@ -1,27 +1,28 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define H5A_PACKAGE /*prevent warning from including H5Apkg.h */
|
||||
#define H5S_PACKAGE /*suppress error about including H5Spkg */
|
||||
#define H5A_PACKAGE /*prevent warning from including H5Apkg */
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
#define H5S_PACKAGE /*suppress error about including H5Spkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Apkg.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Apkg.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
#include "H5Spkg.h" /* Data spaces */
|
||||
|
||||
#define PABLO_MASK H5O_attr_mask
|
||||
|
@ -28,10 +28,13 @@
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#ifdef H5O_ENABLE_BOGUS
|
||||
#define PABLO_MASK H5O_bogus_mask
|
||||
|
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5Ocont.c
|
||||
* Aug 6 1997
|
||||
@ -18,10 +28,12 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#define PABLO_MASK H5O_cont_mask
|
||||
|
||||
|
@ -1,25 +1,26 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define H5T_PACKAGE /*prevent warning from including H5Tpkg.h */
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
#define H5T_PACKAGE /*prevent warning from including H5Tpkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
#include "H5Tpkg.h"
|
||||
|
||||
#define PABLO_MASK H5O_dtype_mask
|
||||
|
21
src/H5Oefl.c
21
src/H5Oefl.c
@ -1,18 +1,31 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1997-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Tuesday, November 25, 1997
|
||||
*/
|
||||
|
||||
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5Fpkg.h"
|
||||
#include "H5HLprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#define PABLO_MASK H5O_efl_mask
|
||||
|
||||
|
@ -1,19 +1,32 @@
|
||||
/*
|
||||
* Copyright (C) 1998-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, September 30, 1998
|
||||
*
|
||||
* Purpose: The fill message indicates a bit pattern to use for
|
||||
* uninitialized data points of a dataset.
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5Iprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
#include "H5Pprivate.h"
|
||||
|
||||
#define PABLO_MASK H5O_fill_mask
|
||||
|
553
src/H5Ofphdf5.c
553
src/H5Ofphdf5.c
@ -1,553 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define H5P_PACKAGE /* prevent warning from including H5Ppkg.h */
|
||||
#define H5S_PACKAGE /* prevent warning from including H5Spkg.h */
|
||||
|
||||
#include "H5private.h" /* Generic functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5FLprivate.h" /* Free lists */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Oprivate.h" /* Object headers */
|
||||
#include "H5Ppkg.h" /* Property lists */
|
||||
#include "H5Rprivate.h" /* References */
|
||||
#include "H5Spkg.h" /* Dataspace functions */
|
||||
|
||||
#if defined (WIN32) && !defined (__MWERKS__)
|
||||
#include <sys/types.h>
|
||||
#include <sys/timeb.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_FPHDF5
|
||||
|
||||
/* Pablo mask */
|
||||
#define PABLO_MASK H5O_fphdf5_mask
|
||||
|
||||
/* local prototypes */
|
||||
static void *H5O_fphdf5_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
|
||||
static herr_t H5O_fphdf5_encode(H5F_t *f, uint8_t *p, const void *_mesg);
|
||||
static size_t H5O_fphdf5_size(H5F_t *f, const void *_mesg);
|
||||
static herr_t H5O_fphdf5_reset(void *_mesg);
|
||||
static void *H5O_fphdf5_copy(const void *mesg, void *dest);
|
||||
static herr_t H5O_fphdf5_free(void *_mesg);
|
||||
static herr_t H5O_fphdf5_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
|
||||
FILE *stream, int indent, int fwidth);
|
||||
|
||||
/* This message derives from H5O */
|
||||
const H5O_class_t H5O_FPHDF5[1] = {{
|
||||
H5O_FPHDF5_ID, /* message id number */
|
||||
"fphdf5", /* message name for debugging */
|
||||
sizeof(H5O_fphdf5_t), /* native message size */
|
||||
H5O_fphdf5_decode, /* decode message */
|
||||
H5O_fphdf5_encode, /* encode message */
|
||||
H5O_fphdf5_copy, /* copy the native value */
|
||||
H5O_fphdf5_size, /* size of symbol table entry */
|
||||
H5O_fphdf5_reset, /* default reset method */
|
||||
H5O_fphdf5_free, /* free method */
|
||||
NULL, /* get share method */
|
||||
NULL, /* set share method */
|
||||
H5O_fphdf5_debug, /* debug the message */
|
||||
}};
|
||||
|
||||
#define H5O_FPHDF5_VERSION 1
|
||||
|
||||
/* Is the interface initialized? */
|
||||
static int interface_initialize_g = 0;
|
||||
#define INTERFACE_INIT NULL
|
||||
|
||||
/* Define the free list for H5O_fphdf5_t's */
|
||||
H5FL_DEFINE_STATIC(H5O_fphdf5_t);
|
||||
|
||||
/* Declare external the free list for hsize_t arrays */
|
||||
H5FL_ARR_EXTERN(hsize_t);
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_decode
|
||||
* Purpose: Decode a metadata message from the SAP and return a pointer to
|
||||
* a memory struct with the decoded information.
|
||||
*
|
||||
* This function decodes the "raw" form of a metadata message
|
||||
* sent from the SAP into a struct in memory native format. The
|
||||
* struct is allocated within this function using malloc() and is
|
||||
* returned to the caller.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* uint8 *p OUT: the raw information buffer
|
||||
* H5O_shared_t *sh IN: not used; must be NULL
|
||||
*
|
||||
* Return: Success: Pointer to the new message in native order
|
||||
* Failure: NULL
|
||||
* Programmer: Bill Wendling, 20. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static void *
|
||||
H5O_fphdf5_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
|
||||
{
|
||||
H5O_fphdf5_t *fmeta = NULL; /* New FPHDF5 metadata structure */
|
||||
void *ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_decode, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(p);
|
||||
assert(!sh);
|
||||
|
||||
/* decode */
|
||||
fmeta = H5FL_CALLOC(H5O_fphdf5_t);
|
||||
|
||||
/* decode the OID first */
|
||||
NBYTEDECODE(p, fmeta->oid, sizeof(fmeta->oid));
|
||||
|
||||
/* decode the header address next */
|
||||
NBYTEDECODE(p, &fmeta->header, sizeof(fmeta->header));
|
||||
|
||||
/* decode the dataspace dimensions next */
|
||||
fmeta->sdim = H5O_SDSPACE[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->sdim)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataspace dimensions part */
|
||||
p += H5O_SDSPACE[0].raw_size(f, fmeta->sdim);
|
||||
|
||||
/* decode the datatype next */
|
||||
fmeta->dtype = H5O_DTYPE[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->dtype)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the datatype part */
|
||||
p += H5O_DTYPE[0].raw_size(f, fmeta->dtype);
|
||||
|
||||
/* decode the modification time next */
|
||||
fmeta->mtime = H5O_MTIME[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->mtime)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the modification time part */
|
||||
p += H5O_MTIME[0].raw_size(f, fmeta->mtime);
|
||||
|
||||
/* decode the dataset layout next */
|
||||
fmeta->layout = H5O_LAYOUT[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->layout)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataset layout part */
|
||||
p += H5O_LAYOUT[0].raw_size(f, fmeta->layout);
|
||||
|
||||
/* decode the group the modification took place in */
|
||||
fmeta->group = H5O_NAME[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->group)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the group name part */
|
||||
p += H5O_NAME[0].raw_size(f, fmeta->group);
|
||||
|
||||
/* decode the dataset the modification took place in */
|
||||
fmeta->dset = H5O_NAME[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->dset)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataset name part */
|
||||
p += H5O_NAME[0].raw_size(f, fmeta->dset);
|
||||
|
||||
/* decode the property list last */
|
||||
fmeta->plist = H5O_PLIST[0].decode(f, p, NULL);
|
||||
|
||||
if (!fmeta->plist)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* Set return value */
|
||||
ret_value = (void *)fmeta; /*success*/
|
||||
|
||||
done:
|
||||
if (!ret_value && fmeta) {
|
||||
/* free up fmeta */
|
||||
if (H5O_SDSPACE[0].free && fmeta->sdim)
|
||||
H5O_SDSPACE[0].free(fmeta->sdim);
|
||||
|
||||
if (H5O_DTYPE[0].free && fmeta->dtype)
|
||||
H5O_DTYPE[0].free(fmeta->dtype);
|
||||
|
||||
if (H5O_MTIME[0].free && fmeta->mtime)
|
||||
H5O_MTIME[0].free(fmeta->mtime);
|
||||
|
||||
if (H5O_LAYOUT[0].free && fmeta->layout)
|
||||
H5O_LAYOUT[0].free(fmeta->layout);
|
||||
|
||||
if (H5O_NAME[0].free && fmeta->group)
|
||||
H5O_NAME[0].free(fmeta->dset);
|
||||
|
||||
if (H5O_NAME[0].free && fmeta->dset)
|
||||
H5O_NAME[0].free(fmeta->dset);
|
||||
|
||||
if (H5O_PLIST[0].free && fmeta->plist)
|
||||
H5O_PLIST[0].free(fmeta->plist);
|
||||
|
||||
H5FL_FREE(H5O_fphdf5_t, fmeta);
|
||||
}
|
||||
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_encode
|
||||
* Purpose: Encode a metadata message for the SAP and return a pointer to
|
||||
* a memory struct with the encoded information.
|
||||
*
|
||||
* This function encodes the "raw" form of a metadata message
|
||||
* sent from the SAP into a struct in memory native format.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* uint8 *p OUT: the raw information buffer
|
||||
* const void *mesg IN: pointer to the metadata to encode
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 21. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_fphdf5_encode(H5F_t *f, uint8_t *p, const void *mesg)
|
||||
{
|
||||
const H5O_fphdf5_t *fmeta = (const H5O_fphdf5_t *)mesg;
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_encode, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(p);
|
||||
assert(fmeta);
|
||||
|
||||
/* encode the OID first */
|
||||
NBYTEENCODE(p, fmeta->oid, sizeof(fmeta->oid));
|
||||
|
||||
/* encode the header address info next */
|
||||
NBYTEENCODE(p, &fmeta->header, sizeof(fmeta->header));
|
||||
|
||||
/* encode the dataspace dimensions next */
|
||||
ret_value = H5O_SDSPACE[0].encode(f, p, fmeta->sdim);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataspace dimensions part */
|
||||
p += H5O_SDSPACE[0].raw_size(f, fmeta->sdim);
|
||||
|
||||
/* encode the datatype next */
|
||||
ret_value = H5O_DTYPE[0].encode(f, p, fmeta->dtype);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the datatype part */
|
||||
p += H5O_DTYPE[0].raw_size(f, fmeta->dtype);
|
||||
|
||||
/* encode the modification time next */
|
||||
ret_value = H5O_MTIME[0].encode(f, p, fmeta->mtime);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the modification time part */
|
||||
p += H5O_MTIME[0].raw_size(f, fmeta->mtime);
|
||||
|
||||
/* encode the dataset layout next */
|
||||
ret_value = H5O_LAYOUT[0].encode(f, p, fmeta->layout);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataset layout part */
|
||||
p += H5O_LAYOUT[0].raw_size(f, fmeta->layout);
|
||||
|
||||
/* encode the group name next */
|
||||
ret_value = H5O_NAME[0].encode(f, p, fmeta->group);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the group name part */
|
||||
p += H5O_NAME[0].raw_size(f, fmeta->group);
|
||||
|
||||
/* encode the dataset name next */
|
||||
ret_value = H5O_NAME[0].encode(f, p, fmeta->dset);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
/* jump past the dataset name part */
|
||||
p += H5O_NAME[0].raw_size(f, fmeta->dset);
|
||||
|
||||
/* decode the property list last */
|
||||
ret_value = H5O_PLIST[0].encode(f, p, fmeta->plist);
|
||||
|
||||
if (ret_value < 0)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_copy
|
||||
* Purpose: Copies a metadata object from MESG to DEST allocating DEST if
|
||||
* necessary.
|
||||
*
|
||||
* const void *mesg IN: pointer to the metadata to copy
|
||||
* const void *dest OUT: pointer to the destination metadata struct
|
||||
*
|
||||
* Return: Success: Pointer to DEST
|
||||
* Failure: NULL
|
||||
* Programmer: Bill Wendling, 21. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static void *
|
||||
H5O_fphdf5_copy(const void *mesg, void *dest)
|
||||
{
|
||||
const H5O_fphdf5_t *src = (const H5O_fphdf5_t *)mesg;
|
||||
H5O_fphdf5_t *dst = (H5O_fphdf5_t *)dest;
|
||||
void *ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_copy, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(src);
|
||||
|
||||
if (!dst && NULL == (dst = H5FL_MALLOC(H5O_fphdf5_t)))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* copy the individual metadata*/
|
||||
HDmemcpy(dst->oid,src->oid,sizeof(src->oid));
|
||||
|
||||
H5O_SDSPACE[0].copy(src->sdim, dst->sdim);
|
||||
dst->header = src->header;
|
||||
H5O_DTYPE[0].copy(src->dtype, dst->dtype);
|
||||
H5O_MTIME[0].copy(src->mtime, dst->mtime);
|
||||
H5O_LAYOUT[0].copy(src->layout, dst->layout);
|
||||
H5O_NAME[0].copy(src->group, dst->group);
|
||||
H5O_NAME[0].copy(src->dset, dst->dset);
|
||||
|
||||
if (H5O_PLIST[0].copy)
|
||||
H5O_PLIST[0].copy(src->plist, dst->plist);
|
||||
|
||||
/* Set return value */
|
||||
ret_value = dst;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_size
|
||||
* Purpose: Return the raw message size in bytes.
|
||||
*
|
||||
* This function returns the size of hte raw simple
|
||||
* dimensionality, datatype, and object path message on succes.
|
||||
* (Not counting the message type or size fields, only the data
|
||||
* portion of the message). It doesn't take into account
|
||||
* alignment.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* const void *mesg IN: pointer to the metadata structure
|
||||
*
|
||||
* Return: Success: Size of message
|
||||
* Failure: 0
|
||||
* Programmer: Bill Wendling, 21. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static size_t
|
||||
H5O_fphdf5_size(H5F_t *f, const void *mesg)
|
||||
{
|
||||
const H5O_fphdf5_t *fmeta = (const H5O_fphdf5_t *)mesg;
|
||||
size_t ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_size, 0);
|
||||
|
||||
/* add in the metadata sizes */
|
||||
ret_value = sizeof(fmeta->oid);
|
||||
ret_value += H5O_SDSPACE[0].raw_size(f, fmeta->sdim);
|
||||
ret_value += sizeof(fmeta->header);
|
||||
ret_value += H5O_DTYPE[0].raw_size(f, fmeta->dtype);
|
||||
ret_value += H5O_MTIME[0].raw_size(f, fmeta->mtime);
|
||||
ret_value += H5O_LAYOUT[0].raw_size(f, fmeta->layout);
|
||||
ret_value += H5O_NAME[0].raw_size(f, fmeta->group);
|
||||
ret_value += H5O_NAME[0].raw_size(f, fmeta->dset);
|
||||
ret_value += H5O_PLIST[0].raw_size(f, fmeta->plist);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_reset
|
||||
* Purpose: Frees the inside of a metadata message and resets it to some
|
||||
* initial value.
|
||||
*
|
||||
* const void *mesg IN: pointer to the metadata to reset
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 21. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_fphdf5_reset(void *mesg)
|
||||
{
|
||||
H5O_fphdf5_t *fmeta = (H5O_fphdf5_t *)mesg;
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_reset, FAIL);
|
||||
|
||||
/* reset the metadata */
|
||||
HDmemset(fmeta->oid,0,sizeof(fmeta->oid));
|
||||
|
||||
if (H5O_SDSPACE[0].reset)
|
||||
ret_value = H5O_SDSPACE[0].reset(fmeta->sdim);
|
||||
|
||||
fmeta->header = 0;
|
||||
|
||||
if (H5O_DTYPE[0].reset)
|
||||
ret_value = H5O_DTYPE[0].reset(fmeta->dtype);
|
||||
|
||||
if (H5O_MTIME[0].reset)
|
||||
ret_value = H5O_MTIME[0].reset(fmeta->mtime);
|
||||
|
||||
if (H5O_LAYOUT[0].reset)
|
||||
ret_value = H5O_LAYOUT[0].reset(fmeta->layout);
|
||||
|
||||
if (H5O_NAME[0].reset)
|
||||
ret_value = H5O_NAME[0].reset(fmeta->group);
|
||||
|
||||
if (H5O_NAME[0].reset)
|
||||
ret_value = H5O_NAME[0].reset(fmeta->dset);
|
||||
|
||||
if (H5O_PLIST[0].reset)
|
||||
ret_value = H5O_PLIST[0].reset(fmeta->plist);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_free
|
||||
* Purpose: Free's the message
|
||||
*
|
||||
* const void *mesg IN: pointer to the metadata to free
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 21. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_fphdf5_free(void *mesg)
|
||||
{
|
||||
H5O_fphdf5_t *fmeta = (H5O_fphdf5_t *)mesg;
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_free, FAIL);
|
||||
assert(fmeta);
|
||||
|
||||
if (H5O_SDSPACE[0].free && fmeta->sdim)
|
||||
ret_value = H5O_SDSPACE[0].free(fmeta->sdim);
|
||||
|
||||
if (H5O_DTYPE[0].free && fmeta->dtype)
|
||||
ret_value = H5O_DTYPE[0].free(fmeta->dtype);
|
||||
|
||||
if (H5O_MTIME[0].free && fmeta->mtime)
|
||||
ret_value = H5O_MTIME[0].free(fmeta->mtime);
|
||||
|
||||
if (H5O_LAYOUT[0].free && fmeta->layout)
|
||||
ret_value = H5O_MTIME[0].free(fmeta->layout);
|
||||
|
||||
if (H5O_NAME[0].free && fmeta->group)
|
||||
ret_value = H5O_NAME[0].free(fmeta->group);
|
||||
|
||||
if (H5O_NAME[0].free && fmeta->dset)
|
||||
ret_value = H5O_NAME[0].free(fmeta->dset);
|
||||
|
||||
if (H5O_PLIST[0].free && fmeta->plist)
|
||||
ret_value = H5O_PLIST[0].free(fmeta->plist);
|
||||
|
||||
H5FL_FREE(H5O_fphdf5_t, fmeta);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_fphdf5_debug
|
||||
* Purpose: Prints debugging information for the metadata message.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* const void *mesg IN: Pointer to the source metadata struct
|
||||
* FILE *stream IN: Pointer to the stream for output data
|
||||
* int indent IN: Amount to indent information by
|
||||
* int fwidth IN: Field width (?)
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 22. August 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_fphdf5_debug(H5F_t UNUSED *f, hid_t dxpl_id, const void *mesg,
|
||||
FILE * stream, int indent, int fwidth)
|
||||
{
|
||||
const H5O_fphdf5_t *fmeta = (const H5O_fphdf5_t *) mesg;
|
||||
herr_t ret_value = SUCCEED;
|
||||
unsigned int i;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_fphdf5_debug, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(fmeta);
|
||||
assert(stream);
|
||||
assert(indent >= 0);
|
||||
assert(fwidth >= 0);
|
||||
|
||||
HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth, "Metadata:");
|
||||
HDfprintf(stream, "%*sOID: 0x", indent + 1, "");
|
||||
|
||||
for (i = 0; i < sizeof(fmeta->oid); ++i)
|
||||
HDfprintf(stream, "%02x", fmeta->oid[i]);
|
||||
|
||||
HDfprintf(stream, "\n");
|
||||
ret_value = H5O_SDSPACE[0].debug(f, fmeta->sdim, stream, indent + 1, fwidth);
|
||||
HDfprintf(stream, "%*sHeader Address: %" H5_PRINTF_LL_WIDTH "u\n",
|
||||
indent, "", (unsigned long_long)fmeta->header);
|
||||
ret_value = H5O_DTYPE[0].debug(f, fmeta->dtype, stream, indent + 1, fwidth);
|
||||
ret_value = H5O_MTIME[0].debug(f, fmeta->mtime, stream, indent + 1, fwidth);
|
||||
ret_value = H5O_LAYOUT[0].debug(f, fmeta->layout, stream, indent + 1, fwidth);
|
||||
ret_value = H5O_NAME[0].debug(f, fmeta->group, stream, indent + 1, fwidth);
|
||||
ret_value = H5O_NAME[0].debug(f, fmeta->dset, stream, indent + 1, fwidth);
|
||||
ret_value = H5O_PLIST[0].debug(f, fmeta->plist, stream, indent + 1, fwidth);
|
||||
|
||||
HDfprintf(stream, "}\n");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
#endif /* H5_HAVE_FPHDF5 */
|
@ -1,18 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 1997-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, October 8, 1997
|
||||
*
|
||||
* Purpose: Messages related to data layout.
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Dprivate.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
/* PRIVATE PROTOTYPES */
|
||||
static void *H5O_layout_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
|
||||
|
@ -1,17 +1,30 @@
|
||||
/*
|
||||
* Copyright (C) 1998-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Friday, July 24, 1998
|
||||
*
|
||||
* Purpose: The object modification time message.
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#if defined (WIN32) && !defined (__MWERKS__)
|
||||
#include <sys/types.h>
|
||||
@ -413,7 +426,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static size_t
|
||||
H5O_mtime_new_size(H5F_t * UNUSED f, const void * UNUSED mesg)
|
||||
H5O_mtime_new_size(H5F_t UNUSED * f, const void UNUSED * mesg)
|
||||
{
|
||||
size_t ret_value=8; /* Return value */
|
||||
|
||||
@ -449,7 +462,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static size_t
|
||||
H5O_mtime_size(H5F_t * UNUSED f, const void * UNUSED mesg)
|
||||
H5O_mtime_size(H5F_t UNUSED * f, const void UNUSED * mesg)
|
||||
{
|
||||
size_t ret_value=16; /* Return value */
|
||||
|
||||
|
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5Oname.c
|
||||
* Aug 12 1997
|
||||
@ -14,10 +24,13 @@
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#define PABLO_MASK H5O_name_mask
|
||||
|
||||
|
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5Onull.c
|
||||
* Aug 6 1997
|
||||
@ -14,8 +24,11 @@
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#define PABLO_MASK H5O_null_mask
|
||||
|
||||
|
210
src/H5Opkg.h
Normal file
210
src/H5Opkg.h
Normal file
@ -0,0 +1,210 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef H5O_PACKAGE
|
||||
#error "Do not include this file outside the H5O package!"
|
||||
#endif
|
||||
|
||||
#ifndef _H5Opkg_H
|
||||
#define _H5Opkg_H
|
||||
|
||||
/* Include private header file */
|
||||
#include "H5Oprivate.h" /* Object header functions */
|
||||
|
||||
/*
|
||||
* Align messages on 8-byte boundaries because we would like to copy the
|
||||
* object header chunks directly into memory and operate on them there, even
|
||||
* on 64-bit architectures. This allows us to reduce the number of disk I/O
|
||||
* requests with a minimum amount of mem-to-mem copies.
|
||||
*/
|
||||
#define H5O_ALIGN(X) (8*(((X)+8-1)/8))
|
||||
|
||||
/* Object header macros */
|
||||
#define H5O_NMESGS 32 /*initial number of messages */
|
||||
#define H5O_NCHUNKS 8 /*initial number of chunks */
|
||||
#define H5O_ALL (-1) /*delete all messages of type */
|
||||
|
||||
/* Version of object header structure */
|
||||
#define H5O_VERSION 1
|
||||
|
||||
/*
|
||||
* Size of object header header.
|
||||
*/
|
||||
#define H5O_SIZEOF_HDR(F) \
|
||||
H5O_ALIGN(1 + /*version number */ \
|
||||
1 + /*alignment */ \
|
||||
2 + /*number of messages */ \
|
||||
4 + /*reference count */ \
|
||||
4) /*header data size */
|
||||
|
||||
/*
|
||||
* Size of message header
|
||||
*/
|
||||
#define H5O_SIZEOF_MSGHDR(F) \
|
||||
H5O_ALIGN(2 + /*message type */ \
|
||||
2 + /*sizeof message data */ \
|
||||
4) /*reserved */
|
||||
|
||||
typedef struct H5O_class_t {
|
||||
int id; /*message type ID on disk */
|
||||
const char *name; /*for debugging */
|
||||
size_t native_size; /*size of native message */
|
||||
void *(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*);
|
||||
herr_t (*encode)(H5F_t*, uint8_t*, const void*);
|
||||
void *(*copy)(const void*, void*); /*copy native value */
|
||||
size_t (*raw_size)(H5F_t*, const void*);/*sizeof raw val */
|
||||
herr_t (*reset)(void *); /*free nested data structs */
|
||||
herr_t (*free)(void *); /*free main data struct */
|
||||
herr_t (*get_share)(H5F_t*, const void*, struct H5O_shared_t*);
|
||||
herr_t (*set_share)(H5F_t*, void*, const struct H5O_shared_t*);
|
||||
herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
|
||||
} H5O_class_t;
|
||||
|
||||
typedef struct H5O_mesg_t {
|
||||
const H5O_class_t *type; /*type of message */
|
||||
hbool_t dirty; /*raw out of date wrt native */
|
||||
uint8_t flags; /*message flags */
|
||||
void *native; /*native format message */
|
||||
uint8_t *raw; /*ptr to raw data */
|
||||
size_t raw_size; /*size with alignment */
|
||||
unsigned chunkno; /*chunk number for this mesg */
|
||||
} H5O_mesg_t;
|
||||
|
||||
typedef struct H5O_chunk_t {
|
||||
hbool_t dirty; /*dirty flag */
|
||||
haddr_t addr; /*chunk file address */
|
||||
size_t size; /*chunk size */
|
||||
uint8_t *image; /*image of file */
|
||||
} H5O_chunk_t;
|
||||
|
||||
typedef struct H5O_t {
|
||||
H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
|
||||
/* first field in structure */
|
||||
int version; /*version number */
|
||||
int nlink; /*link count */
|
||||
unsigned nmesgs; /*number of messages */
|
||||
unsigned alloc_nmesgs; /*number of message slots */
|
||||
H5O_mesg_t *mesg; /*array of messages */
|
||||
unsigned nchunks; /*number of chunks */
|
||||
unsigned alloc_nchunks; /*chunks allocated */
|
||||
H5O_chunk_t *chunk; /*array of chunks */
|
||||
} H5O_t;
|
||||
|
||||
/*
|
||||
* Null Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_NULL[1];
|
||||
|
||||
/*
|
||||
* Simple Data Space Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_SDSPACE[1];
|
||||
|
||||
/*
|
||||
* Data Type Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_DTYPE[1];
|
||||
|
||||
/*
|
||||
* Old Fill Value Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_FILL[1];
|
||||
|
||||
/*
|
||||
* New Fill Value Message. The new fill value message is fill value plus
|
||||
* space allocation time and fill value writing time and whether fill
|
||||
* value is defined.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_FILL_NEW[1];
|
||||
|
||||
/*
|
||||
* External File List Message
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_EFL[1];
|
||||
|
||||
/*
|
||||
* Data Layout Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_LAYOUT[1];
|
||||
|
||||
#ifdef H5O_ENABLE_BOGUS
|
||||
/*
|
||||
* "Bogus" Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_BOGUS[1];
|
||||
#endif /* H5O_ENABLE_BOGUS */
|
||||
|
||||
/*
|
||||
* Filter pipeline message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_PLINE[1];
|
||||
|
||||
/*
|
||||
* Attribute Message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_ATTR[1];
|
||||
|
||||
/*
|
||||
* Object name message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_NAME[1];
|
||||
|
||||
/*
|
||||
* Modification time message. The message is just a `time_t'.
|
||||
* (See also the "new" modification time message)
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_MTIME[1];
|
||||
|
||||
/*
|
||||
* Shared object message. This message ID never really appears in an object
|
||||
* header. Instead, bit 2 of the `Flags' field will be set and the ID field
|
||||
* will be the ID of the pointed-to message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_SHARED[1];
|
||||
|
||||
/*
|
||||
* Object header continuation message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_CONT[1];
|
||||
|
||||
/*
|
||||
* Symbol table message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_STAB[1];
|
||||
|
||||
/*
|
||||
* New Modification time message. The message is just a `time_t'.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_MTIME_NEW[1];
|
||||
|
||||
/*
|
||||
* Generic property list message.
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_PLIST[1];
|
||||
|
||||
#ifdef H5_HAVE_FPHDF5
|
||||
/*
|
||||
* Flexible parallel message
|
||||
*/
|
||||
H5_DLLVAR const H5O_class_t H5O_FPHDF5[1];
|
||||
#endif /* H5_HAVE_FPHDF5 */
|
||||
|
||||
/* Package-local function prototypes */
|
||||
|
||||
/* Symbol table operators */
|
||||
H5_DLL void *H5O_stab_fast(const H5G_cache_t *cache, const struct H5O_class_t *type,
|
||||
void *_mesg);
|
||||
|
||||
#endif /* _H5Opkg_H */
|
||||
|
@ -1,17 +1,31 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1998-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, April 15, 1998
|
||||
*
|
||||
* Purpose: Data filter pipeline message.
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
/* Interface initialization */
|
||||
#define PABLO_MASK H5O_pline_mask
|
||||
|
553
src/H5Oplist.c
553
src/H5Oplist.c
@ -1,553 +0,0 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define H5P_PACKAGE /* prevent warning from including H5Ppkg.h */
|
||||
|
||||
#include "H5private.h" /* Generic functions */
|
||||
#include "H5Eprivate.h" /* Error handling */
|
||||
#include "H5FLprivate.h" /* Free lists */
|
||||
#include "H5Iprivate.h" /* IDs */
|
||||
#include "H5MMprivate.h" /* Memory management */
|
||||
#include "H5Oprivate.h" /* Object headers */
|
||||
#include "H5Ppkg.h" /* Property lists */
|
||||
|
||||
#if defined (WIN32) && !defined (__MWERKS__)
|
||||
#include <sys/types.h>
|
||||
#include <sys/timeb.h>
|
||||
#endif
|
||||
|
||||
/* Pablo mask */
|
||||
#define PABLO_MASK H5O_plist_mask
|
||||
|
||||
/* local prototypes */
|
||||
static void *H5O_plist_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
|
||||
static herr_t H5O_plist_encode(H5F_t *f, uint8_t *p, const void *_mesg);
|
||||
static size_t H5O_plist_size(H5F_t *f, const void *_mesg);
|
||||
static herr_t H5O_plist_free(void *_mesg);
|
||||
static herr_t H5O_plist_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
|
||||
FILE *stream, int indent, int fwidth);
|
||||
|
||||
/* This message derives from H5O */
|
||||
const H5O_class_t H5O_PLIST[1] = {{
|
||||
H5O_PLIST_ID, /* message id number */
|
||||
"plist", /* message name for debugging */
|
||||
sizeof(H5P_genplist_t), /* native message size */
|
||||
H5O_plist_decode, /* decode message */
|
||||
H5O_plist_encode, /* encode message */
|
||||
NULL, /* copy the native value */
|
||||
H5O_plist_size, /* size of symbol table entry */
|
||||
NULL, /* default reset method */
|
||||
H5O_plist_free, /* free method */
|
||||
NULL, /* get share method */
|
||||
NULL, /* set share method */
|
||||
H5O_plist_debug, /* debug the message */
|
||||
}};
|
||||
|
||||
#define H5O_PLIST_VERSION 1
|
||||
|
||||
/* Is the interface initialized? */
|
||||
static int interface_initialize_g = 0;
|
||||
#define INTERFACE_INIT NULL
|
||||
|
||||
/* Declare external the free list for hsize_t arrays */
|
||||
H5FL_ARR_EXTERN(hsize_t);
|
||||
|
||||
/* Declare the external free list for the H5P_genprop_t struct */
|
||||
H5FL_EXTERN(H5P_genprop_t);
|
||||
|
||||
/* Declare the external free list for the H5P_genplist_t struct */
|
||||
H5FL_EXTERN(H5P_genplist_t);
|
||||
|
||||
#define UINT_ENCODE(dst, src) \
|
||||
if (sizeof(src) == 2) { \
|
||||
UINT16ENCODE(dst, src); \
|
||||
} else if (sizeof(src) == 4) { \
|
||||
UINT32ENCODE(dst, src); \
|
||||
} else { \
|
||||
/* sizeof(src) == 8 */ \
|
||||
UINT64ENCODE(dst, src); \
|
||||
}
|
||||
|
||||
#define UINT_DECODE(src, dst) \
|
||||
if (sizeof(dst) == 2) { \
|
||||
UINT16DECODE(src, dst); \
|
||||
} else if (sizeof(dst) == 4) { \
|
||||
UINT32DECODE(src, dst); \
|
||||
} else { \
|
||||
/* sizeof(dst) == 8 */ \
|
||||
UINT64DECODE(src, dst); \
|
||||
}
|
||||
|
||||
#define INT_ENCODE(dst, src) \
|
||||
if (sizeof(src) == 2) { \
|
||||
INT16ENCODE(dst, src); \
|
||||
} else if (sizeof(src) == 4) { \
|
||||
INT32ENCODE(dst, src); \
|
||||
} else { \
|
||||
/* sizeof(src) == 8 */ \
|
||||
INT64ENCODE(dst, src); \
|
||||
}
|
||||
|
||||
#define INT_DECODE(src, dst) \
|
||||
if (sizeof(dst) == 2) { \
|
||||
INT16DECODE(src, dst); \
|
||||
} else if (sizeof(dst) == 4) { \
|
||||
INT32DECODE(src, dst); \
|
||||
} else { \
|
||||
/* sizeof(dst) == 8 */ \
|
||||
INT64DECODE(src, dst); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_plist_decode
|
||||
* Purpose: Decode a property list and return a pointer to a memory
|
||||
* struct with the decoded information.
|
||||
*
|
||||
* This function decodes the "raw" form of a serialized
|
||||
* property list in memory native format. The struct is
|
||||
* allocated within this function using malloc() and is
|
||||
* returned to the caller.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* uint8 *p OUT: the raw information buffer
|
||||
* H5O_shared_t *sh IN: not used; must be NULL
|
||||
*
|
||||
* Return: Success: Pointer to the new message in native order
|
||||
* Failure: NULL
|
||||
* Programmer: Bill Wendling, 24, September 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static void *
|
||||
H5O_plist_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
|
||||
{
|
||||
H5P_genplist_t *new_plist = NULL;
|
||||
H5P_genclass_t *pclass; /* property list class to modify */
|
||||
hid_t new_plist_id; /* property list ID of new list created */
|
||||
int version; /* message version number */
|
||||
unsigned int i, nprops;
|
||||
void *ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_plist_decode, NULL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(p);
|
||||
assert(!sh);
|
||||
|
||||
/* Version number */
|
||||
version = *p++;
|
||||
|
||||
if (version != H5O_PLIST_VERSION)
|
||||
HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for property list message");
|
||||
|
||||
/* Reserved (for what?) */
|
||||
++p;
|
||||
|
||||
/*
|
||||
* Decode the sizes of the parts of the property list. The sizes
|
||||
* stored in the file are exact but the parts are aligned on 8-byte
|
||||
* boundaries.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Retrieve the name of the property class with its parent(s). It's a
|
||||
* regular NULL terminated string.
|
||||
*/
|
||||
if ((pclass = H5P_open_class_path((const char *)p)) == NULL)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTOPENOBJ, NULL, "can't open the class path");
|
||||
|
||||
if (*p)
|
||||
p += HDstrlen((const char *)p) + 1; /* + 1 for the NULL */
|
||||
else
|
||||
++p;
|
||||
|
||||
UINT_DECODE(p, nprops);
|
||||
|
||||
/* Allocate new property list */
|
||||
if ((new_plist = H5FL_CALLOC(H5P_genplist_t)) == NULL)
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* Initialize new property list */
|
||||
new_plist->pclass = pclass;
|
||||
new_plist->nprops = 0; /* Initially the plist has the same
|
||||
number of properties as the class */
|
||||
new_plist->class_init = 0; /* Initially, wait until the class
|
||||
callback finishes to set */
|
||||
|
||||
/* Initialize the TBBT to hold the properties */
|
||||
if((new_plist->props=H5TB_fast_dmake(H5TB_FAST_STR_COMPARE))==NULL)
|
||||
HGOTO_ERROR(H5E_PLIST,H5E_CANTMAKETREE,NULL,"can't create TBBT for properties");
|
||||
|
||||
/* Insert properties into property list */
|
||||
for (i = 0; i < nprops; ++i) {
|
||||
H5P_genprop_t *tprop;
|
||||
unsigned str_len;
|
||||
|
||||
/*
|
||||
* Allocate and initialize the property structure which is going
|
||||
* to hold the information we're reading in.
|
||||
*/
|
||||
if (NULL == (tprop = H5FL_CALLOC(H5P_genprop_t)))
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
/* Grab the length of the name */
|
||||
UINT_DECODE(p, str_len);
|
||||
|
||||
/* Allocate space for the name and copy it */
|
||||
if (NULL == (tprop->name = H5MM_malloc(str_len + 1))) {
|
||||
H5FL_FREE(H5P_genprop_t,tprop);
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
}
|
||||
HDmemcpy(tprop->name, p, str_len + 1);
|
||||
p += str_len + 1;
|
||||
|
||||
/* Grab the size of the "value" data */
|
||||
UINT_DECODE(p, tprop->size);
|
||||
|
||||
/* Allocate and memcpy the value part of the property. */
|
||||
if ((tprop->value = H5MM_malloc(tprop->size)) == NULL) {
|
||||
H5MM_xfree(tprop->name);
|
||||
H5FL_FREE(H5P_genprop_t,tprop);
|
||||
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
}
|
||||
|
||||
HDmemcpy(tprop->value, p, tprop->size);
|
||||
p += tprop->size;
|
||||
|
||||
/* Set the property's type */
|
||||
tprop->type=H5P_PROP_WITHIN_LIST;
|
||||
|
||||
/* Insert the initialized property into the property list */
|
||||
if (H5P_add_prop(new_plist->props, tprop) < 0) {
|
||||
H5MM_xfree(tprop->value);
|
||||
H5MM_xfree(tprop->name);
|
||||
H5FL_FREE(H5P_genprop_t,tprop);
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, NULL, "Can't insert property into list");
|
||||
}
|
||||
|
||||
/* Increment the number of properties in list */
|
||||
++new_plist->nprops;
|
||||
}
|
||||
|
||||
/* Increment the number of property lists derived from class */
|
||||
if (H5P_access_class(new_plist->pclass, H5P_MOD_INC_LST) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, NULL, "Can't increment class ref count");
|
||||
|
||||
/* Get an atom for the property list */
|
||||
if ((new_plist_id = H5I_register(H5I_GENPROP_LST, new_plist)) < 0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, NULL, "unable to atomize property list");
|
||||
|
||||
/*
|
||||
* Save the property list ID in the property list struct, for use in
|
||||
* the property class's 'close' callback
|
||||
*/
|
||||
new_plist->plist_id = new_plist_id;
|
||||
|
||||
/* Set the class initialization flag */
|
||||
new_plist->class_init = 1;
|
||||
|
||||
/* Set return value */
|
||||
ret_value = new_plist; /* success */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_plist_encode
|
||||
* Purpose: Encode a property list and return a pointer to a memory
|
||||
* struct with the encoded information.
|
||||
*
|
||||
* This function encodes the "raw" form of a property list
|
||||
* into a struct in memory native format.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* uint8 *p OUT: the raw information buffer
|
||||
* const void *mesg IN: pointer to the metadata to encode
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 24, September 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_plist_encode(H5F_t UNUSED *f, uint8_t *p, const void *mesg)
|
||||
{
|
||||
const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
|
||||
char *class_path; /* Pointer to class path generated for property list */
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_plist_encode, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(p);
|
||||
assert(plist);
|
||||
|
||||
/* Version */
|
||||
*p++ = H5O_PLIST_VERSION;
|
||||
|
||||
/* Reserved */
|
||||
*p++ = '\0';
|
||||
|
||||
/*
|
||||
* Encode the sizes of the parts of the property list. The sizes
|
||||
* stored in the file are exact but the parts are aligned on 8-byte
|
||||
* boundaries.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The class name encoded will look like:
|
||||
*
|
||||
* BaseClass/ParentClass/.../DerivedClass
|
||||
*/
|
||||
class_path = H5P_get_class_path(plist->pclass);
|
||||
|
||||
if (class_path) {
|
||||
size_t s = HDstrlen(class_path) + 1;
|
||||
|
||||
HDmemcpy(p, class_path, s);
|
||||
p += s;
|
||||
} else {
|
||||
*p++ = '\0';
|
||||
}
|
||||
|
||||
HDfree(class_path);
|
||||
UINT_ENCODE(p, plist->nprops);
|
||||
|
||||
/* Encode the properties for this property list */
|
||||
if(plist->nprops>0) {
|
||||
H5TB_NODE *curr_node; /* Current node in TBBT */
|
||||
H5P_genprop_t *tprop; /* Pointer to property */
|
||||
|
||||
/* Walk through the properties in the old class */
|
||||
curr_node=H5TB_first(plist->props->root);
|
||||
while(curr_node!=NULL) {
|
||||
size_t s; /* Length of property name */
|
||||
|
||||
/* Get a pointer to the property from the node */
|
||||
tprop=curr_node->data;
|
||||
assert(tprop->name); /* Properties are guaranteed to have names */
|
||||
|
||||
/*
|
||||
* Copy the meat of the generic property:
|
||||
*
|
||||
* 1. The length of the property name
|
||||
* 2. The name of the property
|
||||
* 3. The size of the property value
|
||||
* 4. The property value
|
||||
*/
|
||||
|
||||
/* Get the name's length & encode it */
|
||||
s = HDstrlen(tprop->name);
|
||||
UINT_ENCODE(p, s);
|
||||
|
||||
/* Encode the name itself */
|
||||
HDmemcpy(p, tprop->name, s + 1);
|
||||
p += s + 1;
|
||||
|
||||
/* Encode the property value's size & data */
|
||||
UINT_ENCODE(p, tprop->size);
|
||||
HDmemcpy(p, tprop->value, tprop->size);
|
||||
p += tprop->size;
|
||||
|
||||
/* Get the next property node in the TBBT */
|
||||
curr_node=H5TB_next(curr_node);
|
||||
} /* end while */
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_plist_size
|
||||
* Purpose: Return the raw message size in bytes.
|
||||
*
|
||||
* This function returns the size of the raw elements on
|
||||
* success. (Not counting the message type or size fields,
|
||||
* only the data portion of the message). It doesn't take
|
||||
* into account alignment.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* const void *mesg IN: pointer to the metadata structure
|
||||
*
|
||||
* Return: Success: Size of message
|
||||
* Failure: 0
|
||||
* Programmer: Bill Wendling, 24, September 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static size_t
|
||||
H5O_plist_size(H5F_t UNUSED *f, const void *mesg)
|
||||
{
|
||||
const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
|
||||
char *class_path=NULL; /* Pointer to class path generated for property list */
|
||||
size_t ret_value;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_plist_size, 0);
|
||||
|
||||
/* check args */
|
||||
assert(plist);
|
||||
|
||||
ret_value = 1 + /*version info */
|
||||
1; /*reserved */
|
||||
|
||||
class_path = H5P_get_class_path(plist->pclass);
|
||||
|
||||
if (class_path)
|
||||
ret_value += HDstrlen(class_path) + 1; /*class path */
|
||||
else
|
||||
++ret_value;
|
||||
|
||||
HDfree(class_path);
|
||||
|
||||
ret_value += sizeof(plist->nprops); /*num properties */
|
||||
|
||||
/* Calculate the size of the properties for this property list */
|
||||
if(plist->nprops>0) {
|
||||
H5TB_NODE *curr_node; /* Current node in TBBT */
|
||||
H5P_genprop_t *tprop; /* Pointer to property */
|
||||
|
||||
/* Walk through the properties in the old class */
|
||||
curr_node=H5TB_first(plist->props->root);
|
||||
while(curr_node!=NULL) {
|
||||
/* Get a pointer to the property from the node */
|
||||
tprop=curr_node->data;
|
||||
|
||||
ret_value += sizeof(size_t); /*length of the name */
|
||||
ret_value += HDstrlen(tprop->name) + 1; /*the name */
|
||||
ret_value += sizeof(tprop->size) + /*size of data size */
|
||||
tprop->size; /*the data */
|
||||
|
||||
/* Get the next property node in the TBBT */
|
||||
curr_node=H5TB_next(curr_node);
|
||||
} /* end while */
|
||||
} /* end if */
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_plist_free
|
||||
* Purpose: Free's the property list.
|
||||
*
|
||||
* const void *mesg IN: pointer to the property list to free
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 24, September 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_plist_free(void *mesg)
|
||||
{
|
||||
H5P_genplist_t *plist = mesg;
|
||||
herr_t ret_value = SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_plist_free, FAIL);
|
||||
assert(mesg);
|
||||
|
||||
ret_value = H5P_close(plist);
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Function: H5O_plist_debug
|
||||
* Purpose: Prints debugging information for the property list message.
|
||||
*
|
||||
* H5F_t *f IN: pointer to the HDF5 file struct
|
||||
* const void *mesg IN: Pointer to the source property list struct
|
||||
* FILE *stream IN: Pointer to the stream for output data
|
||||
* int indent IN: Amount to indent information by
|
||||
* int fwidth IN: Field width (?)
|
||||
*
|
||||
* Return: Success: Non-negative
|
||||
* Failure: Negative
|
||||
* Programmer: Bill Wendling, 24, September 2002
|
||||
* Modifications:
|
||||
*/
|
||||
static herr_t
|
||||
H5O_plist_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *mesg, FILE *stream,
|
||||
int indent, int fwidth)
|
||||
{
|
||||
const H5P_genplist_t *plist = (const H5P_genplist_t *)mesg;
|
||||
herr_t ret_value=SUCCEED;
|
||||
|
||||
FUNC_ENTER_NOAPI(H5O_plist_debug, FAIL);
|
||||
|
||||
/* check args */
|
||||
assert(f);
|
||||
assert(plist);
|
||||
assert(stream);
|
||||
assert(indent >= 0);
|
||||
assert(fwidth >= 0);
|
||||
|
||||
HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth, "Property List:");
|
||||
indent += 2;
|
||||
HDfprintf(stream, "%*sNumber of properties: %d\n", indent, "", plist->nprops);
|
||||
HDfprintf(stream, "%*sProperties {\n", indent, "");
|
||||
indent += 2;
|
||||
|
||||
/* Calculate the size of the properties for this property list */
|
||||
if(plist->nprops>0) {
|
||||
H5TB_NODE *curr_node; /* Current node in TBBT */
|
||||
H5P_genprop_t *tprop; /* Pointer to property */
|
||||
|
||||
/* Walk through the properties in the old class */
|
||||
curr_node=H5TB_first(plist->props->root);
|
||||
while(curr_node!=NULL) {
|
||||
register unsigned int j;
|
||||
|
||||
/* Get a pointer to the property from the node */
|
||||
tprop=curr_node->data;
|
||||
|
||||
HDfprintf(stream, "%*sProperty {\n", indent, "");
|
||||
indent += 2;
|
||||
|
||||
/*
|
||||
* Print the meat of the generic property:
|
||||
*
|
||||
* 1. The name of the property
|
||||
* 2. The size of the property value
|
||||
* 3. The property value
|
||||
*/
|
||||
HDfprintf(stream, "%*sName: %s\n", indent, "", tprop->name);
|
||||
HDfprintf(stream, "%*sValue Size: %d\n", indent, "", tprop->size);
|
||||
HDfprintf(stream, "%*sValue: ", indent, "");
|
||||
|
||||
for (j = 0; j < tprop->size; ++j)
|
||||
HDfprintf(stream, "%02x ", ((char *)tprop->value)[j]);
|
||||
|
||||
indent -= 2;
|
||||
HDfprintf(stream, "\n%*s}\n", indent, "");
|
||||
|
||||
/* Get the next property node in the TBBT */
|
||||
curr_node=H5TB_next(curr_node);
|
||||
} /* end while */
|
||||
} /* end if */
|
||||
|
||||
indent -= 2;
|
||||
HDfprintf(stream, "%*s}\n", indent, "");
|
||||
|
||||
indent -= 2;
|
||||
HDfprintf(stream, "%*s}\n", indent, "");
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_NOAPI(ret_value);
|
||||
}
|
262
src/H5Oprivate.h
262
src/H5Oprivate.h
@ -27,132 +27,52 @@
|
||||
#ifndef _H5Oprivate_H
|
||||
#define _H5Oprivate_H
|
||||
|
||||
#include "H5Opublic.h"
|
||||
#include "H5Dpublic.h"
|
||||
/* Include the public header file for this API */
|
||||
#include "H5Opublic.h" /* Object header functions */
|
||||
|
||||
/* Public headers needed by this file */
|
||||
#include "H5Dpublic.h" /* Dataset functions */
|
||||
#include "H5Spublic.h" /* Dataspace functions */
|
||||
|
||||
/* Private headers needed by this file */
|
||||
#include "H5private.h"
|
||||
#include "H5Fprivate.h"
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5HGprivate.h"
|
||||
#include "H5Rprivate.h"
|
||||
#include "H5Spublic.h"
|
||||
#include "H5Tprivate.h"
|
||||
#include "H5Zprivate.h"
|
||||
|
||||
/*
|
||||
* Align messages on 8-byte boundaries because we would like to copy the
|
||||
* object header chunks directly into memory and operate on them there, even
|
||||
* on 64-bit architectures. This allows us to reduce the number of disk I/O
|
||||
* requests with a minimum amount of mem-to-mem copies.
|
||||
*/
|
||||
#define H5O_ALIGN(X) (8*(((X)+8-1)/8))
|
||||
#include "H5private.h" /* Generic functions */
|
||||
#include "H5HGprivate.h" /* Global heap functions */
|
||||
#include "H5Tprivate.h" /* Datatype functions */
|
||||
#include "H5Zprivate.h" /* I/O pipeline functions */
|
||||
|
||||
/* Object header macros */
|
||||
#define H5O_MIN_SIZE H5O_ALIGN(32) /*min obj header data size */
|
||||
#define H5O_MAX_SIZE 65536 /*max obj header data size */
|
||||
#define H5O_NMESGS 32 /*initial number of messages */
|
||||
#define H5O_NCHUNKS 8 /*initial number of chunks */
|
||||
#define H5O_NEW_MESG (-1) /*new message */
|
||||
#define H5O_ALL (-1) /*delete all messages of type */
|
||||
|
||||
/* Flags which are part of a message */
|
||||
#define H5O_FLAG_CONSTANT 0x01u
|
||||
#define H5O_FLAG_SHARED 0x02u
|
||||
#define H5O_FLAG_BITS 0x03u
|
||||
#define H5O_VERSION 1
|
||||
|
||||
/* Header message IDs */
|
||||
#define H5O_NULL_ID 0x0000 /* Null Message. */
|
||||
#define H5O_SDSPACE_ID 0x0001 /* Simple Dataspace Message. */
|
||||
#define H5O_DTYPE_ID 0x0003 /* Datatype Message. */
|
||||
#define H5O_FILL_ID 0x0004 /* Fill Value Message. (Old) */
|
||||
#define H5O_FILL_NEW_ID 0x0005 /* Fill Value Message. (New) */
|
||||
#define H5O_EFL_ID 0x0007 /* External File List Message */
|
||||
#define H5O_LAYOUT_ID 0x0008 /* Data Storage Layout Message. */
|
||||
#define H5O_BOGUS_ID 0x0009 /* "Bogus" Message. */
|
||||
#define H5O_PLINE_ID 0x000b /* Filter pipeline message. */
|
||||
#define H5O_ATTR_ID 0x000c /* Attribute Message. */
|
||||
#define H5O_NAME_ID 0x000d /* Object name message. */
|
||||
#define H5O_MTIME_ID 0x000e /* Modification time message. (Old) */
|
||||
#define H5O_SHARED_ID 0x000f /* Shared object message. */
|
||||
#define H5O_CONT_ID 0x0010 /* Object header continuation message. */
|
||||
#define H5O_STAB_ID 0x0011 /* Symbol table message. */
|
||||
#define H5O_MTIME_NEW_ID 0x0012 /* Modification time message. (New) */
|
||||
|
||||
|
||||
/*
|
||||
* Size of object header header.
|
||||
* Fill Value Message. (Old)
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_SIZEOF_HDR(F) \
|
||||
H5O_ALIGN(1 + /*version number */ \
|
||||
1 + /*alignment */ \
|
||||
2 + /*number of messages */ \
|
||||
4 + /*reference count */ \
|
||||
4) /*header data size */
|
||||
|
||||
/*
|
||||
* Size of message header
|
||||
*/
|
||||
#define H5O_SIZEOF_MSGHDR(F) \
|
||||
H5O_ALIGN(2 + /*message type */ \
|
||||
2 + /*sizeof message data */ \
|
||||
4) /*reserved */
|
||||
|
||||
struct H5O_shared_t;
|
||||
typedef struct H5O_class_t {
|
||||
int id; /*message type ID on disk */
|
||||
const char *name; /*for debugging */
|
||||
size_t native_size; /*size of native message */
|
||||
void *(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*);
|
||||
herr_t (*encode)(H5F_t*, uint8_t*, const void*);
|
||||
void *(*copy)(const void*, void*); /*copy native value */
|
||||
size_t (*raw_size)(H5F_t*, const void*);/*sizeof raw val */
|
||||
herr_t (*reset)(void *); /*free nested data structs */
|
||||
herr_t (*free)(void *); /*free main data struct */
|
||||
herr_t (*get_share)(H5F_t*, const void*, struct H5O_shared_t*);
|
||||
herr_t (*set_share)(H5F_t*, void*, const struct H5O_shared_t*);
|
||||
herr_t (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
|
||||
} H5O_class_t;
|
||||
|
||||
typedef struct H5O_mesg_t {
|
||||
const H5O_class_t *type; /*type of message */
|
||||
hbool_t dirty; /*raw out of date wrt native */
|
||||
uint8_t flags; /*message flags */
|
||||
void *native; /*native format message */
|
||||
uint8_t *raw; /*ptr to raw data */
|
||||
size_t raw_size; /*size with alignment */
|
||||
unsigned chunkno; /*chunk number for this mesg */
|
||||
} H5O_mesg_t;
|
||||
|
||||
typedef struct H5O_chunk_t {
|
||||
hbool_t dirty; /*dirty flag */
|
||||
haddr_t addr; /*chunk file address */
|
||||
size_t size; /*chunk size */
|
||||
uint8_t *image; /*image of file */
|
||||
} H5O_chunk_t;
|
||||
|
||||
typedef struct H5O_t {
|
||||
H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
|
||||
/* first field in structure */
|
||||
int version; /*version number */
|
||||
int nlink; /*link count */
|
||||
unsigned nmesgs; /*number of messages */
|
||||
unsigned alloc_nmesgs; /*number of message slots */
|
||||
H5O_mesg_t *mesg; /*array of messages */
|
||||
unsigned nchunks; /*number of chunks */
|
||||
unsigned alloc_nchunks; /*chunks allocated */
|
||||
H5O_chunk_t *chunk; /*array of chunks */
|
||||
} H5O_t;
|
||||
|
||||
/*
|
||||
* Null Message.
|
||||
*/
|
||||
#define H5O_NULL_ID 0x0000
|
||||
H5_DLLVAR const H5O_class_t H5O_NULL[1];
|
||||
|
||||
/*
|
||||
* Simple Data Space Message.
|
||||
*/
|
||||
#define H5O_SDSPACE_ID 0x0001
|
||||
H5_DLLVAR const H5O_class_t H5O_SDSPACE[1];
|
||||
|
||||
/* operates on an H5S_t struct */
|
||||
|
||||
/*
|
||||
* Data Type Message.
|
||||
*/
|
||||
#define H5O_DTYPE_ID 0x0003
|
||||
H5_DLLVAR const H5O_class_t H5O_DTYPE[1];
|
||||
|
||||
/* operates on an H5T_t struct */
|
||||
|
||||
/*
|
||||
* Old Fill Value Message.
|
||||
*/
|
||||
#define H5O_FILL_ID 0x0004
|
||||
H5_DLLVAR const H5O_class_t H5O_FILL[1];
|
||||
|
||||
typedef struct H5O_fill_t {
|
||||
H5T_t *type; /*type. Null implies same as dataset */
|
||||
size_t size; /*number of bytes in the fill value */
|
||||
@ -164,8 +84,6 @@ typedef struct H5O_fill_t {
|
||||
* space allocation time and fill value writing time and whether fill
|
||||
* value is defined.
|
||||
*/
|
||||
#define H5O_FILL_NEW_ID 0x0005
|
||||
H5_DLLVAR const H5O_class_t H5O_FILL_NEW[1];
|
||||
|
||||
typedef struct H5O_fill_new_t {
|
||||
H5T_t *type; /*type. Null implies same as dataset */
|
||||
@ -178,11 +96,10 @@ typedef struct H5O_fill_new_t {
|
||||
|
||||
/*
|
||||
* External File List Message
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_EFL_ID 0x0007 /*external file list id */
|
||||
#define H5O_EFL_ALLOC 16 /*number of slots to alloc at once */
|
||||
#define H5O_EFL_UNLIMITED H5F_UNLIMITED /*max possible file size */
|
||||
H5_DLLVAR const H5O_class_t H5O_EFL[1];/*external file list class */
|
||||
|
||||
typedef struct H5O_efl_entry_t {
|
||||
size_t name_offset; /*offset of name within heap */
|
||||
@ -200,10 +117,9 @@ typedef struct H5O_efl_t {
|
||||
|
||||
/*
|
||||
* Data Layout Message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_LAYOUT_ID 0x0008
|
||||
#define H5O_LAYOUT_NDIMS (H5S_MAX_RANK+1)
|
||||
H5_DLLVAR const H5O_class_t H5O_LAYOUT[1];
|
||||
|
||||
typedef struct H5O_layout_t {
|
||||
int type; /*type of layout, H5D_layout_t */
|
||||
@ -221,10 +137,8 @@ typedef struct H5O_layout_t {
|
||||
#ifdef H5O_ENABLE_BOGUS
|
||||
/*
|
||||
* "Bogus" Message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_BOGUS_ID 0x0009
|
||||
H5_DLLVAR const H5O_class_t H5O_BOGUS[1];
|
||||
|
||||
#define H5O_BOGUS_VALUE 0xdeadbeef
|
||||
typedef struct H5O_bogus_t {
|
||||
unsigned u; /* Hold the bogus info */
|
||||
@ -233,10 +147,8 @@ typedef struct H5O_bogus_t {
|
||||
|
||||
/*
|
||||
* Filter pipeline message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_PLINE_ID 0x000b
|
||||
H5_DLLVAR const H5O_class_t H5O_PLINE[1];
|
||||
|
||||
typedef struct H5O_pline_t {
|
||||
size_t nfilters; /*num filters defined */
|
||||
size_t nalloc; /*num elements in `filter' array */
|
||||
@ -249,37 +161,20 @@ typedef struct H5O_pline_t {
|
||||
} *filter; /*array of filters */
|
||||
} H5O_pline_t;
|
||||
|
||||
/*
|
||||
* Attribute Message.
|
||||
*/
|
||||
#define H5O_ATTR_ID 0x000c
|
||||
H5_DLLVAR const H5O_class_t H5O_ATTR[1];
|
||||
|
||||
/* operates on an H5A_t struct */
|
||||
|
||||
/*
|
||||
* Object name message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_NAME_ID 0x000d
|
||||
H5_DLLVAR const H5O_class_t H5O_NAME[1];
|
||||
|
||||
typedef struct H5O_name_t {
|
||||
char *s; /*ptr to malloc'd memory */
|
||||
} H5O_name_t;
|
||||
|
||||
/*
|
||||
* Modification time message. The message is just a `time_t'.
|
||||
*/
|
||||
#define H5O_MTIME_ID 0x000e
|
||||
H5_DLLVAR const H5O_class_t H5O_MTIME[1];
|
||||
|
||||
/*
|
||||
* Shared object message. This message ID never really appears in an object
|
||||
* header. Instead, bit 2 of the `Flags' field will be set and the ID field
|
||||
* will be the ID of the pointed-to message.
|
||||
*/
|
||||
#define H5O_SHARED_ID 0x000f
|
||||
H5_DLLVAR const H5O_class_t H5O_SHARED[1];
|
||||
|
||||
typedef struct H5O_shared_t {
|
||||
hbool_t in_gh; /*shared by global heap? */
|
||||
@ -291,9 +186,8 @@ typedef struct H5O_shared_t {
|
||||
|
||||
/*
|
||||
* Object header continuation message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_CONT_ID 0x0010
|
||||
H5_DLLVAR const H5O_class_t H5O_CONT[1];
|
||||
|
||||
typedef struct H5O_cont_t {
|
||||
haddr_t addr; /*address of continuation block */
|
||||
@ -305,85 +199,43 @@ typedef struct H5O_cont_t {
|
||||
|
||||
/*
|
||||
* Symbol table message.
|
||||
* (Data structure in memory)
|
||||
*/
|
||||
#define H5O_STAB_ID 0x0011
|
||||
H5_DLLVAR const H5O_class_t H5O_STAB[1];
|
||||
|
||||
H5_DLL void *H5O_stab_fast(const H5G_cache_t *cache, const H5O_class_t *type,
|
||||
void *_mesg);
|
||||
|
||||
typedef struct H5O_stab_t {
|
||||
haddr_t btree_addr; /*address of B-tree */
|
||||
haddr_t heap_addr; /*address of name heap */
|
||||
} H5O_stab_t;
|
||||
|
||||
/*
|
||||
* Modification time message (new format on disk). The message is just a `time_t'.
|
||||
*/
|
||||
#define H5O_MTIME_NEW_ID 0x0012
|
||||
H5_DLLVAR const H5O_class_t H5O_MTIME_NEW[1];
|
||||
|
||||
/*
|
||||
* Generic property list message.
|
||||
*/
|
||||
#define H5O_PLIST_ID 0x0013
|
||||
H5_DLLVAR const H5O_class_t H5O_PLIST[1];
|
||||
|
||||
/* operates on an H5P_genplist_t struct */
|
||||
|
||||
#ifdef H5_HAVE_FPHDF5
|
||||
/*
|
||||
* Flexible parallel message
|
||||
*/
|
||||
#define H5O_FPHDF5_ID 0x0014
|
||||
H5_DLLVAR const H5O_class_t H5O_FPHDF5[1];
|
||||
|
||||
struct H5S_simple_t;
|
||||
struct H5P_genplist_t;
|
||||
|
||||
typedef struct H5O_fphdf5_t {
|
||||
uint8_t oid[H5R_OBJ_REF_BUF_SIZE]; /* OID of object */
|
||||
haddr_t header; /* Header address info */
|
||||
struct H5S_simple_t *sdim; /* Simple dimensionality structure */
|
||||
H5T_t *dtype; /* Datatype structure */
|
||||
time_t *mtime; /* Modification time */
|
||||
H5O_layout_t *layout; /* Dataset layout */
|
||||
H5O_name_t *group; /* Group name */
|
||||
H5O_name_t *dset; /* Dataset name */
|
||||
struct H5P_genplist_t *plist; /* Property list of the object */
|
||||
} H5O_fphdf5_t;
|
||||
|
||||
/* operates on an H5O_fphdf5_t struct */
|
||||
#endif /* H5_HAVE_FPHDF5 */
|
||||
|
||||
/* General message operators */
|
||||
H5_DLL herr_t H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
|
||||
H5G_entry_t *ent/*out*/);
|
||||
H5_DLL herr_t H5O_open(H5G_entry_t *ent);
|
||||
H5_DLL herr_t H5O_close(H5G_entry_t *ent);
|
||||
H5_DLL int H5O_link(H5G_entry_t *ent, int adjust, hid_t dxpl_id);
|
||||
H5_DLL int H5O_count(H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id);
|
||||
H5_DLL htri_t H5O_exists(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, hid_t dxpl_id);
|
||||
H5_DLL void *H5O_read(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, void *mesg, hid_t dxpl_id);
|
||||
H5_DLL int H5O_modify(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
H5_DLL int H5O_count(H5G_entry_t *ent, hid_t type_id, hid_t dxpl_id);
|
||||
H5_DLL htri_t H5O_exists(H5G_entry_t *ent, hid_t type_id, int sequence,
|
||||
hid_t dxpl_id);
|
||||
H5_DLL void *H5O_read(H5G_entry_t *ent, hid_t type_id, int sequence,
|
||||
void *mesg, hid_t dxpl_id);
|
||||
H5_DLL int H5O_modify(H5G_entry_t *ent, hid_t type_id,
|
||||
int overwrite, unsigned flags, unsigned update_time, const void *mesg, hid_t dxpl_id);
|
||||
H5_DLL H5O_t * H5O_protect(H5G_entry_t *ent, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id);
|
||||
H5_DLL int H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
|
||||
H5_DLL struct H5O_t * H5O_protect(H5G_entry_t *ent, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, struct H5O_t *oh, hid_t dxpl_id);
|
||||
H5_DLL int H5O_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, hid_t type_id,
|
||||
unsigned flags, const void *mesg);
|
||||
H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_touch_oh(H5F_t *f, H5O_t *oh, hbool_t force);
|
||||
H5_DLL herr_t H5O_touch_oh(H5F_t *f, struct H5O_t *oh, hbool_t force);
|
||||
#ifdef H5O_ENABLE_BOGUS
|
||||
H5_DLL herr_t H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_bogus_oh(H5F_t *f, H5O_t *oh);
|
||||
H5_DLL herr_t H5O_bogus_oh(H5F_t *f, struct H5O_t *oh);
|
||||
#endif /* H5O_ENABLE_BOGUS */
|
||||
H5_DLL herr_t H5O_remove(H5G_entry_t *ent, const H5O_class_t *type,
|
||||
int sequence, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_reset(const H5O_class_t *type, void *native);
|
||||
H5_DLL void *H5O_free(const H5O_class_t *type, void *mesg);
|
||||
H5_DLL void *H5O_copy(const H5O_class_t *type, const void *mesg, void *dst);
|
||||
H5_DLL herr_t H5O_remove(H5G_entry_t *ent, hid_t type_id, int sequence,
|
||||
hid_t dxpl_id);
|
||||
H5_DLL herr_t H5O_reset(hid_t type_id, void *native);
|
||||
H5_DLL void *H5O_free(hid_t type_id, void *mesg);
|
||||
H5_DLL void *H5O_copy(hid_t type_id, const void *mesg, void *dst);
|
||||
H5_DLL size_t H5O_raw_size(hid_t type_id, H5F_t *f, const void *mesg);
|
||||
H5_DLL herr_t H5O_debug_id(hid_t type_id, H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, int indent, int fwidth);
|
||||
H5_DLL herr_t H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
|
||||
int fwidth);
|
||||
|
||||
|
@ -1,17 +1,18 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
#define H5S_PACKAGE /*prevent warning from including H5Spkg.h */
|
||||
|
||||
#include "H5private.h"
|
||||
@ -19,7 +20,7 @@
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
#include "H5Spkg.h"
|
||||
|
||||
#define PABLO_MASK H5O_sdspace_mask
|
||||
|
@ -1,7 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1998-2001 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, April 1, 1998
|
||||
*
|
||||
@ -14,10 +25,12 @@
|
||||
* the global heap.
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
static void *H5O_shared_decode (H5F_t*, hid_t dxpl_id, const uint8_t*, H5O_shared_t *sh);
|
||||
static herr_t H5O_shared_encode (H5F_t*, uint8_t*, const void*);
|
||||
|
@ -1,8 +1,18 @@
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Copyright (C) 1997-2001 National Center for Supercomputing Applications
|
||||
* All rights reserved.
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*
|
||||
* Created: H5Ostab.c
|
||||
* Aug 6 1997
|
||||
@ -14,12 +24,15 @@
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Eprivate.h"
|
||||
#include "H5FLprivate.h" /*Free Lists */
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5MMprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h" /* Object header functions */
|
||||
|
||||
#define PABLO_MASK H5O_stab_mask
|
||||
|
||||
|
@ -888,7 +888,7 @@ H5Pset_fill_value(hid_t plist_id, hid_t type_id, const void *value)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value");
|
||||
|
||||
/* Reset the fill structure */
|
||||
if(H5O_reset(H5O_FILL, &fill)<0)
|
||||
if(H5O_reset(H5O_FILL_ID, &fill)<0)
|
||||
HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset fill value");
|
||||
|
||||
if(value) {
|
||||
|
36
src/H5S.c
36
src/H5S.c
@ -1,16 +1,16 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
|
||||
/* $Id$ */
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#define H5S_PACKAGE /*suppress error about including H5Spkg */
|
||||
|
||||
@ -1087,7 +1087,7 @@ H5S_modify(H5G_entry_t *ent, const H5S_t *ds, hbool_t update_time, hid_t dxpl_id
|
||||
switch (ds->extent.type) {
|
||||
case H5S_SCALAR:
|
||||
case H5S_SIMPLE:
|
||||
if (H5O_modify(ent, H5O_SDSPACE, 0, 0, update_time, &(ds->extent.u.simple), dxpl_id)<0)
|
||||
if (H5O_modify(ent, H5O_SDSPACE_ID, 0, 0, update_time, &(ds->extent.u.simple), dxpl_id)<0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
|
||||
break;
|
||||
|
||||
@ -1120,7 +1120,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5S_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5S_t *ds)
|
||||
H5S_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, const H5S_t *ds)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
@ -1133,7 +1133,7 @@ H5S_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5S_t *ds)
|
||||
switch (ds->extent.type) {
|
||||
case H5S_SCALAR:
|
||||
case H5S_SIMPLE:
|
||||
if (H5O_append(f, dxpl_id, oh, H5O_SDSPACE, 0, &(ds->extent.u.simple))<0)
|
||||
if (H5O_append(f, dxpl_id, oh, H5O_SDSPACE_ID, 0, &(ds->extent.u.simple))<0)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
|
||||
break;
|
||||
|
||||
@ -1182,7 +1182,7 @@ H5S_read(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
if (NULL==(ds = H5FL_CALLOC(H5S_t)))
|
||||
HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
|
||||
|
||||
if (H5O_read(ent, H5O_SDSPACE, 0, &(ds->extent.u.simple), dxpl_id) == NULL)
|
||||
if (H5O_read(ent, H5O_SDSPACE_ID, 0, &(ds->extent.u.simple), dxpl_id) == NULL)
|
||||
HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, NULL, "unable to load dataspace info from dataset header");
|
||||
|
||||
if(ds->extent.u.simple.rank != 0) {
|
||||
@ -2038,7 +2038,7 @@ H5S_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream, int indent,
|
||||
case H5S_SIMPLE:
|
||||
fprintf(stream, "%*s%-*s H5S_SIMPLE\n", indent, "", fwidth,
|
||||
"Space class:");
|
||||
(H5O_SDSPACE->debug)(f, dxpl_id, &(mesg->extent.u.simple), stream,
|
||||
H5O_debug_id(H5O_SDSPACE_ID, f, dxpl_id, &(mesg->extent.u.simple), stream,
|
||||
indent+3, MAX(0, fwidth-3));
|
||||
break;
|
||||
|
||||
|
@ -108,7 +108,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_all_iter_release (H5S_sel_iter_t * UNUSED sel_iter)
|
||||
H5S_all_iter_release (H5S_sel_iter_t UNUSED * sel_iter)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
@ -140,7 +140,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_all_release (H5S_t * UNUSED space)
|
||||
H5S_all_release (H5S_t UNUSED * space)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
|
@ -100,7 +100,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_none_iter_release (H5S_sel_iter_t * UNUSED sel_iter)
|
||||
H5S_none_iter_release (H5S_sel_iter_t UNUSED * sel_iter)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
@ -132,7 +132,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_none_release (H5S_t * UNUSED space)
|
||||
H5S_none_release (H5S_t UNUSED * space)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
|
@ -116,7 +116,7 @@ done:
|
||||
REVISION LOG
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5S_point_iter_release (H5S_sel_iter_t * UNUSED sel_iter)
|
||||
H5S_point_iter_release (H5S_sel_iter_t UNUSED * sel_iter)
|
||||
{
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
|
@ -1,14 +1,16 @@
|
||||
/****************************************************************************
|
||||
* NCSA HDF *
|
||||
* Software Development Group *
|
||||
* National Center for Supercomputing Applications *
|
||||
* University of Illinois at Urbana-Champaign *
|
||||
* 605 E. Springfield, Champaign IL 61820 *
|
||||
* *
|
||||
* For conditions of distribution and use, see the accompanying *
|
||||
* hdf/COPYING file. *
|
||||
* *
|
||||
****************************************************************************/
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/*
|
||||
* This file contains private information about the H5S module
|
||||
@ -152,7 +154,7 @@ H5_DLL herr_t H5S_set_extent_simple (H5S_t *space, unsigned rank, const hsize_t
|
||||
const hsize_t *max);
|
||||
H5_DLL herr_t H5S_modify(struct H5G_entry_t *ent, const H5S_t *space,
|
||||
hbool_t update_time, hid_t dxpl_id);
|
||||
H5_DLL herr_t H5S_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5S_t *ds);
|
||||
H5_DLL herr_t H5S_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, const H5S_t *ds);
|
||||
H5_DLL H5S_t *H5S_read(struct H5G_entry_t *ent, hid_t dxpl_id);
|
||||
H5_DLL int H5S_cmp(const H5S_t *ds1, const H5S_t *ds2);
|
||||
H5_DLL htri_t H5S_is_simple(const H5S_t *sdim);
|
||||
|
@ -3405,7 +3405,7 @@ H5T_isa(H5G_entry_t *ent, hid_t dxpl_id)
|
||||
FUNC_ENTER_NOAPI(H5T_isa, FAIL);
|
||||
assert(ent);
|
||||
|
||||
if ((ret_value=H5O_exists(ent, H5O_DTYPE, 0, dxpl_id))<0)
|
||||
if ((ret_value=H5O_exists(ent, H5O_DTYPE_ID, 0, dxpl_id))<0)
|
||||
HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to read object header");
|
||||
|
||||
done:
|
||||
@ -3489,7 +3489,7 @@ H5T_open_oid (H5G_entry_t *ent, hid_t dxpl_id)
|
||||
|
||||
if (H5O_open (ent)<0)
|
||||
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open named data type");
|
||||
if (NULL==(dt=H5O_read (ent, H5O_DTYPE, 0, NULL, dxpl_id)))
|
||||
if (NULL==(dt=H5O_read (ent, H5O_DTYPE_ID, 0, NULL, dxpl_id)))
|
||||
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to load type message from object header");
|
||||
|
||||
/* Mark the type as named and open */
|
||||
@ -5054,7 +5054,7 @@ done:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
H5T_print_stats(H5T_path_t * UNUSED path, int * UNUSED nprint/*in,out*/)
|
||||
H5T_print_stats(H5T_path_t UNUSED * path, int UNUSED * nprint/*in,out*/)
|
||||
{
|
||||
#ifdef H5T_DEBUG
|
||||
hsize_t nbytes;
|
||||
|
@ -151,7 +151,7 @@ H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id)
|
||||
*/
|
||||
if (H5O_create (file, dxpl_id, 64, &(type->ent))<0)
|
||||
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to create data type object header");
|
||||
if (H5O_modify (&(type->ent), H5O_DTYPE, 0, H5O_FLAG_CONSTANT, 1, type, dxpl_id)<0)
|
||||
if (H5O_modify (&(type->ent), H5O_DTYPE_ID, 0, H5O_FLAG_CONSTANT, 1, type, dxpl_id)<0)
|
||||
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to update type header message");
|
||||
if (H5G_insert (loc, name, &(type->ent), dxpl_id)<0)
|
||||
HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to name data type");
|
||||
|
@ -94,7 +94,7 @@ static unsigned int H5Z_filter_fletcher32_compute(unsigned short *buf, size_t le
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
size_t
|
||||
H5Z_filter_fletcher32 (unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
|
||||
H5Z_filter_fletcher32 (unsigned flags, size_t UNUSED cd_nelmts, const unsigned UNUSED cd_values[],
|
||||
size_t nbytes, size_t *buf_size, void **buf)
|
||||
{
|
||||
size_t ret_value = 0;
|
||||
|
@ -46,8 +46,8 @@ H5Z_filter_shuffle(unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
|
||||
size_t nbytes, size_t *buf_size, void **buf)
|
||||
{
|
||||
void *dest = NULL; /* Buffer to deposit [un]shuffled bytes into */
|
||||
unsigned char *_src; /* Alias for source buffer */
|
||||
unsigned char *_dest; /* Alias for destination buffer */
|
||||
unsigned char *_src=NULL; /* Alias for source buffer */
|
||||
unsigned char *_dest=NULL; /* Alias for destination buffer */
|
||||
unsigned bytesoftype; /* Number of bytes per element */
|
||||
size_t numofelements; /* Number of elements in buffer */
|
||||
size_t i,j; /* Local index variables */
|
||||
|
@ -35,7 +35,7 @@ LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5E.c H5F.c H5Farray.c H5Fcontig.c \
|
||||
H5FO.c H5FP.c H5FPclient.c H5FPserver.c H5FS.c H5G.c H5Gent.c \
|
||||
H5Gnode.c H5Gstab.c H5HG.c H5HL.c H5I.c H5MF.c H5MM.c H5O.c H5Oattr.c \
|
||||
H5Obogus.c H5Ocont.c H5Odtype.c H5Oefl.c H5Ofill.c H5Olayout.c \
|
||||
H5Omtime.c H5Oname.c H5Onull.c H5Opline.c H5Oplist.c H5Osdspace.c \
|
||||
H5Omtime.c H5Oname.c H5Onull.c H5Opline.c H5Osdspace.c \
|
||||
H5Oshared.c H5Ostab.c H5P.c H5Pdcpl.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c \
|
||||
H5R.c H5RS.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c \
|
||||
H5Sselect.c H5ST.c H5T.c H5Tarray.c H5Tbit.c H5Tcommit.c \
|
||||
|
@ -687,8 +687,8 @@ corrupt_data(unsigned int flags, size_t cd_nelmts,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5Z_cb_return_t
|
||||
filter_cb_cont(H5Z_filter_t filter, void* UNUSED buf, size_t UNUSED buf_size,
|
||||
void* UNUSED op_data)
|
||||
filter_cb_cont(H5Z_filter_t filter, void UNUSED *buf, size_t UNUSED buf_size,
|
||||
void UNUSED *op_data)
|
||||
{
|
||||
if(H5Z_FILTER_FLETCHER32==filter)
|
||||
return H5Z_CB_CONT;
|
||||
@ -712,8 +712,8 @@ filter_cb_cont(H5Z_filter_t filter, void* UNUSED buf, size_t UNUSED buf_size,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static H5Z_cb_return_t
|
||||
filter_cb_fail(H5Z_filter_t filter, void* UNUSED buf, size_t UNUSED buf_size,
|
||||
void* UNUSED op_data)
|
||||
filter_cb_fail(H5Z_filter_t filter, void UNUSED *buf, size_t UNUSED buf_size,
|
||||
void UNUSED *op_data)
|
||||
{
|
||||
if(H5Z_FILTER_FLETCHER32==filter)
|
||||
return H5Z_CB_FAIL;
|
||||
|
@ -1,12 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 1997 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Wednesday, October 15, 1997
|
||||
*
|
||||
* Purpose: Tests various aspects of indexed raw data storage.
|
||||
*/
|
||||
|
||||
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
|
||||
|
||||
#include "h5test.h"
|
||||
@ -119,7 +130,7 @@ new_object(H5F_t *f, const char *name, unsigned ndims, H5G_entry_t *ent/*out*/)
|
||||
}
|
||||
/* Create the root of the B-tree that describes chunked storage */
|
||||
H5F_istore_create (f, H5P_DATASET_XFER_DEFAULT, &layout/*in,out*/);
|
||||
if (H5O_modify(ent, H5O_LAYOUT, H5O_NEW_MESG, 0, 1, &layout, H5P_DATASET_XFER_DEFAULT) < 0) {
|
||||
if (H5O_modify(ent, H5O_LAYOUT_ID, H5O_NEW_MESG, 0, 1, &layout, H5P_DATASET_XFER_DEFAULT) < 0) {
|
||||
H5_FAILED();
|
||||
puts(" H5O_modify istore message failure.");
|
||||
goto error;
|
||||
@ -247,7 +258,7 @@ test_extend(H5F_t *f, const char *prefix,
|
||||
printf(" Cannot create %u-d object `%s'\n", ndims, name);
|
||||
goto error;
|
||||
}
|
||||
if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL == H5O_read(&handle, H5O_LAYOUT_ID, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
puts(" Unable to read istore message.");
|
||||
goto error;
|
||||
@ -456,7 +467,7 @@ test_sparse(H5F_t *f, const char *prefix, size_t nblocks,
|
||||
printf(" Cannot create %u-d object `%s'\n", ndims, name);
|
||||
goto error;
|
||||
}
|
||||
if (NULL == H5O_read(&handle, H5O_LAYOUT, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL == H5O_read(&handle, H5O_LAYOUT_ID, 0, &layout, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
printf(" Unable to read istore message\n");
|
||||
goto error;
|
||||
|
50
test/ohdr.c
50
test/ohdr.c
@ -1,13 +1,27 @@
|
||||
/*
|
||||
* Copyright © 1998 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Copyright by the Board of Trustees of the University of Illinois. *
|
||||
* All rights reserved. *
|
||||
* *
|
||||
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
||||
* terms governing use, modification, and redistribution, is contained in *
|
||||
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
||||
* of the source code distribution tree; Copyright.html can be found at the *
|
||||
* root level of an installed copy of the electronic HDF5 document set and *
|
||||
* is linked from the top-level documents page. It can also be found at *
|
||||
* http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
|
||||
* access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
/* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Tuesday, November 24, 1998
|
||||
*/
|
||||
#include "h5test.h"
|
||||
#include "H5Iprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
/*
|
||||
* This file needs to access private datatypes from the H5O package.
|
||||
*/
|
||||
#define H5O_PACKAGE
|
||||
#include "H5Opkg.h"
|
||||
|
||||
/*
|
||||
* This file needs to access private datatypes from the H5G package.
|
||||
@ -80,7 +94,7 @@ main(void)
|
||||
TESTING("message creation");
|
||||
stab.btree_addr = 11111111;
|
||||
stab.heap_addr = 22222222;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -90,7 +104,7 @@ main(void)
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
}
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -112,7 +126,7 @@ main(void)
|
||||
TESTING("message modification");
|
||||
stab.btree_addr = 33333333;
|
||||
stab.heap_addr = 44444444;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, 0, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, 0, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -122,7 +136,7 @@ main(void)
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
}
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -145,7 +159,7 @@ main(void)
|
||||
TESTING("duplicate message creation");
|
||||
stab.btree_addr = 55555555;
|
||||
stab.heap_addr = 66666666;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -155,7 +169,7 @@ main(void)
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
}
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB_ID, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -177,7 +191,7 @@ main(void)
|
||||
TESTING("duplicate message modification");
|
||||
stab.btree_addr = 77777777;
|
||||
stab.heap_addr = 88888888;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, 1, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, 1, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -187,7 +201,7 @@ main(void)
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
}
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (NULL==H5O_read(&oh_ent, H5O_STAB_ID, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -211,7 +225,7 @@ main(void)
|
||||
for (i=0; i<40; i++) {
|
||||
stab.btree_addr = (i+1)*1000+1;
|
||||
stab.heap_addr = (i+1)*1000+2;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -232,7 +246,7 @@ main(void)
|
||||
for (i=0; i<10; i++) {
|
||||
stab.btree_addr = (i + 1) * 1000 + 10;
|
||||
stab.heap_addr = (i + 1) * 1000 + 20;
|
||||
if (H5O_modify(&oh_ent, H5O_STAB, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_modify(&oh_ent, H5O_STAB_ID, H5O_NEW_MESG, 0, 1, &stab, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
@ -249,12 +263,12 @@ main(void)
|
||||
* Delete all symbol table messages.
|
||||
*/
|
||||
TESTING("message deletion");
|
||||
if (H5O_remove(&oh_ent, H5O_STAB, H5O_ALL, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
if (H5O_remove(&oh_ent, H5O_STAB_ID, H5O_ALL, H5P_DATASET_XFER_DEFAULT)<0) {
|
||||
H5_FAILED();
|
||||
H5Eprint(stdout);
|
||||
goto error;
|
||||
}
|
||||
if (H5O_read(&oh_ent, H5O_STAB, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
if (H5O_read(&oh_ent, H5O_STAB_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
|
||||
H5_FAILED();
|
||||
puts(" H5O_read() should have failed but didn't");
|
||||
H5Eclear();
|
||||
|
@ -1117,7 +1117,7 @@ dump_dataspace(hid_t space)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
dump_attr(hid_t attr, const char *attr_name, void * UNUSED op_data)
|
||||
dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data)
|
||||
{
|
||||
hid_t attr_id, type, space;
|
||||
herr_t ret = SUCCEED;
|
||||
@ -1998,7 +1998,7 @@ set_output_file(const char *fname)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
handle_attributes(hid_t fid, char *attr, void * UNUSED data)
|
||||
handle_attributes(hid_t fid, char *attr, void UNUSED * data)
|
||||
{
|
||||
dump_selected_attr(fid, attr);
|
||||
}
|
||||
@ -2258,7 +2258,7 @@ handle_datasets(hid_t fid, char *dset, void *data)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
handle_groups(hid_t fid, char *group, void * UNUSED data)
|
||||
handle_groups(hid_t fid, char *group, void UNUSED * data)
|
||||
{
|
||||
H5G_stat_t statbuf;
|
||||
hid_t gid;
|
||||
@ -2303,7 +2303,7 @@ handle_groups(hid_t fid, char *group, void * UNUSED data)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
handle_links(hid_t fid, char *links, void * UNUSED data)
|
||||
handle_links(hid_t fid, char *links, void UNUSED * data)
|
||||
{
|
||||
H5G_stat_t statbuf;
|
||||
|
||||
@ -2359,7 +2359,7 @@ handle_links(hid_t fid, char *links, void * UNUSED data)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
handle_datatypes(hid_t fid, char *type, void * UNUSED data)
|
||||
handle_datatypes(hid_t fid, char *type, void UNUSED * data)
|
||||
{
|
||||
hid_t type_id;
|
||||
|
||||
@ -3200,7 +3200,7 @@ lookup_ref_path(hobj_ref_t * ref)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
fill_ref_path_table(hid_t group, const char *name, void * UNUSED op_data)
|
||||
fill_ref_path_table(hid_t group, const char *name, void UNUSED * op_data)
|
||||
{
|
||||
hid_t obj;
|
||||
char *tmp;
|
||||
@ -3980,7 +3980,7 @@ xml_dump_dataspace(hid_t space)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
xml_dump_data(hid_t obj_id, int obj_data, struct subset_t * UNUSED sset)
|
||||
xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset)
|
||||
{
|
||||
h5dump_t *outputformat = &xml_dataformat;
|
||||
int status = -1;
|
||||
@ -4084,7 +4084,7 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t * UNUSED sset)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
xml_dump_attr(hid_t attr, const char *attr_name, void * UNUSED op_data)
|
||||
xml_dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data)
|
||||
{
|
||||
hid_t attr_id, type, space;
|
||||
char *t_aname = xml_escape_the_name(attr_name);
|
||||
@ -4744,7 +4744,7 @@ check_compression(hid_t dcpl)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
xml_dump_dataset(hid_t did, const char *name, struct subset_t * UNUSED sset)
|
||||
xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
|
||||
{
|
||||
hid_t type, space;
|
||||
hid_t dcpl;
|
||||
|
@ -15,6 +15,7 @@
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#define H5F_PACKAGE /*suppress error about including H5Fpkg */
|
||||
#define H5O_PACKAGE /*suppress error about including H5Opkg */
|
||||
|
||||
#include "H5private.h"
|
||||
#include "H5Iprivate.h"
|
||||
@ -24,7 +25,7 @@
|
||||
#include "H5Gprivate.h"
|
||||
#include "H5HGprivate.h"
|
||||
#include "H5HLprivate.h"
|
||||
#include "H5Oprivate.h"
|
||||
#include "H5Opkg.h"
|
||||
|
||||
/* File drivers */
|
||||
#include "H5FDfamily.h"
|
||||
|
Loading…
Reference in New Issue
Block a user