/****if* H5Of/h5olink_c * NAME * h5olink_c * PURPOSE * Calls H5Olink * INPUTS * object_id - Object to be linked. * new_loc_id - File or group identifier specifying location at which object is to be linked. * name - Name of link to be created, relative to new_loc_id. * namelen - Length of buffer for link to be created. * lcpl_id - Link creation property list identifier. * lapl_id - Link access property list identifier. * RETURNS * 0 on success, -1 on failure * AUTHOR * M. Scot Breitenfeld * April 21, 2008 * SOURCE */ int_f nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id) /******/ { 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 H5Olink function. */ if((hid_t_f)H5Olink((hid_t)*object_id, (hid_t)*new_loc_id, c_name, (hid_t)*lcpl_id, (hid_t)*lapl_id) < 0) HGOTO_DONE(FAIL); done: if(c_name) HDfree(c_name); return ret_value; }
/* * Class: hdf_hdf5lib_H5 * Method: H5Olink * Signature: (JJLjava/lang/String;JJ)V */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Olink (JNIEnv *env, jclass clss, jlong cur_loc_id, jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id) { herr_t status = -1; const char *lDstName; PIN_JAVA_STRING(dst_name, lDstName); if (lDstName != NULL) { status = H5Olink((hid_t)cur_loc_id, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); UNPIN_JAVA_STRING(dst_name, lDstName); if (status < 0) h5libraryError(env); } } /* end Java_hdf_hdf5lib_H5_H5Olink */
/* * Class: hdf_hdf5lib_H5 * Method: H5Olink * Signature: (JJLjava/lang/String;JJ)V */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Olink (JNIEnv *env, jclass clss, jlong cur_loc_id, jlong dst_loc_id, jstring dst_name, jlong create_id, jlong access_id) { const char *linkDstName = NULL; herr_t status = FAIL; UNUSED(clss); if (NULL == dst_name) H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Olink: link destination name is NULL"); PIN_JAVA_STRING(ENVONLY, dst_name, linkDstName, NULL, "H5Olink: link destination name not pinned"); if ((status = H5Olink((hid_t)cur_loc_id, (hid_t)dst_loc_id, linkDstName, (hid_t)create_id, (hid_t)access_id)) < 0) H5_LIBRARY_ERROR(ENVONLY); done: if (linkDstName) UNPIN_JAVA_STRING(ENVONLY, dst_name, linkDstName); } /* end Java_hdf_hdf5lib_H5_H5Olink */
int main() { printf("\n*** Checking HDF5 group functions.\n"); printf("*** Checking out root group..."); { hid_t fileid, grpid, access_plistid; /* Open the root group of a new file. */ if ((access_plistid = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; if (H5Pset_fclose_degree(access_plistid, H5F_CLOSE_SEMI)) ERR; if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, access_plistid)) < 0) ERR; if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; if (H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; /* Reopen file and root group. */ if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDWR, access_plistid)) < 0) ERR; if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; if (H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; printf("*** Checking out H5Gmove..."); { hid_t fileid, grpid; hid_t datasetid, spaceid; /* Create file with one dataset. */ if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; if ((spaceid = H5Screate(H5S_SCALAR)) < 0) ERR; if ((datasetid = H5Dcreate(grpid, DATASET_NAME, H5T_NATIVE_INT, spaceid, H5P_DEFAULT)) < 0) ERR; if (H5Dclose(datasetid) < 0 || H5Sclose(spaceid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; /* Reopen file and check, then rename dataset. */ if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gopen(fileid, "/")) < 0) ERR; if ((datasetid = H5Dopen1(grpid, DATASET_NAME)) < 0) ERR; if (H5Dclose(datasetid) < 0) ERR; if (H5Gmove(grpid, DATASET_NAME, NEW_NAME) < 0) ERR; if ((datasetid = H5Dopen1(grpid, NEW_NAME)) < 0) ERR; if (H5Dclose(datasetid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; printf("*** Checking out sub-groups..."); { hid_t fileid, grpid, subgrpid; /* Create file with some nested groups. */ if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gcreate(fileid, GRP_NAME, 0)) < 0) ERR; if ((subgrpid = H5Gcreate(grpid, SUB_GRP_NAME, 0)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; /* Reopen file and discover groups. */ if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gopen(fileid, GRP_NAME)) < 0) ERR; if ((subgrpid = H5Gopen(grpid, SUB_GRP_NAME)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; printf("*** Checking out UTF8 named sub-group..."); { hid_t fileid, grpid, subgrpid; /* Create file with nested group. */ if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gcreate(fileid, (char *)norm_utf8, 0)) < 0) ERR; if ((subgrpid = H5Gcreate(grpid, SUB_GRP_NAME, 0)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; /* Reopen file and discover groups. */ if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gopen(fileid, (char *)norm_utf8)) < 0) ERR; if ((subgrpid = H5Gopen(grpid, SUB_GRP_NAME)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; printf("*** Checking out UTF8 named sub-group with group creation ordering..."); { hid_t fileid, grpid, subgrpid; hid_t fapl_id, fcpl_id, gcpl_id; /* Create file with nested group. */ if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) ERR; if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR; if (H5Pset_link_creation_order(fcpl_id, H5P_CRT_ORDER_TRACKED|H5P_CRT_ORDER_INDEXED) < 0) ERR; if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, fcpl_id, fapl_id)) < 0) ERR; if ((gcpl_id = H5Pcreate(H5P_GROUP_CREATE)) < 0) ERR; if (H5Pset_link_creation_order(gcpl_id, H5P_CRT_ORDER_TRACKED|H5P_CRT_ORDER_INDEXED) < 0) ERR; if ((grpid = H5Gcreate_anon(fileid, gcpl_id, H5P_DEFAULT)) < 0) ERR; if ((H5Olink(grpid, fileid, (char *)norm_utf8, H5P_DEFAULT, H5P_DEFAULT)) < 0) ERR; if ((subgrpid = H5Gcreate(grpid, SUB_GRP_NAME, 0)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; /* Reopen file and discover groups. */ if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) ERR; if ((grpid = H5Gopen(fileid, (char *)norm_utf8)) < 0) ERR; if ((subgrpid = H5Gopen(grpid, SUB_GRP_NAME)) < 0) ERR; if (H5Gclose(subgrpid) < 0 || H5Gclose(grpid) < 0 || H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; FINAL_RESULTS; }