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

📄 string.cc

📁 a linux like c++ kernel
💻 CC
字号:
#include <lib/root.h>#include <init/ctor.h>#include <mm/allocpage.h>#include "string.h"extern "C" char * strcpy(char * dst, const char *src){        char *ret = dst;        while (*dst++ = *src++)                ;        return ret;}extern "C" char * strncpy(char *dst, const char *src, size_t n){        char *ret = dst;        for (; n--; )                if (!(*dst++ = *src++))                        return ret;        return ret;}extern "C" char * strcat(char *dst, const char * src){        char *ret = dst;        while (*dst++)                ;        dst--;        while (*dst++ = *src++)                ;        return ret; }int strlen(const char *s){        const char *t = s;        while (*t++)                ;        return t - 1 - s;}extern "C" char * strchr(const char *s, int c){        for (; *s; s++)                if (*s == c)                        return (char*)s;        return NULL;}extern "C" char * strrchr(const char *s, int c){        char * r = (char*)s;        while (*r++)                ;        r -= 2;        for (; r >= s; r--)                if (*r == c)                        return r;        return NULL;}extern "C" char * strncat(char *dst, const char * src, size_t n){        allege(0);        return NULL;}extern "C" int strcmp(const char *src, const char * dst){        while (*src && *dst && *src == *dst)                src++, dst++;        return *src - *dst;}extern "C" int strncmp(const char *src, const char * dst, size_t n){        allege(0);        return 0;}extern "C" void * memmove(void * dst, const void * src, size_t n){        void * ret = dst;	char *d = (char*) dst;	char *s = (char*) src;        if (d <= s) {                while (n--)                        *d++ = *s++;                return ret;        }        d += n;        s += n;        while (n--)                *--d = *--s;         return ret;}extern "C" void memset(void *ptr, int v, size_t n){	char *p = (char*) ptr;        while (n--)                *p++ = v;}extern "C" void memcpy(void *dst, const void *src, size_t n){	char *d = (char*) dst;	char *s = (char*) src;        while (n--)                *d++ = *s++;}static int toknum(char * str, const char * sep){	int state = 0, sum = 0;	for (; *str; str++) {		char * issep = strchr(sep, *str);		if (issep)			*str = 0;		if (state == 0) {			if (!issep)				sum++, state = 1;		} else {			if (issep)				state = 0;		}	}	return sum;}scanstr_t::scanstr_t(const char * str, const char * sep){	int len = strlen(str);	if (len < SIZE) {		bigroom = NULL;		cur = smallroom;		eroom = smallroom + len;	} else if (len < PAGESIZE) {		bigroom = (char*) allocpage(AKERN);		cur = bigroom;		eroom = bigroom + len;	} else {		warn("TOO LONG:%s", str);		return;	}	strcpy(cur, str);	nlefttok_ = toknum(cur, sep);	skipsep();}scanstr_t::~scanstr_t(){	if (bigroom)		freepage(bigroom);}scanstrprev_t::scanstrprev_t(const char * str, const char * sep){	int len = strlen(str);	char * c;	if (len < SIZE) {		bigroom = NULL;		eroom = smallroom - 1;		cur = smallroom + len;		c = smallroom;	} else if (len < PAGESIZE) {		bigroom = (char*) allocpage(AKERN);		eroom = bigroom - 1;		cur = bigroom + len;		c = bigroom;	} else {		warn("TOO LONG:%s", str);		return;	}	strcpy(c, str);	nlefttok_ = toknum(c, sep);	skipsep();		movetotokhead();}scanstrprev_t::~scanstrprev_t(){	if (bigroom)		freepage(bigroom);}#if 0__ctor(PRIKERN, SUBANY, jf){	char * tok; 	char * test = "::/bin:/sbin::/usr/bin:";	foreachtok(tok, test, ":")		printf("count==%d, tok==%s\n", scan.nlefttok(), tok);	scanstrprev_t s(test, ":");	while (s.more()) {		tok = s.curtok();		printf("count==%d, tok==%s\n", s.nlefttok(), tok);		s.prev();	}}#endif

⌨️ 快捷键说明

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