Changed atexit() to HDatexit().
./src/H5AC.c
Changed qsort() to HDqsort().
./src/H5B.c
Changed memcmp() to HDmemcmp().
./src/H5E.c
./src/H5M.c
Added parentheses around indirect function calls so that
checkposix doesn't complain and to advertise that it's an
indirect function call.
./src/H5F.c
./src/H5G.c
Added errors field to each function prologue to test the
script mentioned above.
./src/H5H.c
Changed fputc() to HDfputc().
./src/H5MM.c
./src/H5MMprivate.h
The argument for H5MM_xfree() is a pointer to a constant even
though the argument to free() isn't. This reduces the number
of warnings in other parts of the code but creates a new
warning in this file.
./src/H5O.c
Plugged a few memory leaks that happen during error handling.
./src/H5Oname.c
./src/debug.c
Added `HD' to the beginning of some posix functions.
Perl script that looks for Posix functions that haven't been
protected by adding `HD' to the beginning of the name. It
takes a list of .c file names as arguments.
./bin/errors NEW
A filter that takes a function prologue and function body as
standard input and updates the error list in the prologue
based on the function body. You must add the `ERRORS' or
`Errors:' field to the prologue before you pass it through
this filter or else the errors come out as a separate
comment. The errors field must be terminated with a blank
line in the prologue so we know where the end is.
I may enhance this in the future to take an entire file as
standard input instead of individual functions.
Added H5Fflush() and H5F_flush() which flush (and optionally
invalidate the cache) and flush the file boot block.
H5Fcreate() calls H5F_flush() to output the boot block.
H5Fclose() calls H5F_flush() to update the boot block.
H5F_debug() prints the root symbol table entry.
./src/H5Fpublic.h
Added H5Fflush() prototype.
./src/H5G.c
The name message is removed when an object moves from the root
object position into a directory.
Added H5G_debug() to print a symbol table entry. Most of the
code was just moved from H5G_node_debug().
./src/H5Gnode.c
Moved some debugging code into H5G_debug().
./src/H5Gprivate.c
Added H5G_debug() prototype.
./src/H5O.c
Implemented H5O_remove().
Added identifiers for H5O_SIM_DIM and H5O_SIM_DTYPE so they
can be read from files.
H5O_load() combines adjacent null messages for better memory
management.
./src/H5Oprivate.h
Changed minimum header data block size from 16 to 32 bytes.
Changed prototype for H5O_remove()
If the symbol table entry doesn't change then the ent_modified
argument to H5O_modify() doesn't change. This allows us to
set ent_modified to false and then call H5O_modify() a whole
bunch of times and easily determine if any of the calls
modified the symbol table entry.
./src/H5D.c
Fixed caching of things in the symbol table entry using the
scheme we came up with a couple months ago.
./test/tohdr.c
./test/tmeta.c
./test/theap.c
./test/tfile.c
./test/testhdf5.h
./test/testhdf5.c
Changed the MESSAGE macro so it doesn't have a semicolon
inside the argument list and automatic indentation tools work
better.
Old call: MESSAGE (5, printfunc("foo%s %d", s, i););
New call: MESSAGE (5, ("foo%s %d", s, i));
The parentheses are required.
./test/tstab.c
Added more tests.
Changed H5D_flush() to work with the new symbol table
functions. I just remembered that caching data in the symbol
table entries still needs some work, so there's a line in
there that invalidates the symbol table entry cache.
Also, there are some comments in there with the word `Quincey'
for you to read about inserting the messages in the dataset
object header.
I commented out a bunch of code in H5D_flush() so I could
compile and link the test cases. If you commit your changes
to that file, whatever they may be, I'll change H5D_flush() to
use the new directory functions described below...
./src/H5G.c
H5G_namei()
-----------
Understands files without directories. The root object
(directory or not) can be found by asking for `/' (or any
equivalent absolute or relative name like `/.//.///' or
`.//.///' (if the cwd is the root)) or by name like `/foo' (or
any other equivalent absolute or relative name) if the object
has a name message with the value `foo'. This function is
used by most of the other H5G functions so they now understand
directory-less files too.
H5G_new()
---------
Creates the root directory implicitly if it doesn't already
exist, moving any previous non-directory root object into the
new root directory before creating the requested directory
within the root. The creation of the root directory happens
first, regardless of whether the requested directory creation
succeeds. Once the root directory is created it never
disappears even if the file later has only one object. This
"feature" can be used to force a file to have a root directory
by saying something like:
H5G_new (..., "/", ...);
H5ECLEAR; /*we don't care about the H5E_EXISTS failure*/
The H5G_new() in the previous example fails because the root
directory is created implicitly before we attempt to create
the requested "/" directory.
H5G_find()
----------
Understands files without directories. If there is no root
object then this function is guaranteed to fail even if the
request is for `/'. As mentioned for H5G_namei(), the root
object can be retrieved with `/' or `/foo' (or equivalent
absolute or relative names).
H5G_insert()
------------
Understands files without directories and attempts to create
such files when there is only one object. The root symbol
table is created implicitly when necessary.
A root object can be given a name message by the caller and
then inserted with the name `/' or it can be inserted with
the name `/foo' in which case H5G_insert() will set the name
message to `foo'.
H5G_modify()
------------
Understands files without directories.
./src/H5Fprivate.h
Removed the root_type field from hdf5_file_t.
./src/H5Fprivate.h
./src/H5F.c
Removed H5F_root_type()
./src/H5Fpublic.h
Removed H5F_root_symtype_t.
./src/H5Oprivate.h
./src/H5O.c
Added H5O_remove() which is currently a no-op.
./test/testhdf5.h
./test/tfile.c
./test/theap.c
./test/tmeta.c
./test/tohdr.c
./test/tstab.c
Fixed include files.
./test/Makefile.in NEW
./test/Makefile
Removed Makefile; it is now generated from Makefile.in by
configure.