Super User's BSD Cross Reference: /OpenBSD/sys/dev/pci/drm/include/linux/string.h

1 /* Public domain. */
2
3#ifndef _LINUX_STRING_H
4#define _LINUX_STRING_H
5
6#include <sys/types.h>
7#include <sys/systm.h>
8#include <sys/malloc.h>
9#include <sys/stdint.h>
10#include <sys/errno.h>
11
12#include <linux/compiler.h>
13
14 void *memchr_inv(const void *, int, size_t);
15
16 static inline bool
17 mem_is_zero(const void *b, size_t len)
18{
19 return (memchr_inv(b, 0, len) == NULL);
20}
21
22 static inline void *
23 memset32(uint32_t *b, uint32_t c, size_t len)
24{
25 uint32_t *dst = b;
26 while (len--)
27 *dst++ = c;
28 return b;
29}
30
31 static inline void *
32 memset64(uint64_t *b, uint64_t c, size_t len)
33{
34 uint64_t *dst = b;
35 while (len--)
36 *dst++ = c;
37 return b;
38}
39
40 static inline void *
41 memset_p(void **p, void *v, size_t n)
42{
43#ifdef __LP64__
44 return memset64((uint64_t *)p, (uintptr_t)v, n);
45#else
46 return memset32((uint32_t *)p, (uintptr_t)v, n);
47#endif
48}
49
50 static inline void *
51 kmemdup(const void *src, size_t len, int flags)
52{
53 void *p = malloc(len, M_DRM, flags);
54 if (p)
55 memcpy(p, src, len);
56 return (p);
57}
58
59 static inline void *
60 kmemdup_array(const void *src, size_t nemb, size_t size, int flags)
61{
62 void *p = mallocarray(nemb, size, M_DRM, flags);
63 if (p)
64 memcpy(p, src, nemb * size);
65 return (p);
66}
67
68 static inline void *
69 kstrdup(const char *str, int flags)
70{
71 size_t len;
72 char *p;
73
74 if (str == NULL)
75 return NULL;
76
77 len = strlen(str) + 1;
78 p = malloc(len, M_DRM, flags);
79 if (p)
80 memcpy(p, str, len);
81 return (p);
82}
83
84 static inline const char *
85 kstrdup_const(const char *str, int flags)
86{
87 return kstrdup(str, flags);
88}
89
90 void kfree_const(const void *);
91
92 static inline int
93 match_string(const char * const *array, size_t n, const char *str)
94{
95 int i;
96
97 for (i = 0; i < n; i++) {
98 if (array[i] == NULL)
99 break;
100 if (!strcmp(array[i], str))
101 return i;
102 }
103
104 return -EINVAL;
105}
106
107 static inline ssize_t
108 strscpy(char *dst, const char *src, size_t dstsize)
109{
110 ssize_t r;
111 r = strlcpy(dst, src, dstsize);
112 if (dstsize == 0 || r >= dstsize)
113 return -E2BIG;
114 return r;
115}
116
117 static inline ssize_t
118 strscpy_pad(char *dst, const char *src, size_t dstsize)
119{
120 memset(dst, 0, dstsize);
121 return strscpy(dst, src, dstsize);
122}
123
124#endif
125 

AltStyle によって変換されたページ (->オリジナル) /