⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string.h

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 H
📖 第 1 页 / 共 4 页
字号:
  __asm__ __volatile__    ("std\n\t"     "repne; scasb\n\t"     "je 1f\n\t"     "orl $-1,%0\n"     "1:\tcld"     : "=D" (__res), "=&c" (__d0)     : "a" (__c), "0" (__s + __n - 1), "1" (__n),       "m" ( *(struct { __extension__ char __x[__n]; } *)__s)     : "cc");# endif  return __res + 1;}# ifdef __USE_GNU#  define memrchr(s, c, n) __memrchr ((s), (c), (n))# endif#endif/* Return pointer to C in S.  */#define _HAVE_STRING_ARCH_rawmemchr 1__STRING_INLINE void *__rawmemchr (const void *__s, int __c);#ifndef _FORCE_INLINES__STRING_INLINE void *__rawmemchr (const void *__s, int __c){  register unsigned long int __d0;  register unsigned char *__res;  __asm__ __volatile__    ("cld\n\t"     "repne; scasb\n\t"     : "=D" (__res), "=&c" (__d0)     : "a" (__c), "0" (__s), "1" (0xffffffff),       "m" ( *(struct { char __x[0xfffffff]; } *)__s)     : "cc");  return __res - 1;}# ifdef __USE_GNU__STRING_INLINE void *rawmemchr (const void *__s, int __c){  return __rawmemchr (__s, __c);}# endif	/* use GNU */#endif/* Return the length of S.  */#define _HAVE_STRING_ARCH_strlen 1#define strlen(str) \  (__extension__ (__builtin_constant_p (str)				      \		  ? __builtin_strlen (str)				      \		  : __strlen_g (str)))__STRING_INLINE size_t __strlen_g (__const char *__str);__STRING_INLINE size_t__strlen_g (__const char *__str){  register char __dummy;  register __const char *__tmp = __str;  __asm__ __volatile__    ("1:\n\t"     "movb	(%0),%b1\n\t"     "leal	1(%0),%0\n\t"     "testb	%b1,%b1\n\t"     "jne	1b"     : "=r" (__tmp), "=&q" (__dummy)     : "0" (__str),       "m" ( *(struct { char __x[0xfffffff]; } *)__str)     : "cc" );  return __tmp - __str - 1;}/* Copy SRC to DEST.  */#define _HAVE_STRING_ARCH_strcpy 1#define strcpy(dest, src) \  (__extension__ (__builtin_constant_p (src)				      \		  ? (sizeof ((src)[0]) == 1 && strlen (src) + 1 <= 8	      \		     ? __strcpy_a_small ((dest), (src), strlen (src) + 1)     \		     : (char *) memcpy ((char *) (dest),		      \					(__const char *) (src),		      \					strlen (src) + 1))		      \		  : __strcpy_g ((dest), (src))))#define __strcpy_a_small(dest, src, srclen) \  (__extension__ ({ char *__dest = (dest);				      \		    union {						      \		      unsigned int __ui;				      \		      unsigned short int __usi;				      \		      unsigned char __uc;				      \		      char __c;						      \		    } *__u = (void *) __dest;				      \		    switch (srclen)					      \		      {							      \		      case 1:						      \			__u->__uc = '\0';				      \			break;						      \		      case 2:						      \			__u->__usi = __STRING_SMALL_GET16 (src, 0);	      \			break;						      \		      case 3:						      \			__u->__usi = __STRING_SMALL_GET16 (src, 0);	      \			__u = __extension__ ((void *) __u + 2);		      \			__u->__uc = '\0';				      \			break;						      \		      case 4:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			break;						      \		      case 5:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__uc = '\0';				      \			break;						      \		      case 6:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__usi = __STRING_SMALL_GET16 (src, 4);	      \			break;						      \		      case 7:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__usi = __STRING_SMALL_GET16 (src, 4);	      \			__u = __extension__ ((void *) __u + 2);		      \			__u->__uc = '\0';				      \			break;						      \		      case 8:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__ui = __STRING_SMALL_GET32 (src, 4);	      \			break;						      \		      }							      \		    (char *) __dest; }))__STRING_INLINE char *__strcpy_g (char *__dest, __const char *__src);__STRING_INLINE char *__strcpy_g (char *__dest, __const char *__src){  register char *__tmp = __dest;  register char __dummy;  __asm__ __volatile__    (     "1:\n\t"     "movb	(%0),%b2\n\t"     "leal	1(%0),%0\n\t"     "movb	%b2,(%1)\n\t"     "leal	1(%1),%1\n\t"     "testb	%b2,%b2\n\t"     "jne	1b"     : "=&r" (__src), "=&r" (__tmp), "=&q" (__dummy),       "=m" ( *(struct { char __x[0xfffffff]; } *)__dest)     : "0" (__src), "1" (__tmp),       "m" ( *(struct { char __x[0xfffffff]; } *)__src)     : "cc");  return __dest;}#ifdef __USE_GNU# define _HAVE_STRING_ARCH_stpcpy 1/* Copy SRC to DEST.  */# define __stpcpy(dest, src) \  (__extension__ (__builtin_constant_p (src)				      \		  ? (strlen (src) + 1 <= 8				      \		     ? __stpcpy_a_small ((dest), (src), strlen (src) + 1)     \		     : __stpcpy_c ((dest), (src), strlen (src) + 1))	      \		  : __stpcpy_g ((dest), (src))))# define __stpcpy_c(dest, src, srclen) \  ((srclen) % 4 == 0							      \   ? __mempcpy_by4 (dest, src, srclen) - 1				      \   : ((srclen) % 2 == 0							      \      ? __mempcpy_by2 (dest, src, srclen) - 1				      \      : __mempcpy_byn (dest, src, srclen) - 1))/* In glibc itself we use this symbol for namespace reasons.  */# define stpcpy(dest, src) __stpcpy ((dest), (src))# define __stpcpy_a_small(dest, src, srclen) \  (__extension__ ({ union {						      \		      unsigned int __ui;				      \		      unsigned short int __usi;				      \		      unsigned char __uc;				      \		      char __c;						      \		    } *__u = (void *) (dest);				      \		    switch (srclen)					      \		      {							      \		      case 1:						      \			__u->__uc = '\0';				      \			break;						      \		      case 2:						      \			__u->__usi = __STRING_SMALL_GET16 (src, 0);	      \			__u = __extension__ ((void *) __u + 1);		      \			break;						      \		      case 3:						      \			__u->__usi = __STRING_SMALL_GET16 (src, 0);	      \			__u = __extension__ ((void *) __u + 2);		      \			__u->__uc = '\0';				      \			break;						      \		      case 4:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 3);		      \			break;						      \		      case 5:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__uc = '\0';				      \			break;						      \		      case 6:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__usi = __STRING_SMALL_GET16 (src, 4);	      \			__u = __extension__ ((void *) __u + 1);		      \			break;						      \		      case 7:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__usi = __STRING_SMALL_GET16 (src, 4);	      \			__u = __extension__ ((void *) __u + 2);		      \			__u->__uc = '\0';				      \			break;						      \		      case 8:						      \			__u->__ui = __STRING_SMALL_GET32 (src, 0);	      \			__u = __extension__ ((void *) __u + 4);		      \			__u->__ui = __STRING_SMALL_GET32 (src, 4);	      \			__u = __extension__ ((void *) __u + 3);		      \			break;						      \		      }							      \		    (char *) __u; }))__STRING_INLINE char *__mempcpy_by4 (char *__dest, __const char *__src,				     size_t __srclen);__STRING_INLINE char *__mempcpy_by4 (char *__dest, __const char *__src, size_t __srclen){  register char *__tmp = __dest;  register unsigned long int __d0, __d1;  __asm__ __volatile__    ("1:\n\t"     "movl	(%2),%0\n\t"     "leal	4(%2),%2\n\t"     "movl	%0,(%1)\n\t"     "leal	4(%1),%1\n\t"     "decl	%3\n\t"     "jnz	1b"     : "=&r" (__d0), "=r" (__tmp), "=&r" (__src), "=&r" (__d1)     : "1" (__tmp), "2" (__src), "3" (__srclen / 4)     : "memory", "cc");  return __tmp;}__STRING_INLINE char *__mempcpy_by2 (char *__dest, __const char *__src,				     size_t __srclen);__STRING_INLINE char *__mempcpy_by2 (char *__dest, __const char *__src, size_t __srclen){  register char *__tmp = __dest;  register unsigned long int __d0, __d1;  __asm__ __volatile__    ("shrl	$1,%3\n\t"     "jz	2f\n"                 /* only a word */     "1:\n\t"     "movl	(%2),%0\n\t"     "leal	4(%2),%2\n\t"     "movl	%0,(%1)\n\t"     "leal	4(%1),%1\n\t"     "decl	%3\n\t"     "jnz	1b\n"     "2:\n\t"     "movw	(%2),%w0\n\t"     "movw	%w0,(%1)"     : "=&q" (__d0), "=r" (__tmp), "=&r" (__src), "=&r" (__d1),       "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest)     : "1" (__tmp), "2" (__src), "3" (__srclen / 2),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  return __tmp + 2;}__STRING_INLINE char *__mempcpy_byn (char *__dest, __const char *__src,				     size_t __srclen);__STRING_INLINE char *__mempcpy_byn (char *__dest, __const char *__src, size_t __srclen){  register unsigned long __d0, __d1;  register char *__tmp = __dest;  __asm__ __volatile__    ("cld\n\t"     "shrl	$1,%%ecx\n\t"     "jnc	1f\n\t"     "movsb\n"     "1:\n\t"     "shrl	$1,%%ecx\n\t"     "jnc	2f\n\t"     "movsw\n"     "2:\n\t"     "rep; movsl"     : "=D" (__tmp), "=&c" (__d0), "=&S" (__d1),       "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest)     : "0" (__tmp), "1" (__srclen), "2" (__src),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  return __tmp;}__STRING_INLINE char *__stpcpy_g (char *__dest, __const char *__src);__STRING_INLINE char *__stpcpy_g (char *__dest, __const char *__src){  register char *__tmp = __dest;  register char __dummy;  __asm__ __volatile__    (     "1:\n\t"     "movb	(%0),%b2\n\t"     "leal	1(%0),%0\n\t"     "movb	%b2,(%1)\n\t"     "leal	1(%1),%1\n\t"     "testb	%b2,%b2\n\t"     "jne	1b"     : "=&r" (__src), "=r" (__tmp), "=&q" (__dummy),       "=m" ( *(struct { char __x[0xfffffff]; } *)__dest)     : "0" (__src), "1" (__tmp),       "m" ( *(struct { char __x[0xfffffff]; } *)__src)     : "cc");  return __tmp - 1;}#endif/* Copy no more than N characters of SRC to DEST.  */#define _HAVE_STRING_ARCH_strncpy 1#define strncpy(dest, src, n) \  (__extension__ (__builtin_constant_p (src)				      \		  ? ((strlen (src) + 1 >= ((size_t) (n))		      \		      ? (char *) memcpy ((char *) (dest),		      \					 (__const char *) (src), n)	      \		      : __strncpy_cg ((dest), (src), strlen (src) + 1, n)))   \		  : __strncpy_gg ((dest), (src), n)))#define __strncpy_cg(dest, src, srclen, n) \  (((srclen) % 4 == 0)							      \   ? __strncpy_by4 (dest, src, srclen, n)				      \   : (((srclen) % 2 == 0)						      \      ? __strncpy_by2 (dest, src, srclen, n)				      \      : __strncpy_byn (dest, src, srclen, n)))__STRING_INLINE char *__strncpy_by4 (char *__dest, __const char __src[],				     size_t __srclen, size_t __n);__STRING_INLINE char *__strncpy_by4 (char *__dest, __const char __src[], size_t __srclen, size_t __n){  register char *__tmp = __dest;  register int __dummy1, __dummy2;  __asm__ __volatile__    ("1:\n\t"     "movl	(%2),%0\n\t"     "leal	4(%2),%2\n\t"     "movl	%0,(%1)\n\t"     "leal	4(%1),%1\n\t"     "decl	%3\n\t"     "jnz	1b"     : "=&r" (__dummy1), "=r" (__tmp), "=&r" (__src), "=&r" (__dummy2),       "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest)     : "1" (__tmp), "2" (__src), "3" (__srclen / 4),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  (void) memset (__tmp, '\0', __n - __srclen);  return __dest;}__STRING_INLINE char *__strncpy_by2 (char *__dest, __const char __src[],				     size_t __srclen, size_t __n);__STRING_INLINE char *__strncpy_by2 (char *__dest, __const char __src[], size_t __srclen, size_t __n){  register char *__tmp = __dest;  register int __dummy1, __dummy2;  __asm__ __volatile__    ("shrl	$1,%3\n\t"     "jz	2f\n"                 /* only a word */     "1:\n\t"     "movl	(%2),%0\n\t"     "leal	4(%2),%2\n\t"     "movl	%0,(%1)\n\t"     "leal	4(%1),%1\n\t"     "decl	%3\n\t"     "jnz	1b\n"     "2:\n\t"     "movw	(%2),%w0\n\t"     "movw	%w0,(%1)\n\t"     : "=&q" (__dummy1), "=r" (__tmp), "=&r" (__src), "=&r" (__dummy2),       "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest)     : "1" (__tmp), "2" (__src), "3" (__srclen / 2),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  (void) memset (__tmp + 2, '\0', __n - __srclen);  return __dest;}__STRING_INLINE char *__strncpy_byn (char *__dest, __const char __src[],				     size_t __srclen, size_t __n);__STRING_INLINE char *__strncpy_byn (char *__dest, __const char __src[], size_t __srclen, size_t __n){  register unsigned long int __d0, __d1;  register char *__tmp = __dest;  __asm__ __volatile__    ("cld\n\t"     "shrl	$1,%1\n\t"     "jnc	1f\n\t"     "movsb\n"     "1:\n\t"     "shrl	$1,%1\n\t"     "jnc	2f\n\t"     "movsw\n"     "2:\n\t"     "rep; movsl"     : "=D" (__tmp), "=&c" (__d0), "=&S" (__d1),       "=m" ( *(struct { __extension__ char __x[__srclen]; } *)__dest)     : "1" (__srclen), "0" (__tmp),"2" (__src),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  (void) memset (__tmp, '\0', __n - __srclen);  return __dest;}__STRING_INLINE char *__strncpy_gg (char *__dest, __const char *__src,				    size_t __n);__STRING_INLINE char *__strncpy_gg (char *__dest, __const char *__src, size_t __n){  register char *__tmp = __dest;  register char __dummy;  if (__n > 0)    __asm__ __volatile__      ("1:\n\t"       "movb	(%0),%2\n\t"       "incl	%0\n\t"       "movb	%2,(%1)\n\t"       "incl	%1\n\t"       "decl	%3\n\t"       "je	3f\n\t"       "testb	%2,%2\n\t"       "jne	1b\n\t"       "2:\n\t"       "movb	%2,(%1)\n\t"       "incl	%1\n\t"       "decl	%3\n\t"       "jne	2b\n\t"       "3:"       : "=&r" (__src), "=&r" (__tmp), "=&q" (__dummy), "=&r" (__n)       : "0" (__src), "1" (__tmp), "3" (__n)       : "memory", "cc");  return __dest;}/* Append SRC onto DEST.  */#define _HAVE_STRING_ARCH_strcat 1#define strcat(dest, src) \  (__extension__ (__builtin_constant_p (src)				      \		  ? __strcat_c ((dest), (src), strlen (src) + 1)	      \		  : __strcat_g ((dest), (src))))__STRING_INLINE char *__strcat_c (char *__dest, __const char __src[],				  size_t __srclen);__STRING_INLINE char *__strcat_c (char *__dest, __const char __src[], size_t __srclen){#ifdef __i686__  register unsigned long int __d0;  register char *__tmp;  __asm__ __volatile__    ("repne; scasb"     : "=D" (__tmp), "=&c" (__d0),       "=m" ( *(struct { char __x[0xfffffff]; } *)__dest)     : "0" (__dest), "1" (0xffffffff), "a" (0),       "m" ( *(struct { __extension__ char __x[__srclen]; } *)__src)     : "cc");  --__tmp;#else  register char *__tmp = __dest - 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -