?? string.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.. */#include <linux/types.h>#include <linux/string.h>#include <malloc.h>#define __HAVE_ARCH_BCOPY#define __HAVE_ARCH_MEMCMP#define __HAVE_ARCH_MEMCPY#define __HAVE_ARCH_MEMMOVE#define __HAVE_ARCH_MEMSET#define __HAVE_ARCH_STRCAT#define __HAVE_ARCH_STRCMP#define __HAVE_ARCH_STRCPY#define __HAVE_ARCH_STRLEN#define __HAVE_ARCH_STRNCPYchar * ___strtok = NULL;#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) { *dest = '\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_STRRCHRchar * strrchr(const char * s, int c){ const char *p = s + strlen(s); do { if (*p == (char)c) return (char *)p; } while (--p >= s); return NULL;}#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_STRDUPchar * strdup(const char *s){ char *new; if ((s == NULL) || ((new = malloc (strlen(s) + 1)) == NULL) ) { return NULL; } strcpy (new, s); return new;}#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 + -