1 #pragma once 2 3 #include <unistd.h> 4 #include <sys/syscall.h> 5 6 #ifdef HAVE_LINUX_MODULE_H 7 #include <linux/module.h> 8 #endif 9 10 #ifndef MODULE_INIT_IGNORE_MODVERSIONS 11 # define MODULE_INIT_IGNORE_MODVERSIONS 1 12 #endif 13 14 #ifndef MODULE_INIT_IGNORE_VERMAGIC 15 # define MODULE_INIT_IGNORE_VERMAGIC 2 16 #endif 17 18 #ifndef __NR_finit_module 19 # define __NR_finit_module -1 20 #endif 21 22 #ifndef HAVE_FINIT_MODULE 23 #include <errno.h> 24 25 static inline int finit_module(int fd, const char *uargs, int flags) 26 { 27 if (__NR_finit_module == -1) { 28 errno = ENOSYS; 29 return -1; 30 } 31 32 return syscall(__NR_finit_module, fd, uargs, flags); 33 } 34 #endif 35 36 #if !HAVE_DECL_STRNDUPA 37 #define strndupa(s, n) \ 38 ({ \ 39 const char *__old = (s); \ 40 size_t __len = strnlen(__old, (n)); \ 41 char *__new = alloca(__len + 1); \ 42 __new[__len] = '\0'; \ 43 memcpy(__new, __old, __len); \ 44 }) 45 #endif 46 47 #if !HAVE_DECL_BE32TOH 48 #include <endian.h> 49 #include <byteswap.h> 50 #if __BYTE_ORDER == __LITTLE_ENDIAN 51 #define be32toh(x) bswap_32 (x) 52 #else 53 #define be32toh(x) (x) 54 #endif 55 #endif 56