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