Home | History | Annotate | Download | only in shared
      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