From: Daniel Wagner Date: Thu, 11 Aug 2022 12:09:44 +0000 (+0200) Subject: wrapper: Call library version of nvme_init_copy_range_f1 X-Git-Tag: v2.1.2~1^2~1 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=fd582b00ec7fc4b46094dee693dca9ea73024981;p=users%2Fsagi%2Fnvme-cli.git wrapper: Call library version of nvme_init_copy_range_f1 The wrapper needs to call the library version of the function. While at it, introduce preprocessor helpers to reduce the amount boilerplate code. Fixes: 7ccb7d29afa0 ("wrapper: Add weak nvme_init_copy_range_f1 symbol") Signed-off-by: Daniel Wagner --- diff --git a/wrapper.c b/wrapper.c index 4624ce96..57bc2f1c 100644 --- a/wrapper.c +++ b/wrapper.c @@ -9,21 +9,34 @@ #include -const char * __attribute__((weak)) nvme_get_version(enum nvme_version type) -{ - const char *(*libnvme_get_version)(enum nvme_version type); +#define PROTO(args...) args +#define ARGS(args...) args - libnvme_get_version = dlsym(RTLD_NEXT, "nvme_get_version"); - - if (libnvme_get_version) - return libnvme_get_version(type); - - return "n/a"; +#define VOID_FN(name, proto, args) \ +void __attribute__((weak)) name(proto) \ +{ \ + void (*fn)(proto); \ + fn = dlsym(RTLD_NEXT, #name); \ + if (fn) \ + fn(args); \ } -void __attribute__((weak)) -nvme_init_copy_range_f1(struct nvme_copy_range_f1 *copy, __u16 *nlbs, - __u64 *slbas, __u64 *eilbrts, __u32 *elbatms, - __u32 *elbats, __u16 nr) -{ +#define FN(name, rtype, proto, args, fallback) \ +rtype __attribute__((weak)) name(proto) \ +{ \ + rtype (*fn)(proto); \ + fn = dlsym(RTLD_NEXT, #name); \ + if (fn) \ + return fn(args); \ + return fallback; \ } + +FN(nvme_get_version, + const char *, PROTO(enum nvme_version type), + ARGS(type), "n/a") + +VOID_FN(nvme_init_copy_range_f1, + PROTO(struct nvme_copy_range_f1 *copy, __u16 *nlbs, + __u64 *slbas, __u64 *eilbrts, __u32 *elbatms, + __u32 *elbats, __u16 nr), + ARGS(copy, nlbs, slbas, eilbrts, elbatms, elbats, nr))