X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Flibc.c;h=ef944267b102b135056a4c1fe9fa33b858f4b315;hb=e4342ad9de52043cb8f820643794dc44076f9bd9;hp=bd349735d369eebe0b54d7710faa7d245113704c;hpb=11dbd684e9a3d907d43d71a3145205f1a86992fb;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/libc.c b/KernelLand/Kernel/libc.c index bd349735..ef944267 100644 --- a/KernelLand/Kernel/libc.c +++ b/KernelLand/Kernel/libc.c @@ -49,6 +49,7 @@ EXPORT(tolower); EXPORT(strucmp); EXPORT(strchr); +EXPORT(strrchr); EXPORT(strpos); EXPORT(strlen); EXPORT(strcpy); @@ -210,8 +211,8 @@ int vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args) if(pos < __maxlen) { if(__s) __s[pos] = ch; - pos ++; } + pos ++; } while((c = *__format++) != 0) @@ -529,6 +530,15 @@ char *strchr(const char *__s, int __c) return NULL; } +char *strrchr(const char *__s, int __c) +{ + size_t ofs = strlen(__s); + while(--ofs && __s[ofs] != __c); + if( __s[ofs] == __c ) + return (char*)__s + ofs; + return NULL; +} + /** * \fn int strpos(const char *Str, char Ch) * \brief Search a string for an ascii character @@ -688,7 +698,6 @@ int rand(void) void *memmove(void *__dest, const void *__src, size_t len) { - size_t block_size; char *dest = __dest; const char *src = __src; void *ret = __dest; @@ -705,6 +714,8 @@ void *memmove(void *__dest, const void *__src, size_t len) if( (tVAddr)dest < (tVAddr)src ) return memcpy(dest, src, len); + #if 0 + size_t block_size; if( (tVAddr)dest < (tVAddr)src ) block_size = (tVAddr)src - (tVAddr)dest; else @@ -721,6 +732,13 @@ void *memmove(void *__dest, const void *__src, size_t len) } memcpy(dest, src, len); return ret; + #else + for( int i = len; i--; ) + { + dest[i] = src[i]; + } + return ret; + #endif } @@ -739,7 +757,7 @@ int CheckString(const char *String) addr = (tVAddr)String; - if( !MM_GetPhysAddr( addr ) ) + if( !MM_GetPhysAddr( (void*)addr ) ) return 0; // Check 1st page @@ -751,7 +769,7 @@ int CheckString(const char *String) { if(bUser && !MM_IsUser(addr) ) return 0; - if(!bUser && !MM_GetPhysAddr(addr) ) + if(!bUser && !MM_GetPhysAddr((void*)addr) ) return 0; } addr ++;