From 6a4f7773408569fe0620de914249bd28f7c90486 Mon Sep 17 00:00:00 2001 From: ngiddings Date: Sat, 10 Apr 2021 20:15:23 -0500 Subject: [PATCH] Created string.h header; moved code to string.c --- include/string.h | 15 +++++ src/string.c | 110 +++++++++++++++++++++++++++++++ src/util.cpp | 165 ----------------------------------------------- src/util.hpp | 56 ---------------- 4 files changed, 125 insertions(+), 221 deletions(-) create mode 100644 include/string.h create mode 100644 src/string.c delete mode 100644 src/util.cpp delete mode 100644 src/util.hpp diff --git a/include/string.h b/include/string.h new file mode 100644 index 0000000..459eea8 --- /dev/null +++ b/include/string.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +void *memcpy(void *destination, const void *source, size_t num); + +void *memmove(void *destination, const void *source, size_t num); + +int memcmp(const void *ptr1, const void *ptr2, size_t num); + +void *memset(void *ptr, int value, size_t num); + +int strlen(const char *str); + +char *strcpy(char *destination, const char *source); diff --git a/src/string.c b/src/string.c new file mode 100644 index 0000000..4dd71ab --- /dev/null +++ b/src/string.c @@ -0,0 +1,110 @@ +#include "string.h" +#include +#include + +void *memcpy(void *destination, const void *source, size_t num) +{ + if (num > 0) + { + const uint8_t *src = (const uint8_t *)source; + uint8_t *dest = (uint8_t *)destination; + for (size_t i = 0; i < num; i++) + { + dest[i] = src[i]; + } + } + return destination; +} + +void *memmove(void *destination, const void *source, size_t num) +{ + if (num > 0) + { + if (((size_t)destination) < ((size_t)source) || ((size_t)destination) >= (((size_t)source)) + num) + { + return memcpy(destination, source, num); + } + else if (destination != source) + { + size_t i = num - 1; + const uint8_t *src = (const uint8_t *)source; + uint8_t *dest = (uint8_t *)destination; + do + { + dest[i] = src[i]; + i--; + } while (i != 0); + } + } + return destination; +} + +int memcmp(const void *ptr1, const void *ptr2, size_t num) +{ + const uint8_t *a = (const uint8_t *)ptr1; + const uint8_t *b = (const uint8_t *)ptr2; + for (size_t i = 0; i < num; i++) + { + if (a[i] < b[i]) + return -1; + else if (a[i] > b[i]) + return 1; + } + return 0; +} + +void *memset(void *ptr, int value, size_t num) +{ + uint8_t *dest = (uint8_t *)ptr; + uint8_t v = (uint8_t)value; + for (size_t i = 0; i < num; i++) + { + dest[i] = v; + } + return ptr; +} + +int strlen(const char *str) +{ + int i = 0; + while (str[i] != '\0') + { + i++; + } + return i; +} + +char *strcpy(char *destination, const char *source) +{ + int sourceLen = strlen(source); + if ((destination <= source) || (destination > (source + sourceLen))) + { + char *d = destination; + const char *s = source; + while (true) + { + *d = *s; + if (*s == '\0') + { + break; + } + else + { + s++; + d++; + } + } + } + else + { + char *d = destination + sourceLen; + const char *s = source + sourceLen; + do + { + *d = *s; + d--; + s--; + } while (d > destination); + } + return destination; +} diff --git a/src/util.cpp b/src/util.cpp deleted file mode 100644 index 1256dbc..0000000 --- a/src/util.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include - -#include "util.hpp" -#include "kernel.hpp" - -void* memcpy(void* destination, const void* source, size_t num) -{ - if(num > 0) - { - const uint8_t* src = (const uint8_t*) source; - uint8_t* dest = (uint8_t*) destination; - for(size_t i = 0; i < num; i++) - { - dest[i] = src[i]; - } - } - return destination; -} - -void* memmove(void* destination, const void* source, size_t num) -{ - if(num > 0) - { - if(((size_t) destination) < ((size_t) source) || ((size_t) destination) >= (((size_t) source)) + num) - { - return memcpy(destination, source, num); - } - else if(destination != source) - { - size_t i = num - 1; - const uint8_t* src = (const uint8_t*) source; - uint8_t* dest = (uint8_t*) destination; - do - { - dest[i] = src[i]; - i--; - } while(i != 0); - } - } - return destination; -} - -int memcmp(const void* ptr1, const void* ptr2, size_t num) -{ - const uint8_t* a = (const uint8_t*) ptr1; - const uint8_t* b = (const uint8_t*) ptr2; - for(size_t i = 0; i < num; i++) - { - if(a[i] < b[i]) - return -1; - else if(a[i] > b[i]) - return 1; - } - return 0; -} - -void* memset(void* ptr, int value, size_t num) -{ - uint8_t* dest = (uint8_t*) ptr; - uint8_t v = (uint8_t) value; - for(size_t i = 0; i < num; i++) - { - dest[i] = v; - } - return ptr; -} - -int strlen(const char* str) -{ - int i = 0; - while(str[i] != '\0') - { - i++; - } - return i; -} - -char* strcpy(char* destination, const char* source) -{ - int sourceLen = strlen(source); - if((destination <= source) || (destination > (source + sourceLen))) - { - char* d = destination; - const char* s = source; - while(true) - { - *d = *s; - if(*s == '\0') - { - break; - } - else - { - s++; - d++; - } - } - } - else - { - char* d = destination + sourceLen; - const char* s = source + sourceLen; - do - { - *d = *s; - d--; - s--; - } while(d > destination); - } - return destination; -} - -void* malloc(size_t size) -{ - return kernel.malloc(size); -} - -void* calloc(size_t count, size_t size) -{ - void* ptr = malloc(count * size); - if(ptr != nullptr) - memset(malloc(count * size), 0, count * size); - return ptr; -} - -void* realloc(void* ptr, size_t size) -{ - void* n = kernel.malloc(size); - if(n != nullptr) - { - memmove(n, ptr, size); - free(ptr); - } - return n; -} - -void free(void* p) -{ - kernel.free(p); -} - -void __cxa_pure_virtual() -{ - // do nothing -} - -void* operator new(size_t size) -{ - return malloc(size); -} - -void* operator new[](size_t size) -{ - return malloc(size); -} - -void operator delete(void* p) -{ - free(p); -} - -void operator delete[](void* p) -{ - free(p); -} \ No newline at end of file diff --git a/src/util.hpp b/src/util.hpp deleted file mode 100644 index d82bcf5..0000000 --- a/src/util.hpp +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef UTIL_H -#define UTIL_H - -#include - -extern "C" void* memcpy(void* destination, const void* source, size_t num); - -extern "C" void* memmove(void* destination, const void* source, size_t num); - -extern "C" int memcmp(const void* ptr1, const void* ptr2, size_t num); - -extern "C" void* memset(void* ptr, int value, size_t num); - -extern "C" int strlen(const char* str); - -extern "C" char* strcpy(char* destination, const char* source); - -extern "C" void* malloc(size_t size); - -extern "C" void* calloc(size_t count, size_t size); - -extern "C" void* realloc(void* ptr, size_t size); - -extern "C" void free(void* p); - -extern "C" void __cxa_pure_virtual(); - -void* operator new(size_t size); - -void* operator new[](size_t size); - -void operator delete(void* p); - -void operator delete[](void* p); - -inline void* operator new(size_t, void *p) -{ - return p; -} - -inline void* operator new[](size_t, void *p) -{ - return p; -} - -inline void operator delete(void *, void *) -{ - -} - -inline void operator delete[](void *, void *) -{ - -} - -#endif \ No newline at end of file