[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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
!
|
||||
|
||||
@@ -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:
|
||||
--------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user