From 95b0dcfd51f70d380ed4490188a030ddf1a0f35b Mon Sep 17 00:00:00 2001 From: bbm Date: Mon, 23 Oct 2023 16:24:23 -0400 Subject: [PATCH] adding utilities for manipulating plugin search path --- src/hdf5_util.cc | 30 ++++++++++++++++++++++++++++++ src/hdf5_util_helpers.d.ts | 5 ++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/hdf5_util.cc b/src/hdf5_util.cc index 20e8ba1..60f67d9 100644 --- a/src/hdf5_util.cc +++ b/src/hdf5_util.cc @@ -883,6 +883,33 @@ int flush(hid_t file_id) { return (int)status; } +val get_plugin_search_paths() +{ + herr_t status; + unsigned int num_paths; + ssize_t path_length; + char *initial_path_buf = {}; + status = H5PLsize(&num_paths); + + val paths = val::array(); + for (unsigned int i = 0; i < num_paths; i++) + { + path_length = H5PLget(i, initial_path_buf, 0); + char * path_buf = (char *)malloc(path_length + 1); + H5PLget(i, path_buf, path_length + 1); + paths.set(i, std::string(path_buf)); + free(path_buf); + } + return paths; +} + +int insert_plugin_search_path(const std::string search_path_string, unsigned int index) +{ + const char *search_path = search_path_string.c_str(); + herr_t status = H5PLinsert(search_path, index); + return (int)status; +} + EMSCRIPTEN_BINDINGS(hdf5) { function("get_keys", &get_keys_vector); @@ -911,6 +938,9 @@ EMSCRIPTEN_BINDINGS(hdf5) function("create_hard_link", &create_hard_link); function("create_external_link", &create_external_link); function("flush", &flush); + function("get_plugin_search_paths", &get_plugin_search_paths); + function("insert_plugin_search_path", &insert_plugin_search_path); + function("remove_plugin_search_path", &H5PLremove); class_("H5L_info2_t") .constructor<>() diff --git a/src/hdf5_util_helpers.d.ts b/src/hdf5_util_helpers.d.ts index 7c0923b..f2ff998 100644 --- a/src/hdf5_util_helpers.d.ts +++ b/src/hdf5_util_helpers.d.ts @@ -103,7 +103,10 @@ export interface H5Module extends EmscriptenModule { get_attribute_data(file_id: BigInt, obj_name: string, attr_name: string, arg3: bigint): Status; FS: FS.FileSystemType, get_keys_vector(group_id: bigint, H5_index_t: number): Array, - get_attribute_metadata(loc_id: bigint, group_name_string: string, attribute_name_string: string): Metadata + get_attribute_metadata(loc_id: bigint, group_name_string: string, attribute_name_string: string): Metadata, + get_plugin_search_paths(): string[], + insert_plugin_search_path(search_path: string, index: number): number, + remove_plugin_search_path(index: number): number, } export declare type Filter = {