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

📄 string.c

📁 minimal python variant for small footprint apps like embedded apps
💻 C
字号:
/* *  linux/lib/string.c * *  Copyright (C) 1991, 1992  Linus Torvalds *//* * stupid library routines.. The optimized versions should generally be found * as inline code in <asm-xx/string.h> * * These are buggy as well.. *//* Adapted for the use in the 332 kernel  * D. Jeff Dionne, 1995. *//* Additional hole filled: strtol * M. Schlifer, NOV 1995.*/#include <sys/types.h>#include <string.h>#include <ctype.h>char * ___strtok = NULL;#ifndef __HAVE_ARCH_STRTOULunsigned long strtoul(const char *cp,char **endp,unsigned int base){  unsigned long result = 0,value;    if (!base) {    base = 10;    if (*cp == '0') {      base = 8;      cp++;      if ((*cp == 'x') && isxdigit(cp[1])) {	cp++;	base = 16;      }    }  }  while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp) ? toupper(*cp) : *cp)-'A'+10) < base) {    result = result*base + value;    cp++;  }  if (endp)    *endp = (char *)cp;  return result;}#endif#ifndef __HAVE_ARCH_STRTOLsigned long strtol(const char *cp,char **endp,unsigned int base){  signed long sign;  signed long result = 0,value;  if (!isdigit(*cp))    {      if ((*cp) == '-')	sign = -1;      else	sign = 1;      cp++;    }  else sign = 1;  if (!base) {    base = 10;    if (*cp == '0') {      base = 8;      cp++;      if ((*cp == 'x') && isxdigit(cp[1])) {	cp++;	base = 16;      }    }  }  while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)							     ? toupper(*cp) : *cp)-'A'+10) < base) {    result = result*base + value;    cp++;  }  if (endp)    *endp = (char *)cp;  return (result * sign);}#endif#ifndef __HAVE_ARCH_STRCPYchar * strcpy(char * dest,const char *src){  char *tmp = dest;    while ((*dest++ = *src++) != '\0')    /* nothing */;  return tmp;}#endif#ifndef __HAVE_ARCH_STRNCPYchar * strncpy(char * dest,const char *src,size_t count){  char *tmp = dest;    while (count-- && (*dest++ = *src++) != '\0')    /* nothing */;    return tmp;}#endif#ifndef __HAVE_ARCH_STRCATchar * strcat(char * dest, const char * src){  char *tmp = dest;    while (*dest)    dest++;  while ((*dest++ = *src++) != '\0');  return tmp;}#endif#ifndef __HAVE_ARCH_STRNCATchar * strncat(char *dest, const char *src, size_t count){  char *tmp = dest;    if (count) {    while (*dest)      dest++;    while ((*dest++ = *src++)) {      if (--count == 0)	break;    }  }    return tmp;}#endif#ifndef __HAVE_ARCH_STRCMPint strcmp(const char * cs,const char * ct){  register signed char __res;    while (1) {    if ((__res = *cs - *ct++) != 0 || !*cs++)      break;  }    return __res;}#endif#ifndef __HAVE_ARCH_STRNCMPint strncmp(const char * cs,const char * ct,size_t count){  register signed char __res = 0;    while (count) {    if ((__res = *cs - *ct++) != 0 || !*cs++)      break;    count--;  }    return __res;}#endif#ifndef __HAVE_ARCH_STRCHRchar * strchr(const char * s, int c){  for(; *s != (char) c; ++s)    if (*s == '\0')      return NULL;  return (char *) s;}#endif#ifndef __HAVE_ARCH_STRLENsize_t strlen(const char * s){  const char *sc;    for (sc = s; *sc != '\0'; ++sc)    /* nothing */;  return sc - s;}#endif#ifndef __HAVE_ARCH_STRNLENsize_t strnlen(const char * s, size_t count){  const char *sc;    for (sc = s; count-- && *sc != '\0'; ++sc)    /* nothing */;  return sc - s;}#endif#ifndef __HAVE_ARCH_STRSPNsize_t strspn(const char *s, const char *accept){  const char *p;  const char *a;  size_t count = 0;    for (p = s; *p != '\0'; ++p) {    for (a = accept; *a != '\0'; ++a) {      if (*p == *a)	break;    }    if (*a == '\0')      return count;    ++count;  }  return count;}#endif#ifndef __HAVE_ARCH_STRPBRKchar * strpbrk(const char * cs,const char * ct){  const char *sc1,*sc2;    for( sc1 = cs; *sc1 != '\0'; ++sc1) {    for( sc2 = ct; *sc2 != '\0'; ++sc2) {      if (*sc1 == *sc2)	return (char *) sc1;    }  }  return NULL;}#endif#ifndef __HAVE_ARCH_STRTOKchar * strtok(char * s,const char * ct){  char *sbegin, *send;    sbegin  = s ? s : ___strtok;  if (!sbegin) {    return NULL;  }  sbegin += strspn(sbegin,ct);  if (*sbegin == '\0') {    ___strtok = NULL;    return( NULL );  }  send = strpbrk( sbegin, ct);  if (send && *send != '\0')    *send++ = '\0';  ___strtok = send;  return (sbegin);}#endif#ifndef __HAVE_ARCH_MEMSETvoid * memset(void * s,char c,size_t count){  char *xs = (char *) s;  while (count--)    *xs++ = c;    return s;}#endif#ifndef __HAVE_ARCH_BCOPYchar * bcopy(const char * src, char * dest, int count){  char *tmp = dest;    while (count--)    *tmp++ = *src++;    return dest;}#endif#ifndef __HAVE_ARCH_MEMCPYvoid * memcpy(void * dest,const void *src,size_t count){  char *tmp = (char *) dest, *s = (char *) src;    while (count--)    *tmp++ = *s++;    return dest;}#endif#ifndef __HAVE_ARCH_MEMMOVEvoid * memmove(void * dest,const void *src,size_t count){  char *tmp, *s;  if (dest <= src) {    tmp = (char *) dest;    s = (char *) src;    while (count--)      *tmp++ = *s++;  }  else {    tmp = (char *) dest + count;    s = (char *) src + count;    while (count--)      *--tmp = *--s;  }    return dest;}#endif#ifndef __HAVE_ARCH_MEMCMPint memcmp(const void * cs,const void * ct,size_t count){  const unsigned char *su1, *su2;  signed char res = 0;    for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)    if ((res = *su1 - *su2) != 0)      break;  return res;}#endif/* * find the first occurrence of byte 'c', or 1 past the area if none */#ifndef __HAVE_ARCH_MEMSCANvoid * memscan(void * addr, int c, size_t size){  unsigned char * p = (unsigned char *) addr;  while (size) {    if (*p == c)      return (void *) p;    p++;    size--;  }  return (void *) p;}#endif#ifndef __HAVE_ARCH_STRSTRchar * strstr(const char * s1,const char * s2){  int l1, l2;    l2 = strlen(s2);  if (!l2)    return (char *) s1;  l1 = strlen(s1);  while (l1 >= l2) {    l1--;    if (!memcmp(s1,s2,l2))      return (char *) s1;    s1++;  }  return NULL;}#endif

⌨️ 快捷键说明

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