diff options
Diffstat (limited to 'src/actual.h')
-rw-r--r-- | src/actual.h | 46 |
1 files changed, 9 insertions, 37 deletions
diff --git a/src/actual.h b/src/actual.h index af64ec3..cb08d42 100644 --- a/src/actual.h +++ b/src/actual.h @@ -12,49 +12,21 @@ #include <memory> #include <cstring> -namespace { - template <class Result, typename... Arguments> - using function_ptr = Result(*)(Arguments...); - - template <typename FunctionPtr> - FunctionPtr get_actual_function(const std::string& symbol_name) { - const void* symbol_address{ dlsym(RTLD_NEXT, symbol_name.c_str()) }; - - FunctionPtr actual_function{}; - std::memcpy(&actual_function, &symbol_address, sizeof(symbol_address)); - - return actual_function; - } -} - namespace actual { - static auto write = get_actual_function< - function_ptr<ssize_t, int, const void*, size_t> - >("write"); - - static auto writev = get_actual_function< - function_ptr<ssize_t, int, const iovec*, int> - >("writev"); - static auto rename = get_actual_function< - function_ptr<int, const char*, const char*> - >("rename"); +template <class Result, typename... Arguments> +using ptr = Result(*)(Arguments...); - static auto rmdir = get_actual_function< - function_ptr<int, const char*> - >("rmdir"); +template <typename FunctionPtr> +FunctionPtr get_ptr(const std::string& symbol_name) { + const void* symbol_address{ dlsym(RTLD_NEXT, symbol_name.c_str()) }; - static auto unlink = get_actual_function< - function_ptr<int, const char*> - >("unlink"); + FunctionPtr actual_function{}; + std::memcpy(&actual_function, &symbol_address, sizeof(symbol_address)); - static auto unlinkat = get_actual_function< - function_ptr<int, int, const char*, int> - >("unlinkat"); + return actual_function; +} - static auto mmap = get_actual_function< - function_ptr<void*, void*, size_t, int, int, int, off_t> - >("mmap"); } #endif // CHANGE_SRC_ACTUAL_FUNCTION_H_ |