X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Flib.c;h=369b7b0b8593848ffd3523d8fcd03bc2707c697f;hb=ae3a0bf446529bfb50eb91a0fb90b72140d9f2ed;hp=6263dc8ae00db17df6fe64c30b54fdbb234e218a;hpb=1aa76857dd6dccd56d9313552ebf63a9897866b0;p=tpg%2Facess2.git diff --git a/Kernel/lib.c b/Kernel/lib.c index 6263dc8a..369b7b0b 100644 --- a/Kernel/lib.c +++ b/Kernel/lib.c @@ -3,6 +3,7 @@ * Common Library Functions */ #include +#include // === CONSTANTS === #define RANDOM_SEED 0xACE55052 @@ -821,35 +822,29 @@ int rand(void) */ int CheckString(const char *String) { - if( !MM_GetPhysAddr( (tVAddr)String ) ) + tVAddr addr; + int bUser; + + addr = (tVAddr)String; + + if( !MM_GetPhysAddr( addr ) ) return 0; // Check 1st page - if( MM_IsUser( (tVAddr)String ) ) + bUser = MM_IsUser( addr ); + + while( *(char*)addr ) { - // Traverse String - while( *String ) + if( (addr & (PAGE_SIZE-1)) == 0 ) { - if( !MM_IsUser( (tVAddr)String ) ) + if(bUser && !MM_IsUser(addr) ) return 0; - // Increment string pointer - String ++; - } - return 1; - } - else if( MM_GetPhysAddr( (tVAddr)String ) ) - { - // Traverse String - while( *String ) - { - if( !MM_GetPhysAddr( (tVAddr)String ) ) + if(!bUser && !MM_GetPhysAddr(addr) ) return 0; - // Increment string pointer - String ++; } - return 1; + addr ++; } - return 0; + return 1; } /** @@ -858,32 +853,7 @@ int CheckString(const char *String) */ int CheckMem(const void *Mem, int NumBytes) { - tVAddr addr = (tVAddr)Mem; - - if( !MM_GetPhysAddr( addr ) ) - return 0; - - if( MM_IsUser( addr ) ) - { - while( NumBytes-- ) - { - if( !MM_IsUser( addr ) ) - return 0; - addr ++; - } - return 1; - } - else if( MM_GetPhysAddr( addr ) ) - { - while( NumBytes-- ) - { - if( !MM_GetPhysAddr( addr ) ) - return 0; - addr ++; - } - return 1; - } - return 0; + return MM_IsValidBuffer( (tVAddr)Mem, NumBytes ); } /* * * \} @@ -960,6 +930,9 @@ void *memmove(void *__dest, const void *__src, size_t len) char *dest = __dest; const char *src = __src; void *ret = __dest; + + if( len == 0 || dest == src ) + return dest; if( (tVAddr)dest > (tVAddr)src + len ) return memcpy(dest, src, len);