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

📄 string2.h

📁 它通过提供glibc兼容使得应用程序移植到较小的c 库时相当得容易. 它能够应用到带虚拟存储的Linux和uClinux上.在大多数带MMU部件的平台上为使它更加紧凑,它也能够编译成共享库.uClib
💻 H
📖 第 1 页 / 共 3 页
字号:
{  union {    __uint32_t __ui;    __uint16_t __usi;    unsigned char __uc;  } *__u = (void *) __dest;  switch ((unsigned int) __srclen)    {    case 1:      __u->__uc = '\0';      break;    case 2:      __u->__usi = __src0_2;      break;    case 3:      __u->__usi = __src0_2;      __u = __extension__ (void *)((char *) __u + 2);      __u->__uc = '\0';      break;    case 4:      __u->__ui = __src0_4;      break;    case 5:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__uc = '\0';      break;    case 6:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__usi = __src4_2;      break;    case 7:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__usi = __src4_2;      __u = __extension__ (void *)((char *) __u + 2);      __u->__uc = '\0';      break;    case 8:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__ui = __src4_4;      break;    }  return __dest;}# else#  ifndef _FORCE_INLINES#   define __strcpy_args(src) \     __extension__ ((__STRING2_COPY_ARR2)				      \      { { ((__const char *) (src))[0], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR3)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR4)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR5)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR6)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR7)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], ((__const char *) (src))[5],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR8)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], ((__const char *) (src))[5],	      \	  ((__const char *) (src))[6], '\0' } })#  endif__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2,				      __STRING2_COPY_ARR3,				      __STRING2_COPY_ARR4,				      __STRING2_COPY_ARR5,				      __STRING2_COPY_ARR6,				      __STRING2_COPY_ARR7,				      __STRING2_COPY_ARR8, size_t);__STRING_INLINE char *__strcpy_small (char *__dest,		__STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,		__STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,		__STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,		__STRING2_COPY_ARR8 __src8, size_t __srclen){  union {    char __c;    __STRING2_COPY_ARR2 __sca2;    __STRING2_COPY_ARR3 __sca3;    __STRING2_COPY_ARR4 __sca4;    __STRING2_COPY_ARR5 __sca5;    __STRING2_COPY_ARR6 __sca6;    __STRING2_COPY_ARR7 __sca7;    __STRING2_COPY_ARR8 __sca8;  } *__u = (void *) __dest;  switch ((unsigned int) __srclen)    {    case 1:      __u->__c = '\0';      break;    case 2:      __extension__ __u->__sca2 = __src2;      break;    case 3:      __extension__ __u->__sca3 = __src3;      break;    case 4:      __extension__ __u->__sca4 = __src4;      break;    case 5:      __extension__ __u->__sca5 = __src5;      break;    case 6:      __extension__ __u->__sca6 = __src6;      break;    case 7:      __extension__ __u->__sca7 = __src7;      break;    case 8:      __extension__ __u->__sca8 = __src8;      break;  }  return __dest;}# endif#endif/* Copy SRC to DEST, returning pointer to final NUL byte.  */#ifdef __USE_GNU# if !defined _HAVE_STRING_ARCH_stpcpy || defined _FORCE_INLINES#  ifndef _HAVE_STRING_ARCH_stpcpy#   if __GNUC_PREREQ (3, 0)#    define __stpcpy(dest, src) \  (__extension__ (__builtin_constant_p (src)				      \		  ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8	      \		     ? __builtin_strcpy (dest, src) + strlen (src)	      \		     : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \			- 1))						      \		  : __stpcpy (dest, src)))#   else#    define __stpcpy(dest, src) \  (__extension__ (__builtin_constant_p (src)				      \		  ? (__string2_1bptr_p (src) && strlen (src) + 1 <= 8	      \		     ? __stpcpy_small (dest, __stpcpy_args (src),	      \				       strlen (src) + 1)		      \		     : ((char *) (__mempcpy) (dest, src, strlen (src) + 1)    \			- 1))						      \		  : __stpcpy (dest, src)))#   endif/* In glibc we use this function frequently but for namespace reasons   we have to use the name `__stpcpy'.  */#   define stpcpy(dest, src) __stpcpy (dest, src)#  endif#  if !__GNUC_PREREQ (3, 0) || defined _FORCE_INLINES#   if _STRING_ARCH_unaligned#    ifndef _FORCE_INLINES#     define __stpcpy_args(src) \     __extension__ __STRING2_SMALL_GET16 (src, 0),			      \     __extension__ __STRING2_SMALL_GET16 (src, 4),			      \     __extension__ __STRING2_SMALL_GET32 (src, 0),			      \     __extension__ __STRING2_SMALL_GET32 (src, 4)#    endif__STRING_INLINE char *__stpcpy_small (char *, __uint16_t, __uint16_t,				      __uint32_t, __uint32_t, size_t);__STRING_INLINE char *__stpcpy_small (char *__dest,		__uint16_t __src0_2, __uint16_t __src4_2,		__uint32_t __src0_4, __uint32_t __src4_4,		size_t __srclen){  union {    unsigned int __ui;    unsigned short int __usi;    unsigned char __uc;    char __c;  } *__u = (void *) __dest;  switch ((unsigned int) __srclen)    {    case 1:      __u->__uc = '\0';      break;    case 2:      __u->__usi = __src0_2;      __u = __extension__ (void *)((char *) __u + 1);      break;    case 3:      __u->__usi = __src0_2;      __u = __extension__ (void *)((char *) __u + 2);      __u->__uc = '\0';      break;    case 4:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 3);      break;    case 5:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__uc = '\0';      break;    case 6:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__usi = __src4_2;      __u = __extension__ (void *)((char *) __u + 1);      break;    case 7:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__usi = __src4_2;      __u = __extension__ (void *)((char *) __u + 2);      __u->__uc = '\0';      break;    case 8:      __u->__ui = __src0_4;      __u = __extension__ (void *)((char *) __u + 4);      __u->__ui = __src4_4;      __u = __extension__ (void *)((char *) __u + 3);      break;    }  return &__u->__c;}#   else#    ifndef _FORCE_INLINES#     define __stpcpy_args(src) \     __extension__ ((__STRING2_COPY_ARR2)				      \      { { ((__const char *) (src))[0], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR3)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR4)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR5)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR6)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], '\0' } }),			      \     __extension__ ((__STRING2_COPY_ARR7)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], ((__const char *) (src))[5],	      \	  '\0' } }),							      \     __extension__ ((__STRING2_COPY_ARR8)				      \      { { ((__const char *) (src))[0], ((__const char *) (src))[1],	      \	  ((__const char *) (src))[2], ((__const char *) (src))[3],	      \	  ((__const char *) (src))[4], ((__const char *) (src))[5],	      \	  ((__const char *) (src))[6], '\0' } })#    endif__STRING_INLINE char *__stpcpy_small (char *, __STRING2_COPY_ARR2,				      __STRING2_COPY_ARR3,				      __STRING2_COPY_ARR4,				      __STRING2_COPY_ARR5,				      __STRING2_COPY_ARR6,				      __STRING2_COPY_ARR7,				      __STRING2_COPY_ARR8, size_t);__STRING_INLINE char *__stpcpy_small (char *__dest,		__STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,		__STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,		__STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,		__STRING2_COPY_ARR8 __src8, size_t __srclen){  union {    char __c;    __STRING2_COPY_ARR2 __sca2;    __STRING2_COPY_ARR3 __sca3;    __STRING2_COPY_ARR4 __sca4;    __STRING2_COPY_ARR5 __sca5;    __STRING2_COPY_ARR6 __sca6;    __STRING2_COPY_ARR7 __sca7;    __STRING2_COPY_ARR8 __sca8;  } *__u = (void *) __dest;  switch ((unsigned int) __srclen)    {    case 1:      __u->__c = '\0';      break;    case 2:      __extension__ __u->__sca2 = __src2;      break;    case 3:      __extension__ __u->__sca3 = __src3;      break;    case 4:      __extension__ __u->__sca4 = __src4;      break;    case 5:      __extension__ __u->__sca5 = __src5;      break;    case 6:      __extension__ __u->__sca6 = __src6;      break;    case 7:      __extension__ __u->__sca7 = __src7;      break;    case 8:      __extension__ __u->__sca8 = __src8;      break;  }  return __dest + __srclen - 1;}#   endif#  endif# endif#endif/* Copy no more than N characters of SRC to DEST.  */#ifndef _HAVE_STRING_ARCH_strncpy# if defined _USE_STRING_ARCH_memset && defined _USE_STRING_ARCH_mempcpy#  define strncpy(dest, src, n) \  (__extension__ ({ char *__dest = (dest);				      \		    __builtin_constant_p (src) && __builtin_constant_p (n)    \		    ? (strlen (src) + 1 >= ((size_t) (n))		      \		       ? (char *) memcpy (__dest, src, n)		      \		       : (memset (__mempcpy (__dest, src, strlen (src)),      \				  '\0', n - strlen (src)),		      \			  __dest))					      \		    : strncpy (__dest, src, n); }))# else#  define strncpy(dest, src, n) \  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \		  ? (strlen (src) + 1 >= ((size_t) (n))			      \		     ? (char *) memcpy (dest, src, n)			      \		     : strncpy (dest, src, n))				      \		  : strncpy (dest, src, n)))# endif#endif/* Append no more than N characters from SRC onto DEST.  */#ifndef _HAVE_STRING_ARCH_strncat# ifdef _USE_STRING_ARCH_strchr#  define strncat(dest, src, n) \  (__extension__ ({ char *__dest = (dest);				      \		    __builtin_constant_p (src) && __builtin_constant_p (n)    \		    ? (strlen (src) < ((size_t) (n))			      \		       ? strcat (__dest, src)				      \		       : (*((char *) __mempcpy (strchr (__dest, '\0'),	      \						src, n)) = '\0', __dest))     \		    : strncat (dest, src, n); }))# else#  define strncat(dest, src, n) \  (__extension__ (__builtin_constant_p (src) && __builtin_constant_p (n)      \		  ? (strlen (src) < ((size_t) (n))			      \		     ? strcat (dest, src)				      \		     : strncat (dest, src, n))				      \		  : strncat (dest, src, n)))# endif#endif/* Compare characters of S1 and S2.  */#ifndef _HAVE_STRING_ARCH_strcmp# define strcmp(s1, s2) \  __extension__								      \  ({ size_t __s1_len, __s2_len;						      \     (__builtin_constant_p (s1) && __builtin_constant_p (s2)		      \      && (__s1_len = strlen (s1), __s2_len = strlen (s2),		      \	  (!__string2_1bptr_p (s1) || __s1_len >= 4)			      \	  && (!__string2_1bptr_p (s2) || __s2_len >= 4))		      \      ? memcmp ((__const char *) (s1), (__const char *) (s2),		      \		(__s1_len < __s2_len ? __s1_len : __s2_len) + 1)	      \      : (__builtin_constant_p (s1) && __string2_1bptr_p (s1)		      \	 && (__s1_len = strlen (s1), __s1_len < 4)			      \	 ? (__builtin_constant_p (s2) && __string2_1bptr_p (s2)		      \	    ? __strcmp_cc (s1, s2, __s1_len)				      \	    : __strcmp_cg (s1, s2, __s1_len))				      \	 : (__builtin_constant_p (s2) && __string2_1bptr_p (s2)		      \	    && (__s2_len = strlen (s2), __s2_len < 4)			      \	    ? (__builtin_constant_p (s1) && __string2_1bptr_p (s1)	      \	       ? __strcmp_cc (s1, s2, __s2_len)				      \	       : __strcmp_gc (s1, s2, __s2_len))			      \	    : strcmp (s1, s2)))); })# define __strcmp_cc(s1, s2, l) \  (__extension__ ({ register int __result =				      \		      (((__const unsigned char *) (__const char *) (s1))[0]   \		       - ((__const unsigned char *) (__const char *)(s2))[0]);\		    if (l > 0 && __result == 0)				      \		      {							      \			__result = (((__const unsigned char *)		      \				     (__const char *) (s1))[1]		      \				    - ((__const unsigned char *)	      \				       (__const char *) (s2))[1]);	      \			if (l > 1 && __result == 0)			      \			  {						      \			    __result =					      \			      (((__const unsigned char *)		      \				(__const char *) (s1))[2]		      \			       - ((__const unsigned char *)		      \				  (__const char *) (s2))[2]);		      \			    if (l > 2 && __result == 0)			      \			      __result =				      \				(((__const unsigned char *)		      \				  (__const char *) (s1))[3]		      \				 - ((__const unsigned char *)		      \				    (__const char *) (s2))[3]);		      \			  }						      \		      }							      \		    __result; }))# define __strcmp_cg(s1, s2, l1) \  (__extension__ ({ __const unsigned char *__s2 =			      \		      (__const unsigned char *) (__const char *) (s2);	      \		    register int __result =				      \		      (((__const unsigned char *) (__const char *) (s1))[0]   \		       - __s2[0]);					      \		    if (l1 > 0 && __result == 0)			      \		      {							      \			__result = (((__const unsigned char *)		      \

⌨️ 快捷键说明

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