[svn-r8835]

Purpose: Maintenance

Description: Added h5fget_name_f and h5fget_filesize_f subroutines and tests.

Solution: N/A

Platforms tested: arabica (32-bit), sol (64-bit).
                  Will test on copper after this check-in.


Misc. update:
This commit is contained in:
Elena Pourmal
2004-07-08 11:42:36 -05:00
parent e8cb6650ca
commit 3eeb0d9d54
5 changed files with 203 additions and 0 deletions

View File

@@ -15,6 +15,7 @@
/* This files contains C stubs for H5F Fortran APIs */
#include "H5f90.h"
#include "H5Eprivate.h"
/*----------------------------------------------------------------------------
* Name: h5fcreate_c
@@ -475,3 +476,72 @@ nh5fget_freespace_c ( hid_t_f *file_id , hssize_t_f *free_space)
*free_space=(hssize_t_f)c_free_space;
return ret_value;
}
/*----------------------------------------------------------------------------
* Name: h5fget_name_c
* Purpose: Call H5Fget_name to get file's name
* Inputs: obj_id - object identifier
* buflen -size of the buffer
* Outputs: buf - buffer to hold the name
* size - size of the file's name
* Returns: 0 on success, -1 on failure
* Programmer: Elena Pourmal
* Tuesday, July 6, 2004
* Modifications:
*---------------------------------------------------------------------------*/
int_f
nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen)
{
char *c_buf=NULL; /* Buffer to hold C string */
ssize_t size_c;
int_f ret_value=0; /* Return value */
/*
* Allocate buffer to hold name of an attribute
*/
if ((c_buf = HDmalloc((size_t)*buflen +1)) == NULL)
HGOTO_DONE(FAIL);
/*
* Call H5Aget_name function
*/
if ((size_c = (size_t_f)H5Fget_name((hid_t)*obj_id, c_buf, (size_t)*buflen)) < 0)
HGOTO_DONE(FAIL);
/*
* Convert C name to FORTRAN and place it in the given buffer
*/
HD5packFstring(c_buf, _fcdtocp(buf), (size_t)*buflen);
done:
*size = (size_t_f)size_c;
if(c_buf) HDfree(c_buf);
return ret_value;
}
/*----------------------------------------------------------------------------
* Name: h5fget_filesize_c
* Purpose: Call H5Fget_filesize to get file size
* Inputs: file_id - file identifier
* Outputs: size - size of the file
* Returns: 0 on success, -1 on failure
* Programmer: Elena Pourmal
* Wednesday, July 7, 2004
* Modifications:
*---------------------------------------------------------------------------*/
int_f
nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size)
{
hsize_t size_c;
herr_t ret_value=0; /* Return value */
/*
* Call H5Fget_filesize function
*/
if ((ret_value = H5Fget_filesize((hid_t)*file_id, &size_c)) < 0)
HGOTO_DONE(FAIL);
*size = (hsize_t_f)size_c;
done:
return ret_value;
}

View File

@@ -854,4 +854,107 @@
hdferr = h5fget_freespace_c(file_id, free_space)
END SUBROUTINE h5fget_freespace_f
!----------------------------------------------------------------------
! Name: h5fget_name_f
!
! Purpose: Gets the name of the file from the object identifier
!
! Inputs:
! obj_id - object identifier
! Inputs/Outputs:
! buf - buffer to read name in
! Outputs:
! size - actual size of the name
! hdferr: - error code
! Success: 0
! Failure: -1
! Optional parameters:
!
! Programmer: Elena Pourmal
! July 6, 2004
!
!----------------------------------------------------------------------
SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr)
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_name_f
!DEC$endif
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier
CHARACTER(LEN=*), INTENT(INOUT) :: buf
! Buffer to hold file name
INTEGER(SIZE_T), INTENT(OUT) :: size ! Size of the file name
INTEGER, INTENT(OUT) :: hdferr ! Error code: 0 on success,
! -1 if fail
INTEGER(SIZE_T) :: buflen
! INTEGER, EXTERNAL :: h5fget_name_c
! MS FORTRAN needs explicit interface for C functions called here.
!
INTERFACE
INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen)
USE H5GLOBAL
!DEC$ IF DEFINED(HDF5F90_WINDOWS)
!MS$ATTRIBUTES C,reference,alias:'_H5FGET_NAME_C'::h5fget_name_c
!DEC$ ENDIF
!DEC$ATTRIBUTES reference :: buf
INTEGER(HID_T), INTENT(IN) :: obj_id
INTEGER(SIZE_T), INTENT(OUT) :: size
INTEGER(SIZE_T) :: buflen
CHARACTER(LEN=*), INTENT(OUT) :: buf
END FUNCTION h5fget_name_c
END INTERFACE
buflen = LEN(buf)
hdferr = h5fget_name_c(obj_id, size, buf, buflen)
END SUBROUTINE h5fget_name_f
!----------------------------------------------------------------------
! Name: h5fget_filesize_f
!
! Purpose: Retrieves the file size of the HDF5 file.
!
! Inputs:
! file_id - file identifier
! Outputs:
! size - file size
! hdferr: - error code
! Success: 0
! Failure: -1
! Optional parameters:
!
! Programmer: Elena Pourmal
! July 7, 2004
!
!----------------------------------------------------------------------
SUBROUTINE h5fget_filesize_f(file_id, size, hdferr)
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5fget_filesize_f
!DEC$endif
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: file_id ! file identifier
INTEGER(HSIZE_T), INTENT(OUT) :: size ! Size of the file
INTEGER, INTENT(OUT) :: hdferr ! Error code: 0 on success,
! -1 if fail
! INTEGER, EXTERNAL :: h5fget_filesize_c
! MS FORTRAN needs explicit interface for C functions called here.
!
INTERFACE
INTEGER FUNCTION h5fget_filesize_c(file_id, size)
USE H5GLOBAL
!DEC$ IF DEFINED(HDF5F90_WINDOWS)
!MS$ATTRIBUTES C,reference,alias:'_H5FGET_FILESIZE_C'::h5fget_filesize_c
!DEC$ ENDIF
INTEGER(HID_T), INTENT(IN) :: file_id
INTEGER(HSIZE_T), INTENT(OUT) :: size
END FUNCTION h5fget_filesize_c
END INTERFACE
hdferr = h5fget_filesize_c(file_id, size)
END SUBROUTINE h5fget_filesize_f
END MODULE H5F

