/**
* \brief Check if a sized memory region is valid memory
+ * \return Boolean success
*/
int CheckMem(const void *Mem, int NumBytes)
{
tVAddr addr = (tVAddr)Mem;
+
+ if( !MM_GetPhysAddr( addr ) )
+ return 0;
if( MM_IsUser( addr ) )
{
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);
if( (tVAddr)dest + len < (tVAddr)src )
return memcpy(dest, src, len);
+ // NOTE: Assumes memcpy works forward
+ if( (tVAddr)dest < (tVAddr)src )
+ return memcpy(dest, src, len);
+
if( (tVAddr)dest < (tVAddr)src )
block_size = (tVAddr)src - (tVAddr)dest;
else