summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5Lf.c
diff options
context:
space:
mode:
authorScot Breitenfeld <brtnfld@hdfgroup.org>2008-04-30 19:23:26 (GMT)
committerScot Breitenfeld <brtnfld@hdfgroup.org>2008-04-30 19:23:26 (GMT)
commit5773fd34bc5adf59b4530d95ac9f0c0585902803 (patch)
tree456ad239799382e1f083fb7fc74399e43b471912 /fortran/src/H5Lf.c
parent0138995d1ce2068db1f790503435a2121132d3ad (diff)
downloadhdf5-5773fd34bc5adf59b4530d95ac9f0c0585902803.zip
hdf5-5773fd34bc5adf59b4530d95ac9f0c0585902803.tar.gz
hdf5-5773fd34bc5adf59b4530d95ac9f0c0585902803.tar.bz2
[svn-r14902] Merged fortran_1_8 branch changes r14505:14901 into the trunk. New fortran wrappers added.
Diffstat (limited to 'fortran/src/H5Lf.c')
-rw-r--r--fortran/src/H5Lf.c817
1 files changed, 817 insertions, 0 deletions
diff --git a/fortran/src/H5Lf.c b/fortran/src/H5Lf.c
new file mode 100644
index 0000000..208ad19
--- /dev/null
+++ b/fortran/src/H5Lf.c
@@ -0,0 +1,817 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * 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://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* This files contains C stubs for H5L Fortran APIs */
+
+#include "H5f90.h"
+#include "H5Eprivate.h"
+
+/*----------------------------------------------------------------------------
+ * Name: h5lcopy_c
+ * Purpose: Call H5Lcopy
+ * Inputs:
+ * src_loc_id - Location identifier of the source link
+ * src_name - Name of the link to be copied
+ * src_namelen - length of the name
+ * dest_loc_id - Location identifier specifying the destination of the copy
+ * dest_name - Name to be assigned to the NEW copy
+ * dest_namelen - Length of the name
+ * loc_id - Identifier of the file or group containing the object
+ * name - Name of the link to delete
+ * lcpl_id - Link creation property list identifier
+ * lapl_id - Link access property list identifier
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * January, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
+ _fcd dest_name, size_t_f *dest_namelen,
+ hid_t_f *lcpl_id, hid_t_f *lapl_id)
+{
+ char *c_src_name = NULL;
+ char *c_dest_name = NULL;
+ int ret_value = 0;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_src_name = HD5f2cstring(src_name, (size_t)*src_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_dest_name = HD5f2cstring(dest_name, (size_t)*dest_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lcopy function.
+ */
+ if( H5Lcopy( (hid_t)*src_loc_id, c_src_name, (hid_t) *dest_loc_id,
+ c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id ) < 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ if(c_src_name)
+ HDfree(c_src_name);
+ if(c_dest_name)
+ HDfree(c_dest_name);
+
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lcreate_external_c
+ * Purpose: Call H5Lcreate_external_c
+ * Inputs:
+ * file_name - Name of the file containing the target object. Neither the file nor the target object is
+ * required to exist. May be the file the link is being created in.
+ * obj_name - Path within the target file to the target object.
+ * link_loc_id - The file or group identifier for the new link.
+ * link_name - The name of the new link.
+ * lcpl_id - Link creation property list identifier.
+ * lapl_id - Link access property list identifier.
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 29, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5lcreate_external_c(_fcd file_name, size_t_f *file_namelen, _fcd obj_name, size_t_f *obj_namelen,
+ hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
+ hid_t_f *lcpl_id, hid_t_f *lapl_id)
+
+{
+ char *c_file_name = NULL;
+ char *c_obj_name = NULL;
+ char *c_link_name = NULL;
+ int ret_value = 0;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_file_name = HD5f2cstring(file_name, (size_t)*file_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lcopy function.
+ */
+ if( H5Lcreate_external( c_file_name, c_obj_name, (hid_t) *link_loc_id, c_link_name,
+ (hid_t) *lcpl_id, (hid_t) *lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ if(c_file_name)
+ HDfree(c_file_name);
+ if(c_obj_name)
+ HDfree(c_obj_name);
+ if(c_link_name)
+ HDfree(c_link_name);
+
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5ldelete_c
+ * Purpose: Call H5Ldelete
+ * Inputs:
+ *
+ * loc_id - Identifier of the file or group containing the object
+ * name - Name of the link to delete
+ * lapl_id - Link access property list identifier
+ * namelen - length of name
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * January, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5ldelete_c ( hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id )
+{
+ char *c_name = NULL;
+ int ret_value = 0;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Ldelete function.
+ */
+ if( H5Ldelete( (hid_t)*loc_id, c_name, (hid_t)*lapl_id ) < 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ if(c_name)
+ HDfree(c_name);
+
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lcreate_soft_c
+ * Purpose: Call H5Lcreate_soft
+ * Inputs:
+ *
+ * target_path - Path to the target object, which is not required to exist.
+ * link_loc_id - The file or group identifier for the new link.
+ * link_name - The name of the new link.
+ * lcpl_id - Link creation property list identifier.
+ * lapl_id - Link access property list identifier.
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 20, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len,
+ hid_t_f *link_loc_id,
+ _fcd link_name, size_t_f *link_name_len,
+ hid_t_f *lcpl_id, hid_t_f *lapl_id )
+{
+ char *c_target_path = NULL;
+ char *c_link_name = NULL;
+ int ret_value = 0;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_target_path = HD5f2cstring(target_path, (size_t)*target_path_len)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_link_name = HD5f2cstring(link_name, (size_t)*link_name_len)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Adelete function.
+ */
+ if ( H5Lcreate_soft(c_target_path,(hid_t)*link_loc_id, c_link_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+ done:
+ if(c_target_path)
+ HDfree(c_target_path);
+ if(c_link_name)
+ HDfree(c_link_name);
+
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lcreate_hard_c
+ * Purpose: Call H5Lcreate_hard
+ * Inputs:
+ * obj_loc_id - The file or group identifier for the target object.
+ * obj_name - Name of the target object, which must already exist.
+ * obj_namelen - Name length
+ * link_loc_id - The file or group identifier for the new link.
+ * link_name - The name of the new link.
+ * link_namelen- Name length
+ * lcpl_id - Link creation property list identifier.
+ * lapl_id - Link access property list identifier.
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 27, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen,
+ hid_t_f *link_loc_id,
+ _fcd link_name, size_t_f *link_namelen,
+ hid_t_f *lcpl_id, hid_t_f *lapl_id )
+{
+ char *c_obj_name = NULL;
+ char *c_link_name = NULL;
+ int ret_value = 0;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_obj_name = HD5f2cstring(obj_name, (size_t)*obj_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lcreate_hard function.
+ */
+ if ( H5Lcreate_hard((hid_t)*obj_loc_id, c_obj_name, (hid_t)*link_loc_id, c_link_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+ done:
+ if(c_obj_name)
+ HDfree(c_obj_name);
+ if(c_link_name)
+ HDfree(c_link_name);
+
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5ldelete_by_idx_c
+ * Purpose: Calls h5ldelete_by_idx
+ * Inputs:
+ * loc_id - File or group identifier specifying location of subject group
+ * group_name - Name of subject group
+ * group_namelen - Name length
+ * index_field - Type of index; Possible values are:
+ * H5_INDEX_UNKNOWN_F = -1 - Unknown index type
+ * H5_INDEX_NAME_F - Index on names
+ * H5_INDEX_CRT_ORDER_F - Index on creation order
+ * H5_INDEX_N_F - Number of indices defined
+ * order - Order within field or index; Possible values are:
+ * H5_ITER_UNKNOWN_F - Unknown order
+ * H5_ITER_INC_F - Increasing order
+ * H5_ITER_DEC_F - Decreasing order
+ * H5_ITER_NATIVE_F - No particular order, whatever is fastest
+ * H5_ITER_N_F - Number of iteration orders
+ * n - Link for which to retrieve information
+ * lapl_id - Link access property list
+ *
+ * Outputs: N/A
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 29, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5ldelete_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+ int_f *index_field, int_f *order, size_t_f *n, hid_t_f *lapl_id)
+{
+ char *c_group_name = NULL; /* Buffer to hold C string */
+ H5_index_t c_index_field;
+ H5_iter_order_t c_order;
+ int_f ret_value = 0; /* Return value */
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ c_index_field = (H5_index_t)*index_field;
+ c_order = (H5_iter_order_t)*order;
+
+ /*
+ * Call H5Ldelete_by_name function.
+ */
+ if(H5Ldelete_by_idx((hid_t)*loc_id, c_group_name, c_index_field, c_order, (hsize_t)*n, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ if(c_group_name)
+ HDfree(c_group_name);
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lexists_c
+ * Purpose: Calls H5Lexists
+ * Inputs:
+ * loc_id - Identifier of the file or group to query.
+ * name - Link name to check
+ * lapl_id - Link access property list identifier.
+ * Outputs:
+ * link_exists_c - returns a positive value, for TRUE, or 0 (zero), for FALSE.
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 29, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lexists_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *link_exists)
+{
+ char *c_name = NULL; /* Buffer to hold C string */
+ int_f ret_value = 0; /* Return value */
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lexists function.
+ */
+ if((*link_exists = (hid_t_f)H5Lexists((hid_t)*loc_id, c_name, (hid_t)*lapl_id)) < 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ if(c_name)
+ HDfree(c_name);
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lget_info_c
+ * Purpose: Call H5Lget_info
+ * Inputs:
+ * link_loc_id - File or group identifier.
+ * link_name - Name of the link for which information is being sought
+ * link_namelen - Name length
+ * lapl_id - Link access property list
+ * Outputs:
+ *
+ * cset - indicates the character set used for link’s name.
+ * corder - specifies the link’s creation order position.
+ * corder_valid - indicates whether the value in corder is valid.
+ * link_type - specifies the link class:
+ * H5L_LINK_HARD_F - Hard link
+ * H5L_LINK_SOFT_F - Soft link
+ * H5L_LINK_EXTERNAL_F - External link
+ * H5L_LINK_ERROR_F - Error
+ * address - If the link is a hard link, address specifies the file address that the link points to
+ * val_size - If the link is a symbolic link, val_size will be the length of the link value
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * January, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lget_info_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
+ int_f *cset, int_f *corder, int_f *corder_valid, int_f *link_type,
+ int_f *address, hsize_t_f *val_size,
+ hid_t_f *lapl_id)
+{
+ char *c_link_name = NULL; /* Buffer to hold C string */
+ int_f ret_value = 0; /* Return value */
+ H5L_info_t link_buff;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ /*
+ * Call H5Linfo function.
+ */
+ if(H5Lget_info((hid_t)*link_loc_id, c_link_name, &link_buff, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+ /* Unpack the structure */
+
+ *cset = (int_f)link_buff.cset;
+ *corder = (int_f)link_buff.corder;
+ *corder_valid = 0;
+ if(link_buff.corder_valid > 0) *corder_valid = 1;
+ *link_type = (int_f)link_buff.type;
+ *address = (int_f)link_buff.u.address;
+ *val_size = (hsize_t)link_buff.u.val_size;
+
+done:
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lget_info_by_idx_c
+ * Purpose: Call H5Lget_info_by_idx
+ * Inputs:
+ * loc_id - File or group identifier specifying location of subject group
+ * group_name - Name of subject group
+ *group_namelen - Name length
+ * index_field - Index or field which determines the order
+ * order - Order within field or index
+ * n - Link for which to retrieve information
+ * lapl_id - Link access property list
+ * Outputs:
+ * corder_valid - Indicates whether the the creation order data is valid for this attribute
+ * corder - Is a positive integer containing the creation order of the attribute
+ * cset - Indicates the character set used for the attribute’s name
+ * data_size - indicates the size, in the number of characters, of the attribute
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * January, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+ int_f *index_field, int_f *order, hsize_t_f *n,
+ int_f *corder_valid, int_f *corder, int_f *cset, hsize_t_f *data_size, hid_t_f *lapl_id)
+{
+ char *c_group_name = NULL; /* Buffer to hold C string */
+ H5_index_t c_index_field;
+ H5_iter_order_t c_order;
+ int_f ret_value = 0; /* Return value */
+ H5L_info_t link_buff;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ c_index_field = (H5_index_t)*index_field;
+ c_order = (H5_iter_order_t)*order;
+ /*
+ * Call H5Linfo_by_idx function.
+ */
+ if(H5Lget_info_by_idx((hid_t)*loc_id, c_group_name, c_index_field, c_order, (hsize_t)*n,
+ &link_buff, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+
+ /* Unpack the structure */
+
+ *corder_valid = 0;
+ if(link_buff.corder_valid > 0) *corder_valid = 1;
+
+ *corder = (int_f)link_buff.corder;
+ *cset = (int_f)link_buff.cset;
+ *data_size = (hsize_t)link_buff.u.val_size;
+
+done:
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: H5Lis_registered_c
+ * Purpose: Call H5Lis_registered
+ * Inputs:
+ * link_cls_id - User-defined link class identifier
+ * Outputs: NONE
+ *
+ * Returns: Returns a positive value if the link class has been registered
+ * and zero if it is unregistered. Otherwise returns a negative value
+ * Programmer: M.S. Breitenfeld
+ * March 3, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lis_registered_c(int_f *link_cls_id)
+{
+ int_f ret_value = 0; /* Return value */
+ H5L_type_t c_link_cls_id; /* User-defined link class identifier */
+ htri_t registered; /* registration status */
+
+
+ c_link_cls_id = (H5L_type_t)*link_cls_id;
+ /*
+ * Call H5Lis_registered
+ */
+ registered = H5Lis_registered(c_link_cls_id);
+
+ ret_value = (int_f)registered;
+
+ return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name: h5lmove_c
+ * Purpose: Call H5Lmove
+ * Inputs:
+ * src_loc_id - Original file or group identifier.
+ * src_name - Original link name.
+ * src_namelen - name length
+ * dest_loc_id - Destination file or group identifier.
+ * dest_name - NEW link name.
+ * dest_namelen - name length
+ * Outputs:
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * March 3, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lmove_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
+ _fcd dest_name, size_t_f *dest_namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id)
+
+{
+ char *c_src_name = NULL; /* Buffer to hold C string */
+ char *c_dest_name = NULL; /* Buffer to hold C string */
+ int_f ret_value = 0; /* Return value */
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_src_name = HD5f2cstring(src_name, (size_t)*src_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+ if((c_dest_name = HD5f2cstring(dest_name, (size_t)*dest_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lmove function.
+ */
+ if(H5Lmove((hid_t)*src_loc_id, c_src_name, (hid_t)*dest_loc_id,
+ c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0)
+ HGOTO_DONE(FAIL);
+done:
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lget_name_by_idx_c
+ * Purpose: Call H5Lget_name_by_idx
+ * Inputs:
+ * loc_id - File or group identifier specifying location of subject group
+ * group_name - Name of subject group
+ * index_field - Index or field which determines the order
+ * order - Order within field or index
+ * n - Link for which to retrieve information
+ * size - Maximum number of characters of link value to be returned.
+ * lapl_id - Link access property list
+ * Outputs:
+ * name - Buffer in which link value is returned
+ * size - The size of the link name on success
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * March 10, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
+ int_f *index_field, int_f *order, hsize_t_f *n,
+ size_t_f *size, _fcd name, hid_t_f *lapl_id)
+{
+ char *c_group_name = NULL; /* Buffer to hold C string */
+ char *c_name = NULL; /* Buffer to hold C string */
+ int_f ret_value = 0; /* Return value */
+ size_t c_size;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ c_size = (size_t)*size + 1;
+ /*
+ * Allocate buffer to hold name of an attribute
+ */
+ if ((c_name = HDmalloc(c_size)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ if((*size = (size_t)H5Lget_name_by_idx((hid_t)*loc_id, c_group_name, (H5_index_t)*index_field,
+ (H5_iter_order_t)*order, (hsize_t)*n,c_name, c_size, (hid_t)*lapl_id)) < 0)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Convert C name to FORTRAN and place it in the given buffer
+ */
+ if(c_name != NULL)
+ HD5packFstring(c_name, _fcdtocp(name), c_size-1);
+done:
+ if(c_group_name) HDfree(c_group_name);
+ if(c_name) HDfree(c_name);
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5lget_val_c
+ * Purpose: Call H5Lget_val
+ * Inputs:
+ * link_loc_id - File or group identifier.
+ * link_name - Name of the link for which valrmation is being sought
+ * link_namelen - Name length
+ * size - Maximum number of characters of link value to be returned.
+ * lapl_id - Link access property list
+ * Outputs:
+ * linkval_buff - The buffer to hold the returned link value.
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * March 3, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+/* int_f */
+/* nh5lget_val_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, */
+/* size_t_f *size, _fcd linkval_buff, */
+/* hid_t_f *lapl_id) */
+/* { */
+/* char *c_link_name = NULL; /\* Buffer to hold C string *\/ */
+/* int_f ret_value = 0; /\* Return value *\/ */
+/* void *c_linkval_buff = NULL; */
+
+/* /\* */
+/* * Convert FORTRAN name to C name */
+/* *\/ */
+/* if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* /\* */
+/* * Call H5Lval function. */
+/* *\/ */
+/* if(H5Lget_val((hid_t)*link_loc_id, c_link_name, &linkval_buff, (size_t)*size, (hid_t)*lapl_id) < 0) */
+/* HGOTO_DONE(FAIL); */
+/* /\* */
+/* * Convert C name to FORTRAN */
+/* *\/ */
+/* HD5packFstring(c_buf, _fcdtocp(buf), c_bufsize-1); */
+
+
+/* done: */
+/* return ret_value; */
+/* } */
+
+
+/*----------------------------------------------------------------------------
+ * Name: H5Lregistered_c
+ * Purpose: Call H5Lregistered
+ * Inputs:
+ *
+ * Inputs:
+ * version - Version number of this struct
+ * class_id - Link class identifier
+ * comment - Comment for debugging
+ * comment_len - Comment for debugging
+ * create_func - Callback during link creation
+ * create_func_len - length
+ * move_func - Callback after moving link
+ * move_func_len - length
+ * copy_func - Callback after copying link
+ * copy_func_len - length
+ * trav_func - The main traversal function
+ * trav_func_len - length
+ * del_func - Callback for link deletion
+ * del_func_len - length
+ * query_func - Callback for queries
+ * query_func_len - length
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * February 3, 2008
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+/* int_f */
+
+/* nh5lregistered_c(int_f *version, int_f *class_id, */
+/* _fcd comment, size_t_f *comment_len, */
+/* _fcd create_func, size_t_f *create_func_len, */
+/* _fcd move_func, size_t_f *move_func_len, */
+/* _fcd copy_func, size_t_f *copy_func_len, */
+/* _fcd trav_func, size_t_f *trav_func_len, */
+/* _fcd del_func , size_t_f *del_func_len, */
+/* _fcd query_func, size_t_f *query_func_len) */
+/* { */
+/* char *c_comment = NULL; */
+/* char *c_create_func = NULL; */
+/* char *c_move_func = NULL; */
+/* char *c_copy_func = NULL; */
+/* char *c_trav_func = NULL; */
+/* char *c_del_func = NULL; */
+/* char *c_query_func = NULL; */
+
+/* H5L_class_t class_t; */
+
+/* int ret_value = 0; */
+
+/* /\* */
+/* * Convert FORTRAN name to C name */
+/* *\/ */
+/* if((c_comment = HD5f2cstring(c_comment, (size_t)*sc_comment_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_create_func = HD5f2cstring(c_create_func, (size_t)*c_create_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_move_func = HD5f2cstring(c_move_func, (size_t)*sc_move_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_copy_func = HD5f2cstring(c_copy_func, (size_t)*c_copy_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_trav_func = HD5f2cstring(c_trav_func, (size_t)*sc_trav_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_del_func = HD5f2cstring(c_del_func, (size_t)*c_del_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* if((c_query_func = HD5f2cstring(c_query_func, (size_t)*c_query_func_len)) == NULL) */
+/* HGOTO_DONE(FAIL); */
+/* /\* */
+/* * Pack into C struct H5L_class_t */
+/* *\/ */
+/* int version; /\* Version number of this struct *\/ */
+/* H5L_type_t class_id; /\* Link class identifier *\/ */
+/* const char *comment; /\* Comment for debugging *\/ */
+/* H5L_create_func_t create_func; /\* Callback during link creation *\/ */
+/* H5L_move_func_t move_func; /\* Callback after moving link *\/ */
+/* H5L_copy_func_t copy_func; /\* Callback after copying link *\/ */
+/* H5L_traverse_func_t trav_func; /\* The main traversal function *\/ */
+/* H5L_delete_func_t del_func; /\* Callback for link deletion *\/ */
+/* H5L_query_func_t query_func; /\* Callback for queries *\/ */
+
+/* class_t.version = (int)*version; */
+/* class_t.class_id = (H5L_type_t)*class_id; */
+/* class_t.comment = c_comment; */
+/* class_t. */
+
+/* /\* */
+/* * Call H5Lcopy function. */
+/* *\/ */
+/* if( H5Lcopy( (hid_t)*src_loc_id, c_src_name, (hid_t) *dest_loc_id, */
+/* c_dest_name, (hid_t)*lcpl_id, (hid_t)*lapl_id ) < 0) */
+/* HGOTO_DONE(FAIL); */
+
+/* done: */
+/* if(c_src_name) */
+/* HDfree(c_src_name); */
+/* if(c_dest_name) */
+/* HDfree(c_dest_name); */
+
+/* return ret_value; */
+/* } */
+
+/*----------------------------------------------------------------------------
+ * Name: h5lget_val_c
+ * Purpose: Call H5Lget_val_c
+ * Inputs:
+ * link_loc_id - File or group identifier.
+ * link_name - Link whose value is to be returned.
+ * link_name_len - length of link_name
+ * size - Maximum number of characters of link value to be returned.
+ * lapl_id - List access property list identifier
+ * Outputs:
+ * linkval_buff - The buffer to hold the returned link value.
+ *
+ * Returns: 0 on success, -1 on failure
+ * Programmer: M.S. Breitenfeld
+ * April 11, 2008
+ * Modifications: N/A
+ *---------------------------------------------------------------------------*/
+int_f
+nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size,
+ void *linkval_buff, hid_t_f *lapl_id)
+{
+ int_f ret_value = 0; /* Return value */
+ char *c_link_name = NULL; /* Buffer to hold C string */
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL)
+ HGOTO_DONE(FAIL);
+
+ /*
+ * Call H5Lget_val
+ */
+
+ if(H5Lget_val( (hid_t)*link_loc_id, c_link_name, &linkval_buff, (size_t)*size, (hid_t)*lapl_id )< 0)
+ HGOTO_DONE(FAIL);
+
+done:
+ return ret_value;
+}
+
+