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
25static 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