// Read dataset in externalElement and open external files char AH5_read_eet_dataset (hid_t file_id, const char *path, AH5_eet_dataset_t *eet_dataset) { H5T_class_t type_class; char rdata = AH5_FALSE; hsize_t dims[2], i; size_t length; int nb_dims; eet_dataset->path = strdup(path); if (AH5_path_valid(file_id, path)) if (H5LTget_dataset_ndims(file_id, path, &nb_dims) >= 0) if (nb_dims == 2) if (H5LTget_dataset_info(file_id, path, dims, &type_class, &length) >= 0) if (dims[0] > 0 && dims[1] == 3 && type_class == H5T_STRING) if(AH5_read_str_dataset(file_id, path, dims[0] * dims[1], length, &(eet_dataset->eed_items))) { eet_dataset->nb_eed_items = dims[0]; rdata = AH5_TRUE; eet_dataset->file_id = (hid_t *) malloc(eet_dataset->nb_eed_items * sizeof(hid_t)); for (i = 0; i < eet_dataset->nb_eed_items; i++) eet_dataset->file_id[i] = -1; } if (!rdata) { AH5_print_err_dset(AH5_C_EXTERNAL_ELEMENT, path); eet_dataset->nb_eed_items = 0; eet_dataset->file_id = NULL; eet_dataset->eed_items = NULL; } else if (!AH5_open_external_files(eet_dataset)) rdata = AH5_FALSE; return rdata; }
// Read dataset in externalElement and open external files char AH5_read_eet_dataset (hid_t file_id, const char *path, AH5_eet_dataset_t *eet_dataset) { H5T_class_t type_class; char rdata = AH5_FALSE; hsize_t dims[2], i; size_t length; int nb_dims; ssize_t fpath_size; eet_dataset->path = strdup(path); fpath_size = H5Fget_name(file_id, NULL, 0); // Strange behavior of H5Fget_name: it seems to return to small length. eet_dataset->principle_file_path = malloc(fpath_size + 2); eet_dataset->principle_file_path[fpath_size + 1] = '\0'; eet_dataset->principle_file_path[fpath_size] = '\0'; H5Fget_name(file_id, eet_dataset->principle_file_path, fpath_size + 1); if (AH5_path_valid(file_id, path)) if (H5LTget_dataset_ndims(file_id, path, &nb_dims) >= 0) if (nb_dims == 2) if (H5LTget_dataset_info(file_id, path, dims, &type_class, &length) >= 0) if (dims[0] > 0 && dims[1] == 3 && type_class == H5T_STRING) if(AH5_read_str_dataset(file_id, path, dims[0] * dims[1], length, &(eet_dataset->eed_items))) { eet_dataset->nb_eed_items = dims[0]; rdata = AH5_TRUE; eet_dataset->file_id = (hid_t *) malloc((size_t) eet_dataset->nb_eed_items * sizeof(hid_t)); for (i = 0; i < eet_dataset->nb_eed_items; i++) eet_dataset->file_id[i] = -1; } if (!rdata) { AH5_print_err_dset(AH5_C_EXTERNAL_ELEMENT, path); eet_dataset->nb_eed_items = 0; eet_dataset->file_id = NULL; eet_dataset->eed_items = NULL; } else if (!AH5_open_external_files(eet_dataset)) rdata = AH5_FALSE; return rdata; }