diff options
author | Robb Matzke <matzke@llnl.gov> | 1997-11-14 14:42:14 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1997-11-14 14:42:14 (GMT) |
commit | cdeeb5553a3920565d87201761dadd1fe32aa3b1 (patch) | |
tree | a209c61f85983c1a76bf5c65d1f3285c4861ec46 /src/H5Gent.c | |
parent | 73897627660169de753597b9ff045d3112646506 (diff) | |
download | hdf5-cdeeb5553a3920565d87201761dadd1fe32aa3b1.zip hdf5-cdeeb5553a3920565d87201761dadd1fe32aa3b1.tar.gz hdf5-cdeeb5553a3920565d87201761dadd1fe32aa3b1.tar.bz2 |
[svn-r136] ./MANIFEST
./src/Makefile.in
Added H5Ffamily.c and H5Fsplit.c
./src/H5B.c
./src/H5Bprivate.h
./src/H5Gnode.c
Added `const' to sublass arguments.
./src/H5F.c
./src/H5Flow.c
./src/H5Fsec2.c
Make sure file buffers get flushed during a call to
H5Fflush(). Check for overflow in address encoding and decoding.
./src/H5Ffam.c
./src/H5Fprivate.c
./test/istore.c
Implementation of file families so 32-bit machines can access
64-bit files.
./src/H5Oprivate.h
Removed H5O_NO_ADDR constant.
./config/freebsd2.2.1
./config/linux
Added -DH5G_DEBUG and -DH5F_DEBUG to the list of debugging flags.
./html/H5.format.html
Changed some <offset>-sized things to <length>-sized things.
./src/H5AC.c
./src/H5ACprivate.h
./src/H5B.c
./src/H5Bprivate.h
./src/H5C.c
./src/H5D.c
./src/H5F.c
./src/H5Fcore.c
./src/H5Fistore.c
./src/H5Flow.c
./src/H5Fprivate.h
./src/H5Fsec2.c
./src/H5Fstdio.c
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5Gprivate.h
./src/H5Gshad.c
./src/H5Gstab.c
./src/H5H.c
./src/H5Hprivate.h
./src/H5MF.c
./src/H5MFprivate.h
./src/H5O.c
./src/H5Ocont.c
./src/H5Oistore.c
./src/H5Oprivate.h
./src/H5Ostab.c
./src/H5Ostdst.c
./src/H5pivate.h
./src/debug.c
./test/istore.c
./test/theap.c
./test/tohdr.c
./test/tstab.c
Lots of changes caused by generalizing addresses. The haddr_t
is now a struct, so you can no longer perform arithmetic on
it. But since it's small, simple, and often used, storage is
allocated like with an integer. But we always pass them
around by reference. That is, when using an address in
another struct, allocate space:
struct my_struct {
char *name;
haddr_t address;
} x;
But when passing it to a function, pass by reference:
H5F_addr_print (stderr, &(x.address));
Addresses should be initialized with
H5F_addr_undef (&(x.address));
Functions for operating on addresses are in H5Flow.c and begin
with H5F_addr_... Functions never return haddr_t or haddr_t*;
they always pass them through arguments instead. A function
that returns an address through an argument does so with its
last argument and it is marked with `/*out*/'. Calls to such
functions also mark output-only arguments with `/*out*/'
./src/H5Fsplit.c (new)
A two-member family where all meta data goes in the first
member and all raw data goes in the second member.
./src/H5B.c
./src/H5D.c
./src/H5F.c
./src/H5Ffamily.c
./src/H5Fistore.c
./src/H5Flow.c
./src/H5Fprivate.h
./src/H5Fsec2.c
./src/H5Fstdio.c
./src/H5Gnode.c
./src/H5H.c
./src/H5MF.c
./src/H5MFprivate.h
./src/H5O.c
Differentiate between meta data storage and raw data
storage. Provide a mechanism so that the file driver can
extend the file to allocate more memory.
./src/H5E.c
./src/H5Epublic.c
Added the error H5E_TRUNCATED to be reported when the file is
shorter than the length recorded in the boot block.
./src/H5F.c
Added H5F_locate_signature() so we only do it in one place
now.
./INSTALL
./INSTALL_MAINT
Just a couple clarifications.
./html/ExternalFiles.html
./html/storage.html
Documents how external files work.
./test/hyperslab.c
./test/istore.c
Fixed printf's on 64-bit machines.
./test/istore.c
Added ifdef's to test the split file driver.
Diffstat (limited to 'src/H5Gent.c')
-rw-r--r-- | src/H5Gent.c | 68 |
1 files changed, 43 insertions, 25 deletions
diff --git a/src/H5Gent.c b/src/H5Gent.c index b5cddce..e7da78b 100644 --- a/src/H5Gent.c +++ b/src/H5Gent.c @@ -36,7 +36,11 @@ static hbool_t interface_initialize_g = FALSE; H5G_entry_t * H5G_ent_calloc (void) { - return H5MM_xcalloc (1, sizeof(H5G_entry_t)); + H5G_entry_t *ent; + + ent = H5MM_xcalloc (1, sizeof(H5G_entry_t)); + H5F_addr_undef (&(ent->header)); + return ent; } @@ -78,7 +82,8 @@ H5G_ent_invalidate (H5G_entry_t *ent) * Purpose: Returns the header address associated with a symbol table * entry. * - * Return: Success: Address + * Return: Success: SUCCED with the address returned in the ADDR + * argument. * * Failure: FAIL * @@ -89,13 +94,15 @@ H5G_ent_invalidate (H5G_entry_t *ent) * *------------------------------------------------------------------------- */ -haddr_t -H5G_ent_addr (H5G_entry_t *ent) +herr_t +H5G_ent_addr (H5G_entry_t *ent, haddr_t *addr/*out*/) { FUNC_ENTER (H5G_ent_addr, NULL, FAIL); + assert (ent); + *addr = ent->header; - FUNC_LEAVE (ent->header); + FUNC_LEAVE (SUCCEED); } @@ -186,7 +193,7 @@ H5G_ent_modified (H5G_entry_t *ent, H5G_type_t cache_type) *------------------------------------------------------------------------- */ herr_t -H5G_ent_decode_vec (H5F_t *f, uint8 **pp, H5G_entry_t *ent, intn n) +H5G_ent_decode_vec (H5F_t *f, const uint8 **pp, H5G_entry_t *ent, intn n) { intn i; @@ -230,9 +237,9 @@ H5G_ent_decode_vec (H5F_t *f, uint8 **pp, H5G_entry_t *ent, intn n) *------------------------------------------------------------------------- */ herr_t -H5G_ent_decode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) +H5G_ent_decode (H5F_t *f, const uint8 **pp, H5G_entry_t *ent) { - uint8 *p_ret = *pp; + const uint8 *p_ret = *pp; FUNC_ENTER (H5G_ent_decode, NULL, FAIL); @@ -242,8 +249,8 @@ H5G_ent_decode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) assert (ent); /* decode header */ - H5F_decode_offset (f, *pp, ent->name_off); - H5F_decode_offset (f, *pp, ent->header); + H5F_decode_length (f, *pp, ent->name_off); + H5F_addr_decode (f, pp, &(ent->header)); UINT32DECODE (*pp, ent->type); /* decode scratch-pad */ @@ -252,6 +259,7 @@ H5G_ent_decode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) break; case H5G_CACHED_SDATA: + assert (1+1+2+(5*4) <= H5G_SIZEOF_SCRATCH); ent->cache.sdata.nt.length= *(*pp)++; ent->cache.sdata.nt.arch= *(*pp)++; UINT16DECODE (*pp, ent->cache.sdata.nt.type); @@ -263,8 +271,9 @@ H5G_ent_decode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) break; case H5G_CACHED_STAB: - UINT32DECODE (*pp, ent->cache.stab.btree_addr); - UINT32DECODE (*pp, ent->cache.stab.heap_addr); + assert (2*H5F_SIZEOF_OFFSET (f) <= H5G_SIZEOF_SCRATCH); + H5F_addr_decode (f, pp, &(ent->cache.stab.btree_addr)); + H5F_addr_decode (f, pp, &(ent->cache.stab.heap_addr)); break; default: @@ -361,8 +370,8 @@ H5G_ent_encode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) assert (ent); /* encode header */ - H5F_encode_offset (f, *pp, ent->name_off); - H5F_encode_offset (f, *pp, ent->header); + H5F_encode_length (f, *pp, ent->name_off); + H5F_addr_encode (f, pp, &(ent->header)); UINT32ENCODE (*pp, ent->type); /* encode scratch-pad */ @@ -371,6 +380,7 @@ H5G_ent_encode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) break; case H5G_CACHED_SDATA: + assert (1+1+2+(5*4) <= H5G_SIZEOF_SCRATCH); *(*pp)++= ent->cache.sdata.nt.length; *(*pp)++= ent->cache.sdata.nt.arch; UINT16ENCODE (*pp, ent->cache.sdata.nt.type); @@ -382,8 +392,9 @@ H5G_ent_encode (H5F_t *f, uint8 **pp, H5G_entry_t *ent) break; case H5G_CACHED_STAB: - UINT32ENCODE (*pp, ent->cache.stab.btree_addr); - UINT32ENCODE (*pp, ent->cache.stab.heap_addr); + assert (2*H5F_SIZEOF_OFFSET (f) <= H5G_SIZEOF_SCRATCH); + H5F_addr_encode (f, pp, &(ent->cache.stab.btree_addr)); + H5F_addr_encode (f, pp, &(ent->cache.stab.heap_addr)); break; default: @@ -429,9 +440,12 @@ H5G_ent_debug (H5F_t *f, H5G_entry_t *ent, FILE *stream, intn indent, fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth, "Name offset into private heap:", (unsigned long)(ent->name_off)); - fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth, - "Object header address:", - (unsigned long)(ent->header)); + + fprintf (stream, "%*s%-*s ", indent, "", fwidth, + "Object header address:"); + H5F_addr_print (stream, &(ent->header)); + fprintf (stream, "\n"); + fprintf (stream, "%*s%-*s %s\n", indent, "", fwidth, "Dirty:", ent->dirty ? "Yes" : "No"); @@ -471,12 +485,16 @@ H5G_ent_debug (H5F_t *f, H5G_entry_t *ent, FILE *stream, intn indent, case H5G_CACHED_STAB: fprintf (stream, "Symbol Table\n"); - fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth, - "B-tree address:", - (unsigned long)(ent->cache.stab.btree_addr)); - fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth, - "Heap address:", - (unsigned long)(ent->cache.stab.heap_addr)); + + fprintf (stream, "%*s%-*s ", indent, "", fwidth, + "B-tree address:"); + H5F_addr_print (stream, &(ent->cache.stab.btree_addr)); + fprintf (stream, "\n"); + + fprintf (stream, "%*s%-*s ", indent, "", fwidth, + "Heap address:"); + H5F_addr_print (stream, &(ent->cache.stab.heap_addr)); + fprintf (stream, "\n"); break; default: |