move string things to string.hpp

This commit is contained in:
2023-10-21 18:05:09 +02:00
parent d0343e69b3
commit 65a118a68b
6 changed files with 106 additions and 74 deletions

View File

@@ -8,6 +8,8 @@
#include "serial.hpp"
#include "task.hpp"
#include "string.hpp"
struct HeapEntry *KERN_HeapBegin;
uintptr_t KERN_HeapEnd;// Past the end
@@ -298,70 +300,4 @@ void *krealloc(void *addr, size_t newsize) {
kfree(addr);
return newt;
}
void *memcpy(void *dest, const void *src, size_t n) {
uint8_t *pdest = (uint8_t *) dest;
const uint8_t *psrc = (const uint8_t *) src;
for (size_t i = 0; i < n; i++) {
pdest[i] = psrc[i];
}
return dest;
}
void *memset(void *s, int c, size_t n) {
uint8_t *p = (uint8_t *) s;
for (size_t i = 0; i < n; i++) {
p[i] = (uint8_t) c;
}
return s;
}
void *memmove(void *dest, const void *src, size_t n) {
uint8_t *pdest = (uint8_t *) dest;
const uint8_t *psrc = (const uint8_t *) src;
if (src > dest) {
for (size_t i = 0; i < n; i++) {
pdest[i] = psrc[i];
}
} else if (src < dest) {
for (size_t i = n; i > 0; i--) {
pdest[i - 1] = psrc[i - 1];
}
}
return dest;
}
int memcmp(const void *s1, const void *s2, size_t n) {
const uint8_t *p1 = (const uint8_t *) s1;
const uint8_t *p2 = (const uint8_t *) s2;
for (size_t i = 0; i < n; i++) {
if (p1[i] != p2[i]) {
return p1[i] < p2[i] ? -1 : 1;
}
}
return 0;
}
uint64_t strlen(char *str) {
uint64_t res = 0;
while (*(str++) != '\0') res++;
return res;
}
void strcpy(const char *src, char *dst) {
int i = 0;
while (src[i] != '\0') {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}

View File

@@ -4,13 +4,6 @@
#include <stddef.h>
#include <stdint.h>
void *memcpy(void *dest, const void *src, size_t n);
void *memset(void *s, int c, size_t n);
void *memmove(void *dest, const void *src, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
uint64_t strlen(char *str);
void strcpy(const char *src, char *dst);
#define KERN_HeapVirtBegin (0xffffc00000000000ULL)
#define KERN_HeapMagicFree 0xDEDE
#define KERN_HeapMagicTaken 0xADAD

View File

@@ -6,7 +6,7 @@
#include <stddef.h>
#include "kmem.hpp"
#include "string.hpp"
static volatile struct limine_framebuffer_request framebuffer_request = {
.id = LIMINE_FRAMEBUFFER_REQUEST,

View File

@@ -6,6 +6,7 @@
#include "kmem.hpp"
#include "limine.h"
#include "string.hpp"
static volatile struct limine_memmap_request memmap_request = {
.id = LIMINE_MEMMAP_REQUEST,

View File

@@ -12,6 +12,7 @@
#include "mutex.hpp"
#include "paging.hpp"
#include "serial.hpp"
#include "string.hpp"
#include "timer.hpp"
#include "tty.hpp"

101
src/kernel/string.hpp Normal file
View File

@@ -0,0 +1,101 @@
//
// Created by Stepan Usatiuk on 21.10.2023.
//
#ifndef OS2_STRING_HPP
#define OS2_STRING_HPP
#include <cstddef>
#include <cstdint>
inline void *memcpy(void *dest, const void *src, size_t n) {
uint8_t *pdest = (uint8_t *) dest;
const uint8_t *psrc = (const uint8_t *) src;
for (size_t i = 0; i < n; i++) {
pdest[i] = psrc[i];
}
return dest;
}
inline void *memset(void *s, int c, size_t n) {
uint8_t *p = (uint8_t *) s;
for (size_t i = 0; i < n; i++) {
p[i] = (uint8_t) c;
}
return s;
}
inline void *memmove(void *dest, const void *src, size_t n) {
uint8_t *pdest = (uint8_t *) dest;
const uint8_t *psrc = (const uint8_t *) src;
if (src > dest) {
for (size_t i = 0; i < n; i++) {
pdest[i] = psrc[i];
}
} else if (src < dest) {
for (size_t i = n; i > 0; i--) {
pdest[i - 1] = psrc[i - 1];
}
}
return dest;
}
inline int memcmp(const void *s1, const void *s2, size_t n) {
const uint8_t *p1 = (const uint8_t *) s1;
const uint8_t *p2 = (const uint8_t *) s2;
for (size_t i = 0; i < n; i++) {
if (p1[i] != p2[i]) {
return p1[i] < p2[i] ? -1 : 1;
}
}
return 0;
}
inline uint64_t strlen(const char *str) {
uint64_t res = 0;
while (*(str++) != '\0') res++;
return res;
}
inline char *strcat(char *dst, const char *src) {
char *dstw = dst;
while (*(dstw) != '\0')
dstw++;
int i = 0;
while (src[i] != '\0') {
dstw[i] = src[i];
i++;
}
dstw[i] = '\0';
return dst;
}
inline int strcmp(const char *s1, const char *s2) {
while (*s1 && (*s1 == *s2)) {
s1++;
s2++;
}
return *((const unsigned char *) s1) - *((const unsigned char *) s2);
}
inline void strcpy(const char *src, char *dst) {
int i = 0;
while (src[i] != '\0') {
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}
#endif//OS2_STRING_HPP