mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
2ce06c3912
Code optimization & bug fix Description: When dimension information is being stored in the storage layout message on disk, it is stored as 32-bit quantities, possibly truncating the dimension information, if a dimension is greater than 32-bits in size. Solution: Fix the storage layout message problem by revising file format to not store dimension information, since it is already available in the dataspace. Also revise the storage layout data structures to be more compartmentalized for the information for contiguous, chunked and compact storage. Platforms tested: FreeBSD 4.9 (sleipnir) w/parallel Solaris 2.7 (arabica) h5committest
96 lines
3.3 KiB
C
96 lines
3.3 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||
* 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: Quincey Koziol <koziol@ncsa.uiuc.edu>
|
||
* Thursday, May 27, 2004
|
||
*
|
||
* Purpose: Create two datasets (one for version 1 and one for version 2 of
|
||
* the layout message), which should have dimensions too large to
|
||
* represent in version 1 & 2 of the storage layout message.
|
||
* This program is used to create the test file `tlayouto.h5' which
|
||
* has truncated dimension information and can be used to verify that the
|
||
* library has fixed up the storage size correctly.
|
||
* To build the test file, this program MUST be compiled and linked
|
||
* with version hdf5-1.6.2 or _earlier_ libraries and the generated test
|
||
* file must be put into the 'test' directory in the 1.7+ (or 1.6+) branch
|
||
* of the library.
|
||
*/
|
||
|
||
#include "hdf5.h"
|
||
|
||
#define TESTFILE "tlayouto.h5"
|
||
#define SPACE_RANK 2
|
||
#define SPACE_DIM0 (8*1024*1024*1024ULL)
|
||
#define SPACE_DIM1 ((4*1024*1024*1024ULL)+1ULL)
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose:
|
||
*
|
||
* Return: Success:
|
||
*
|
||
* Failure:
|
||
*
|
||
* Programmer: Quincey Koziol
|
||
* Friday, January 3, 2003
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
hid_t file, space, dset, dcpl;
|
||
herr_t ret;
|
||
unsigned rank=SPACE_RANK; /* Rank of dataspace */
|
||
hsize_t big_dims[SPACE_RANK]={SPACE_DIM0,SPACE_DIM1}; /* Large dimensions */
|
||
|
||
/* Create the file */
|
||
file = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||
if(file<0)
|
||
printf("file<0!\n");
|
||
|
||
/* Create the dataspace (for dataset) */
|
||
space = H5Screate_simple(rank,big_dims,NULL);
|
||
if(space<0)
|
||
printf("space<0!\n");
|
||
|
||
/* Create a dataset creation property list */
|
||
dcpl = H5Pcreate(H5P_DATASET_CREATE);
|
||
if(dcpl<0)
|
||
printf("dcpl<0!\n");
|
||
|
||
/* Make certain that the dataset's storage doesn't get allocated :-) */
|
||
ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
|
||
if(ret<0)
|
||
printf("H5Pset_alloc_time() failed!\n");
|
||
|
||
/* Create the dataset with deferred storage allocation */
|
||
dset = H5Dcreate(file, "Dataset", H5T_NATIVE_INT, space, dcpl);
|
||
if(dset<0)
|
||
printf("dset<0!\n");
|
||
|
||
H5Dclose(dset);
|
||
H5Sclose(space);
|
||
H5Pclose(dcpl);
|
||
H5Fclose(file);
|
||
|
||
return 0;
|
||
}
|
||
|