diff --git a/cutil.c b/cutil.c index 88ee079..4c8c170 100644 --- a/cutil.c +++ b/cutil.c @@ -24,3 +24,21 @@ void cutil_init() void cutil_exit() { } + +const void* cu_memtest(const void* mem, uint size) +{ + unsigned i; + for (i = 0; i < size / sizeof(uword); i++) + { + if (*(uword*)mem) return mem; + *(uword*)mem++; + } + + for (i = 0; i < size % sizeof(uword); i++) + { + if (*(uint8_t*)mem) return mem; + *(uint8_t*)mem++; + } + + return NULL; +} diff --git a/cutil.h b/cutil.h index acf1998..14de1cb 100644 --- a/cutil.h +++ b/cutil.h @@ -21,4 +21,6 @@ extern void* (*cu_memmove)(void*,const void*,size_t); void cutil_init(); void cutil_exit(); +const void* cu_memtest(const void* mem, uint size); + #endif \ No newline at end of file diff --git a/test.c b/test.c index 3fa5b16..4608c3c 100644 --- a/test.c +++ b/test.c @@ -101,6 +101,10 @@ int main() printf("[cutil]\n"); printf("cutil_arch\t%u\n", CU_ARCH); + uint64_t val1 = 0; + printf("val1\t%u\tcu_memtest\t%p\n", val1, cu_memtest(&val1, sizeof(val1))); + char val2[] = {0,0,0,1,0,0,0,0,0,0,4,0,0}; + printf("val2\tcu_memtest\t%p\n", cu_memtest(val2, sizeof(val2))); printf("[endian]\n"); printf("cutil_endian\t%u\n", cu_endian);