// Open all external files and store the id char AH5_open_external_files(AH5_eet_dataset_t *eet_dataset) { char success = AH5_TRUE; hid_t file_id; hid_t *buf_id; AH5_set_t buf; hsize_t i; char const* name; hsize_t id = 0; size_t fpath_size; char* fpath; AH5_init_set(&buf); buf_id = malloc(eet_dataset->nb_eed_items * sizeof(hid_t)); // temporary buffer containing file_id for (i = 0; i < eet_dataset->nb_eed_items; ++i) { name = eet_dataset->eed_items[AH5_EE_EXTERNAL_FILE_NAME(i)]; // copy of the pointer (shorter expression) if (AH5_index_in_set(&buf, name, &id) == AH5_FALSE) // avoid multiple opening { fpath_size = AH5_file_path_next_to(eet_dataset->principle_file_path, name, NULL, 0); fpath = malloc(fpath_size); AH5_file_path_next_to(eet_dataset->principle_file_path, name, fpath, fpath_size); if (ACCESS(fpath, F_OK | R_OK) != -1) { file_id = H5Fopen(fpath, H5F_ACC_RDONLY, H5P_DEFAULT); } else { file_id = -1; } free(fpath); AH5_add_to_set(&buf, name); buf_id[buf.nb_values - 1] = file_id; eet_dataset->file_id[i] = file_id; // write new file_id into the ext_elt structure if (file_id < 0) { printf("***** ERROR(%s): Cannot open file \"%s\". *****\n\n", AH5_C_EXTERNAL_ELEMENT, name); success = AH5_FALSE; } } else { eet_dataset->file_id[i] = buf_id[id]; // write existing file_id into the ext_elt structure } } AH5_free_set(&buf); free(buf_id); return success; }
// Open all external files and store the id char AH5_open_external_files(AH5_eet_dataset_t *eet_dataset) { char success = AH5_TRUE; hid_t file_id; hid_t *buf_id; AH5_set_t buf = {NULL, 0}; hsize_t i; char *name; hsize_t id = 0; buf_id = (hid_t*) malloc(eet_dataset->nb_eed_items * sizeof(hid_t)); // temporary buffer containing file_id buf.values = (char **) malloc(eet_dataset->nb_eed_items * sizeof(char*)); // temporary buffer containing paths for (i = 0; i < eet_dataset->nb_eed_items; i++) { name = eet_dataset->eed_items[AH5_EE_EXTERNAL_FILE_NAME(i)]; // copy of the pointer (shorter expression) if (!AH5_index_in_set(buf, name, &id)) // avoid multiple opening { if (access(name, R_OK) != -1 ) { file_id = H5Fopen(name, H5F_ACC_RDONLY, H5P_DEFAULT); } else { file_id = -1; } buf = AH5_add_to_set(buf, name); // new memory allocation!!! buf_id[buf.nb_values - 1] = file_id; eet_dataset->file_id[i] = file_id; // write new file_id into the ext_elt structure if (file_id < 0) { printf("***** ERROR(%s): Cannot open file \"%s\". *****\n\n", AH5_C_EXTERNAL_ELEMENT, name); success = AH5_FALSE; } } else { eet_dataset->file_id[i] = buf_id[id]; // write existing file_id into the ext_elt structure } } for (i = 0; i < buf.nb_values; i++) { free(buf.values[i]); } free(buf.values); free(buf_id); return success; }