From ab4911e4db4ea80deeb730435d6eeabcd82d8f19 Mon Sep 17 00:00:00 2001 From: Weronika Lewandowska <weronika.lewandowska@intel.com> Date: Mon, 12 Oct 2020 13:21:59 +0200 Subject: [PATCH] pmem2: add source get fd/handle --- src/include/libpmem2.h | 4 ++++ src/libpmem2/libpmem2.def | 1 + src/libpmem2/libpmem2.link.in | 1 + src/libpmem2/source_posix.c | 20 ++++++++++++++++++++ src/libpmem2/source_windows.c | 20 ++++++++++++++++++++ src/test/scope/out13.log.match | 1 + src/test/scope/out14.log.match | 1 + 7 files changed, 48 insertions(+) diff --git a/src/include/libpmem2.h b/src/include/libpmem2.h index 752fb1cca..4d2e6027c 100644 --- a/src/include/libpmem2.h +++ b/src/include/libpmem2.h @@ -70,6 +70,7 @@ extern "C" { #define PMEM2_E_NO_ACCESS (-100032) #define PMEM2_E_VM_RESERVATION_NOT_EMPTY (-100033) #define PMEM2_E_MAP_EXISTS (-100034) +#define PMEM2_E_FILE_DESCRIPTOR_NOT_SET (-100035) /* source setup */ @@ -79,6 +80,9 @@ int pmem2_source_from_fd(struct pmem2_source **src, int fd); int pmem2_source_from_anon(struct pmem2_source **src, size_t size); #ifdef _WIN32 int pmem2_source_from_handle(struct pmem2_source **src, HANDLE handle); +int pmem2_source_get_handle(const struct pmem2_source *src, HANDLE *h); +#else +int pmem2_source_get_fd(const struct pmem2_source *src, int *fd); #endif int pmem2_source_size(const struct pmem2_source *src, size_t *size); diff --git a/src/libpmem2/libpmem2.def b/src/libpmem2/libpmem2.def index c8bdbc39d..ccda52c72 100644 --- a/src/libpmem2/libpmem2.def +++ b/src/libpmem2/libpmem2.def @@ -45,6 +45,7 @@ EXPORTS pmem2_source_from_anon pmem2_source_from_fd pmem2_source_from_handle + pmem2_source_get_handle pmem2_source_size pmem2_vm_reservation_delete pmem2_vm_reservation_get_address diff --git a/src/libpmem2/libpmem2.link.in b/src/libpmem2/libpmem2.link.in index 0bb0edafe..320b7e7e3 100644 --- a/src/libpmem2/libpmem2.link.in +++ b/src/libpmem2/libpmem2.link.in @@ -40,6 +40,7 @@ LIBPMEM2_1.0 { pmem2_source_from_anon; pmem2_source_from_fd; pmem2_source_from_handle; + pmem2_source_get_fd; pmem2_source_size; pmem2_vm_reservation_delete; pmem2_vm_reservation_get_address; diff --git a/src/libpmem2/source_posix.c b/src/libpmem2/source_posix.c index 422d48d9f..92f618609 100644 --- a/src/libpmem2/source_posix.c +++ b/src/libpmem2/source_posix.c @@ -174,3 +174,23 @@ pmem2_source_alignment(const struct pmem2_source *src, size_t *alignment) return 0; } + +/* + * pmem2_source_get_fd -- get file descriptor from provided source + */ +int +pmem2_source_get_fd(const struct pmem2_source *src, int *fd) +{ + LOG(3, "src type %d", src->type); + PMEM2_ERR_CLR(); + + if (src->type == PMEM2_SOURCE_FD) { + *fd = src->value.fd; + } else { + ERR( + "File descriptor is not set, source type does not support fd"); + return PMEM2_E_FILE_DESCRIPTOR_NOT_SET; + } + + return 0; +} diff --git a/src/libpmem2/source_windows.c b/src/libpmem2/source_windows.c index ea7d03a90..fb813273e 100644 --- a/src/libpmem2/source_windows.c +++ b/src/libpmem2/source_windows.c @@ -161,3 +161,23 @@ pmem2_source_alignment(const struct pmem2_source *src, size_t *alignment) return 0; } + +/* + * pmem2_source_get_handle -- get file handler from provided source + */ +int +pmem2_source_get_handle(const struct pmem2_source *src, HANDLE *h) +{ + LOG(3, "src type %d", src->type); + PMEM2_ERR_CLR(); + + if (src->type == PMEM2_SOURCE_HANDLE) { + *h = src->value.handle; + } else { + ERR( + "File handle is not set, source type does not support file handles"); + return PMEM2_E_FILE_HANDLE_NOT_SET; + } + + return 0; +} diff --git a/src/test/scope/out13.log.match b/src/test/scope/out13.log.match index 8a9fdb4b0..0bf8d66c2 100644 --- a/src/test/scope/out13.log.match +++ b/src/test/scope/out13.log.match @@ -31,6 +31,7 @@ pmem2_source_device_id$(nW) pmem2_source_device_usc$(nW) pmem2_source_from_anon$(nW) pmem2_source_from_fd$(nW) +pmem2_source_get_fd$(nW) pmem2_source_size$(nW) pmem2_vm_reservation_delete$(nW) pmem2_vm_reservation_get_address$(nW) diff --git a/src/test/scope/out14.log.match b/src/test/scope/out14.log.match index eb93f12f1..3c80cd799 100644 --- a/src/test/scope/out14.log.match +++ b/src/test/scope/out14.log.match @@ -36,6 +36,7 @@ pmem2_source_device_usc pmem2_source_from_anon pmem2_source_from_fd pmem2_source_from_handle +pmem2_source_get_handle pmem2_source_size pmem2_vm_reservation_delete pmem2_vm_reservation_get_address -- GitLab