| #pragma once |
| |
| #include <unistd.h> |
| #include <sys/syscall.h> |
| |
| #ifdef HAVE_LINUX_MODULE_H |
| #include <linux/module.h> |
| #endif |
| |
| #ifndef MODULE_INIT_IGNORE_MODVERSIONS |
| # define MODULE_INIT_IGNORE_MODVERSIONS 1 |
| #endif |
| |
| #ifndef MODULE_INIT_IGNORE_VERMAGIC |
| # define MODULE_INIT_IGNORE_VERMAGIC 2 |
| #endif |
| |
| #ifndef __NR_finit_module |
| # define __NR_finit_module -1 |
| #endif |
| |
| #ifndef HAVE_FINIT_MODULE |
| #include <errno.h> |
| |
| static inline int finit_module(int fd, const char *uargs, int flags) |
| { |
| if (__NR_finit_module == -1) { |
| errno = ENOSYS; |
| return -1; |
| } |
| |
| return syscall(__NR_finit_module, fd, uargs, flags); |
| } |
| #endif |
| |
| #if (!HAVE_DECL_STRNDUPA && !defined(__APPLE__)) |
| #define strndupa(s, n) \ |
| ({ \ |
| const char *__old = (s); \ |
| size_t __len = strnlen(__old, (n)); \ |
| char *__new = alloca(__len + 1); \ |
| __new[__len] = '\0'; \ |
| memcpy(__new, __old, __len); \ |
| }) |
| #endif |
| |
| #if !HAVE_DECL_BE32TOH |
| #include <endian.h> |
| #include <byteswap.h> |
| #if __BYTE_ORDER == __LITTLE_ENDIAN |
| #define be32toh(x) bswap_32 (x) |
| #else |
| #define be32toh(x) (x) |
| #endif |
| #endif |