Added headers and macros required by NVME target
[compat-rdma/compat.git] / include / linux / string.h
1 #ifndef _COMPAT_LINUX_STRING_H
2 #define _COMPAT_LINUX_STRING_H
3
4 #include "../../compat/config.h"
5
6 #include_next <linux/string.h>
7
8 #ifndef HAVE_STRNICMP
9 #ifndef __HAVE_ARCH_STRNICMP
10 #define strnicmp strncasecmp
11 #endif
12 #endif /* HAVE_STRNICMP */
13
14 #ifndef HAVE_MEMCHR_INV
15 #define memchr_inv LINUX_BACKPORT(memchr_inv)
16 void *memchr_inv(const void *start, int c, size_t bytes);
17 #endif
18
19 #ifndef HAVE_MEMDUP_USER_NUL
20 #define memdup_user_nul LINUX_BACKPORT(memdup_user_nul)
21 void *memdup_user_nul(const void __user *src, size_t len);
22 #endif
23
24 #ifndef HAVE_MEMCPY_AND_PAD
25 /**
26  * memcpy_and_pad - Copy one buffer to another with padding
27  * @dest: Where to copy to
28  * @dest_len: The destination buffer size
29  * @src: Where to copy from
30  * @count: The number of bytes to copy
31  * @pad: Character to use for padding if space is left in destination.
32  */
33 #define memcpy_and_pad LINUX_BACKPORT(memcpy_and_pad)
34 static inline void memcpy_and_pad(void *dest, size_t dest_len,
35                                   const void *src, size_t count, int pad)
36 {
37         if (dest_len > count) {
38                 memcpy(dest, src, count);
39                 memset(dest + count, pad,  dest_len - count);
40         } else
41                 memcpy(dest, src, dest_len);
42 }
43 #endif
44
45 #endif /* _COMPAT_LINUX_STRING_H */