File: /Users/paulross/dev/linux/linux-3.13/include/linux/string.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       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_STRNCHR
      56: extern char * strnchr(const char *, size_t, int);
      57: #endif
      58: #ifndef __HAVE_ARCH_STRRCHR
      59: extern char * strrchr(const char *,int);
      60: #endif
      61: extern char * __must_check skip_spaces(const char *);
      62: 
      63: extern char *strim(char *);
      64: 
      65: static inline __must_check char *strstrip(char *str)
      66: {
      67:     return strim(str);
      68: }
      69: 
      70: #ifndef __HAVE_ARCH_STRSTR
      71: extern char * strstr(const char *, const char *);
      72: #endif
      73: #ifndef __HAVE_ARCH_STRNSTR
      74: extern char * strnstr(const char *, const char *, size_t);
      75: #endif
      76: #ifndef __HAVE_ARCH_STRLEN
      77: extern __kernel_size_t strlen(const char *);
      78: #endif
      79: #ifndef __HAVE_ARCH_STRNLEN
      80: extern __kernel_size_t strnlen(const char *,__kernel_size_t);
      81: #endif
      82: #ifndef __HAVE_ARCH_STRPBRK
      83: extern char * strpbrk(const char *,const char *);
      84: #endif
      85: #ifndef __HAVE_ARCH_STRSEP
      86: extern char * strsep(char **,const char *);
      87: #endif
      88: #ifndef __HAVE_ARCH_STRSPN
      89: extern __kernel_size_t strspn(const char *,const char *);
      90: #endif
      91: #ifndef __HAVE_ARCH_STRCSPN
      92: extern __kernel_size_t strcspn(const char *,const char *);
      93: #endif
      94: 
      95: #ifndef __HAVE_ARCH_MEMSET
      96: extern void * memset(void *,int,__kernel_size_t);
      97: #endif
      98: #ifndef __HAVE_ARCH_MEMCPY
      99: extern void * memcpy(void *,const void *,__kernel_size_t);
     100: #endif
     101: #ifndef __HAVE_ARCH_MEMMOVE
     102: extern void * memmove(void *,const void *,__kernel_size_t);
     103: #endif
     104: #ifndef __HAVE_ARCH_MEMSCAN
     105: extern void * memscan(void *,int,__kernel_size_t);
     106: #endif
     107: #ifndef __HAVE_ARCH_MEMCMP
     108: extern int memcmp(const void *,const void *,__kernel_size_t);
     109: #endif
     110: #ifndef __HAVE_ARCH_MEMCHR
     111: extern void * memchr(const void *,int,__kernel_size_t);
     112: #endif
     113: void *memchr_inv(const void *s, int c, size_t n);
     114: 
     115: extern char *kstrdup(const char *s, gfp_t gfp);
     116: extern char *kstrndup(const char *s, size_t len, gfp_t gfp);
     117: extern void *kmemdup(const void *src, size_t len, gfp_t gfp);
     118: 
     119: extern char **argv_split(gfp_t gfp, const char *str, int *argcp);
     120: extern void argv_free(char **argv);
     121: 
     122: extern bool sysfs_streq(const char *s1, const char *s2);
     123: extern int strtobool(const char *s, bool *res);
     124: 
     125: #ifdef CONFIG_BINARY_PRINTF
     126: int vbin_printf(u32 *bin_buf, size_t size, const char *fmt, va_list args);
     127: int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf);
     128: int bprintf(u32 *bin_buf, size_t size, const char *fmt, ...) __printf(3, 4);
     129: #endif
     130: 
     131: extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos,
     132:             const void *from, size_t available);
     133: 
     134: /**
     135:  * strstarts - does @str start with @prefix?
     136:  * @str: string to examine
     137:  * @prefix: prefix to look for.
     138:  */
     139: static inline bool strstarts(const char *str, const char *prefix)
     140: {
     141:     return strncmp(str, prefix, strlen(prefix)) == 0;
     142: }
     143: 
     144: extern size_t memweight(const void *ptr, size_t bytes);
     145: 
     146: /**
     147:  * kbasename - return the last part of a pathname.
     148:  *
     149:  * @path: path to extract the filename from.
     150:  */
     151: static inline const char *kbasename(const char *path)
     152: {
     153:     const char *tail = strrchr(path, '/');
     154:     return tail ? tail + 1 : path;
     155: }
     156: 
     157: #endif /* _LINUX_STRING_H_ */
     158: