Line data Source code
1 : #ifndef _LINUX_STRING_H_
2 : #define _LINUX_STRING_H_
3 :
4 :
5 : #include <linux/compiler.h> /* for inline */
6 : #include <linux/types.h> /* for size_t */
7 : #include <linux/stddef.h> /* for NULL */
8 : #include <stdarg.h>
9 : #include <uapi/linux/string.h>
10 :
11 : extern char *strndup_user(const char __user *, long);
12 : extern void *memdup_user(const void __user *, size_t);
13 :
14 : /*
15 : * Include machine specific inline routines
16 : */
17 : #include <asm/string.h>
18 :
19 : #ifndef __HAVE_ARCH_STRCPY
20 : extern char * strcpy(char *,const char *);
21 : #endif
22 : #ifndef __HAVE_ARCH_STRNCPY
23 : extern char * strncpy(char *,const char *, __kernel_size_t);
24 : #endif
25 : #ifndef __HAVE_ARCH_STRLCPY
26 : size_t strlcpy(char *, const char *, size_t);
27 : #endif
28 : #ifndef __HAVE_ARCH_STRCAT
29 : extern char * strcat(char *, const char *);
30 : #endif
31 : #ifndef __HAVE_ARCH_STRNCAT
32 : extern char * strncat(char *, const char *, __kernel_size_t);
33 : #endif
34 : #ifndef __HAVE_ARCH_STRLCAT
35 : extern size_t strlcat(char *, const char *, __kernel_size_t);
36 : #endif
37 : #ifndef __HAVE_ARCH_STRCMP
38 : extern int strcmp(const char *,const char *);
39 : #endif
40 : #ifndef __HAVE_ARCH_STRNCMP
41 : extern int strncmp(const char *,const char *,__kernel_size_t);
42 : #endif
43 : #ifndef __HAVE_ARCH_STRNICMP
44 : extern int strnicmp(const char *, const char *, __kernel_size_t);
45 : #endif
46 : #ifndef __HAVE_ARCH_STRCASECMP
47 : extern int strcasecmp(const char *s1, const char *s2);
48 : #endif
49 : #ifndef __HAVE_ARCH_STRNCASECMP
50 : extern int strncasecmp(const char *s1, const char *s2, size_t n);
51 : #endif
52 : #ifndef __HAVE_ARCH_STRCHR
53 : extern char * strchr(const char *,int);
54 : #endif
55 : #ifndef __HAVE_ARCH_STRCHRNUL
56 : extern char * strchrnul(const char *,int);
57 : #endif
58 : #ifndef __HAVE_ARCH_STRNCHR
59 : extern char * strnchr(const char *, size_t, int);
60 : #endif
61 : #ifndef __HAVE_ARCH_STRRCHR
62 : extern char * strrchr(const char *,int);
63 : #endif
64 : extern char * __must_check skip_spaces(const char *);
65 :
66 : extern char *strim(char *);
67 :
68 : static inline __must_check char *strstrip(char *str)
69 : {
70 : return strim(str);
71 : }
72 :
73 : #ifndef __HAVE_ARCH_STRSTR
74 : extern char * strstr(const char *, const char *);
75 : #endif
76 : #ifndef __HAVE_ARCH_STRNSTR
77 : extern char * strnstr(const char *, const char *, size_t);
78 : #endif
79 : #ifndef __HAVE_ARCH_STRLEN
80 : extern __kernel_size_t strlen(const char *);
81 : #endif
82 : #ifndef __HAVE_ARCH_STRNLEN
83 : extern __kernel_size_t strnlen(const char *,__kernel_size_t);
84 : #endif
85 : #ifndef __HAVE_ARCH_STRPBRK
86 : extern char * strpbrk(const char *,const char *);
87 : #endif
88 : #ifndef __HAVE_ARCH_STRSEP
89 : extern char * strsep(char **,const char *);
90 : #endif
91 : #ifndef __HAVE_ARCH_STRSPN
92 : extern __kernel_size_t strspn(const char *,const char *);
93 : #endif
94 : #ifndef __HAVE_ARCH_STRCSPN
95 : extern __kernel_size_t strcspn(const char *,const char *);
96 : #endif
97 :
98 : #ifndef __HAVE_ARCH_MEMSET
99 : extern void * memset(void *,int,__kernel_size_t);
100 : #endif
101 : #ifndef __HAVE_ARCH_MEMCPY
102 : extern void * memcpy(void *,const void *,__kernel_size_t);
103 : #endif
104 : #ifndef __HAVE_ARCH_MEMMOVE
105 : extern void * memmove(void *,const void *,__kernel_size_t);
106 : #endif
107 : #ifndef __HAVE_ARCH_MEMSCAN
108 : extern void * memscan(void *,int,__kernel_size_t);
109 : #endif
110 : #ifndef __HAVE_ARCH_MEMCMP
111 : extern int memcmp(const void *,const void *,__kernel_size_t);
112 : #endif
113 : #ifndef __HAVE_ARCH_MEMCHR
114 : extern void * memchr(const void *,int,__kernel_size_t);
115 : #endif
116 : void *memchr_inv(const void *s, int c, size_t n);
117 :
118 : extern char *kstrdup(const char *s, gfp_t gfp);
119 : extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
120 : extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
121 :
122 : extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
123 : extern void argv_free(char **argv);
124 :
125 : extern bool sysfs_streq(const char *s1, const char *s2);
126 : extern int strtobool(const char *s, bool *res);
127 :
128 : #ifdef CONFIG_BINARY_PRINTF
129 : int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args);
130 : int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf);
131 : int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4);
132 : #endif
133 :
134 : extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
135 : const void *from, size_t available);
136 :
137 : /**
138 : * strstarts - does @str start with @prefix?
139 : * @str: string to examine
140 : * @prefix: prefix to look for.
141 : */
142 : static inline bool strstarts(const char *str, const char *prefix)
143 : {
144 : return strncmp(str, prefix, strlen(prefix)) == 0;
145 : }
146 :
147 : extern size_t memweight(const void *ptr, size_t bytes);
148 :
149 : /**
150 : * kbasename - return the last part of a pathname.
151 : *
152 : * @path: path to extract the filename from.
153 : */
154 : static inline const char *kbasename(const char *path)
155 : {
156 378 : const char *tail = strrchr(path, '/');
157 378 : return tail ? tail + 1 : path;
158 : }
159 :
160 : #endif /* _LINUX_STRING_H_ */
|