---------------------- ./MANIFEST ./test/th5s.h5 [NEW] ./test/th5s.c Added a test to make sure that creating a data space with too large a rank fails. Added a test to make sure that reading a file that has a dataset with a space with too large a rank fails. Actually, this one is a little weird: the code that reads the data space message assumes the space is scalar if the message cannot be read. Fortunately the layout message fails also, preventing the dataset from being opened. However, since the data type message is still visible h5ls will report that the object is a named data type. ./test/space_overflow.c [NEW] This is the little program that makes the th5s.h5 file. ./src/H5A.c ./src/H5R.c ./src/H5Sselect.c Updated trace info. ./src/H5Olayout.c ./src/H5Osdspace.c Added code to fail if the dimensionality is too large when decoding a layout or simple data space message. ./src/H5Oprivate.h Redefined H5O_LAYOUT_NDIMS in terms of H5S_MAX_RANK. ./src/H5P.c ./src/H5S.c Check for ndims>H5S_MAX_RANK in API function calls, added assert to internal functions. ./src/H5V.c Changed a `<' to an `<=' in an assert. ./test/flush2.c Includes stdlib.h for getenv(). ./tools/h5tools.c Able to handle up to H5S_MAX_RANK dimensions during output.
153 lines
3.4 KiB
C
153 lines
3.4 KiB
C
/*
|
||
* Copyright (C) 1998 NCSA
|
||
* All rights reserved.
|
||
*
|
||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||
* Friday, October 23, 1998
|
||
*
|
||
* Purpose: This is the second half of a two-part test that makes sure
|
||
* that a file can be read after an application crashes as long
|
||
* as the file was flushed first. This half tries to read the
|
||
* file created by the first half.
|
||
*/
|
||
#undef NDEBUG
|
||
#include <assert.h>
|
||
#include <hdf5.h>
|
||
#include <math.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
|
||
#include <H5config.h>
|
||
#ifndef HAVE_ATTRIBUTE
|
||
# undef __attribute__
|
||
# define __attribute__(X) /*void*/
|
||
# define __unused__ /*void*/
|
||
#else
|
||
# define __unused__ __attribute__((unused))
|
||
#endif
|
||
|
||
|
||
#define FILE_NAME_1 "flush.h5"
|
||
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: cleanup
|
||
*
|
||
* Purpose: Removes test files
|
||
*
|
||
* Return: void
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Thursday, June 4, 1998
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static void
|
||
cleanup (void)
|
||
{
|
||
if (!getenv ("HDF5_NOCLEANUP")) {
|
||
remove (FILE_NAME_1);
|
||
}
|
||
}
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: display_error_cb
|
||
*
|
||
* Purpose: Displays the error stack after printing "*FAILED*".
|
||
*
|
||
* Return: Success: 0
|
||
*
|
||
* Failure: -1
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Wednesday, March 4, 1998
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
static herr_t
|
||
display_error_cb (void __unused__ *client_data)
|
||
{
|
||
puts ("*FAILED*");
|
||
H5Eprint (stdout);
|
||
return 0;
|
||
}
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Part 1 of a two-part H5Fflush() test.
|
||
*
|
||
* Return: Success: 0
|
||
*
|
||
* Failure: 1
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Friday, October 23, 1998
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
hid_t file, space, dset, groups, grp;
|
||
hsize_t ds_size[2];
|
||
double the_data[100][100], error;
|
||
hsize_t i, j;
|
||
char name[256];
|
||
|
||
printf("%-70s", "Testing H5Fflush (part2)");
|
||
fflush(stdout);
|
||
H5Eset_auto(display_error_cb, NULL);
|
||
|
||
/* Open the file */
|
||
if ((file=H5Fopen(FILE_NAME_1, H5F_ACC_RDONLY, H5P_DEFAULT))<0) goto error;
|
||
|
||
/* Open the dataset */
|
||
if ((dset=H5Dopen(file, "dset"))<0) goto error;
|
||
if ((space=H5Dget_space(dset))<0) goto error;
|
||
if (H5Sget_simple_extent_dims(space, ds_size, NULL)<0) goto error;
|
||
assert(100==ds_size[0] && 100==ds_size[1]);
|
||
|
||
/* Read some data */
|
||
if (H5Dread(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
|
||
the_data)<0) goto error;
|
||
for (i=0; i<ds_size[0]; i++) {
|
||
for (j=0; j<ds_size[1]; j++) {
|
||
error = fabs(the_data[i][j]-(double)i/((double)j+1));
|
||
assert(error<0.0001);
|
||
}
|
||
}
|
||
|
||
/* Open some groups */
|
||
if ((groups=H5Gopen(file, "some_groups"))<0) goto error;
|
||
for (i=0; i<100; i++) {
|
||
sprintf(name, "grp%02u", (unsigned)i);
|
||
if ((grp=H5Gopen(groups, name))<0) goto error;
|
||
if (H5Gclose(grp)<0) goto error;
|
||
}
|
||
|
||
if (H5Gclose(groups)<0) goto error;
|
||
if (H5Dclose(dset)<0) goto error;
|
||
if (H5Fclose(file)<0) goto error;
|
||
puts(" PASSED");
|
||
cleanup();
|
||
return 0;
|
||
|
||
error:
|
||
printf("*FAILED*");
|
||
return 1;
|
||
}
|
||
|
||
|
||
|
||
|