View File

@@ -40,6 +40,9 @@ H5_DLL int HD5packFstring(char *src, char *dest, int len);
# define nh5fget_obj_count_c FNAME(H5FGET_OBJ_COUNT_C)
# define nh5fget_obj_ids_c FNAME(H5FGET_OBJ_IDS_C)
# define nh5fget_freespace_c FNAME(H5FGET_FREESPACE_C)
# define nh5fget_name_c FNAME(H5FGET_NAME_C)
# define nh5fget_filesize_c FNAME(H5FGET_FILESIZE_C)
#else /* !DF_CAPFNAMES */
# define nh5fcreate_c FNAME(h5fcreate_c)
# define nh5fflush_c FNAME(h5fflush_c)
@@ -54,6 +57,8 @@ H5_DLL int HD5packFstring(char *src, char *dest, int len);
# define nh5fget_obj_count_c FNAME(h5fget_obj_count_c)
# define nh5fget_obj_ids_c FNAME(h5fget_obj_ids_c)
# define nh5fget_freespace_c FNAME(h5fget_freespace_c)
# define nh5fget_name_c FNAME(h5fget_name_c)
# define nh5fget_filesize_c FNAME(h5fget_filesize_c)
#endif /* DF_CAPFNAMES */
#endif /* H5Ff90_FNAMES */
@@ -82,6 +87,10 @@ H5_DLL int_f nh5fget_obj_count_c (hid_t_f *file_id, int_f *obj_type, int_f *obj_
H5_DLL int_f nh5fget_obj_ids_c (hid_t_f *file_id, int_f *obj_type, int_f *max_objs, int_f *obj_ids);
H5_DLL int_f nh5fget_freespace_c (hid_t_f *file_id, hssize_t_f *free_space);
H5_DLL int_f nh5fflush_c (hid_t_f *obj_id, int_f *scope);
H5_DLL int_f nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen);
H5_DLL int_f nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size);
/*
* Functions from H5Sf.c

View File

@@ -327,6 +327,9 @@
!
INTEGER, DIMENSION(4,6) :: dset_data, data_out
INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
INTEGER(HSIZE_T) :: file_size
CHARACTER(LEN=80) :: file_name
INTEGER(SIZE_T) :: name_size
!
!initialize the dset_data array which will be written to the "/dset"
@@ -393,6 +396,11 @@
!
CALL h5freopen_f(file_id, reopen_id, error)
CALL check("h5freopen_f",error,total_error)
!
!Check file size
!
CALL h5fget_filesize_f(file_id, file_size, error)
CALL check("h5fget_filesize_f",error,total_error)
!
!Open the dataset based on the reopen_id.
@@ -400,6 +408,14 @@
CALL h5dopen_f(reopen_id, dsetname, dset_id, error)
CALL check("h5dopen_f",error,total_error)
!Get file name from the dataset identifier
!
CALL h5fget_name_f(dset_id, file_name, name_size, error)
CALL check("h5fget_name_f",error,total_error)
IF(file_name(1:name_size) .NE. fix_filename(1:name_size)) THEN
write(*,*) "file name obtained from the dataset id is incorrect"
END IF
!
!Read the dataset.
!

View File

@@ -65,6 +65,11 @@ New Features
Tools:
------
F90 API:
--------
- added new h5fget_name_f and h5fget_filesize_f subroutines
EIP 2004/07/08
C++ API:
--------