diff options
Diffstat (limited to 'kernel/std')
| -rw-r--r-- | kernel/std/README.txt | 5 | ||||
| -rw-r--r-- | kernel/std/abort.c | 11 | ||||
| -rw-r--r-- | kernel/std/memcmp.c | 13 | ||||
| -rw-r--r-- | kernel/std/memcpy.c | 9 | ||||
| -rw-r--r-- | kernel/std/memmove.c | 14 | ||||
| -rw-r--r-- | kernel/std/memset.c | 8 | ||||
| -rw-r--r-- | kernel/std/printf.c | 192 | ||||
| -rw-r--r-- | kernel/std/putchar.c | 9 | ||||
| -rw-r--r-- | kernel/std/puts.c | 5 | ||||
| -rw-r--r-- | kernel/std/strlen.c | 9 |
10 files changed, 0 insertions, 275 deletions
diff --git a/kernel/std/README.txt b/kernel/std/README.txt deleted file mode 100644 index 2ad6cb4..0000000 --- a/kernel/std/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -a temporary(?) libc for the kernel
-
-code from meaty skeleton from osdev.org
-
-todo: change back to .c and seperate it as a library or something
\ No newline at end of file diff --git a/kernel/std/abort.c b/kernel/std/abort.c deleted file mode 100644 index 83873e8..0000000 --- a/kernel/std/abort.c +++ /dev/null @@ -1,11 +0,0 @@ -#include <stdio.h>
-#include <stdlib.h>
-
-__attribute__((__noreturn__))
-void abort(void) {
- // TODO: Add proper kernel panic.
- printf("kernel: panic: abort()\n");
- asm volatile("hlt");
- while (1) { }
- __builtin_unreachable();
-}
\ No newline at end of file diff --git a/kernel/std/memcmp.c b/kernel/std/memcmp.c deleted file mode 100644 index 93141e1..0000000 --- a/kernel/std/memcmp.c +++ /dev/null @@ -1,13 +0,0 @@ -#include <string.h>
-
-int memcmp(const void* aptr, const void* bptr, size_t size) {
- const unsigned char* a = (const unsigned char*) aptr;
- const unsigned char* b = (const unsigned char*) bptr;
- for (size_t i = 0; i < size; i++) {
- if (a[i] < b[i])
- return -1;
- else if (b[i] < a[i])
- return 1;
- }
- return 0;
-}
\ No newline at end of file diff --git a/kernel/std/memcpy.c b/kernel/std/memcpy.c deleted file mode 100644 index 7e09be7..0000000 --- a/kernel/std/memcpy.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <string.h>
-
-void* memcpy(void* restrict dstptr, const void* restrict srcptr, size_t size) {
- unsigned char* dst = (unsigned char*) dstptr;
- const unsigned char* src = (const unsigned char*) srcptr;
- for (size_t i=0; i < size; i++)
- dst[i] = src[i];
- return dstptr;
-}
\ No newline at end of file diff --git a/kernel/std/memmove.c b/kernel/std/memmove.c deleted file mode 100644 index 98c787f..0000000 --- a/kernel/std/memmove.c +++ /dev/null @@ -1,14 +0,0 @@ -#include <string.h>
-
-void* memmove(void* dstptr, const void* srcptr, size_t size) {
- unsigned char* dst = (unsigned char*) dstptr;
- const unsigned char* src = (const unsigned char*) srcptr;
- if (dst < src) {
- for (size_t i = 0; i < size; i++)
- dst[i] = src[i];
- } else {
- for (size_t i = size; i != 0; i--)
- dst[i-1] = src[i-1];
- }
- return dstptr;
-}
\ No newline at end of file diff --git a/kernel/std/memset.c b/kernel/std/memset.c deleted file mode 100644 index 67dadfe..0000000 --- a/kernel/std/memset.c +++ /dev/null @@ -1,8 +0,0 @@ -#include <string.h>
-
-void* memset(void* bufptr, int value, size_t size) {
- unsigned char* buf = (unsigned char*) bufptr;
- for (size_t i = 0; i < size; i++)
- buf[i] = (unsigned char) value;
- return bufptr;
-}
\ No newline at end of file diff --git a/kernel/std/printf.c b/kernel/std/printf.c deleted file mode 100644 index fe45892..0000000 --- a/kernel/std/printf.c +++ /dev/null @@ -1,192 +0,0 @@ -#include <limits.h>
-#include <stdbool.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdint.h>
-
-static bool print(const char* data, size_t length) {
- const unsigned char* bytes = (const unsigned char*) data;
- for (size_t i = 0; i < length; i++)
- if (putchar(bytes[i]) == EOF)
- return false;
- return true;
-}
-
-// for %d and %x.
-static const char* itoa(unsigned int num, char* str, unsigned int base) {
- asm("xchgw %bx, %bx");
- int cou = 0; // nt
-
- if (num == 0) { // 0
- str[cou] = '0';
- str[++cou] = '\0';
- return str;
- }
-
- while (num)
- {
- unsigned int rem = (num % base);
- // brings the number up to ascii 0 + the digit
- if (rem > 9) {
- str[cou] = rem + '7'; // 7 = 55 + 10(A) = 65
- } else {
- str[cou] = rem + '0';
- }
- num /= base;
- ++cou;
- }
-
- // reverse the string
- for (int i = 0; i < cou; i++) {
- char temp = str[i];
- str[i] = str[cou - i - 1];
- str[cou - 1] = temp;
- }
-
- str[cou] = '\0';
- return str;
-}
-
-// have no idea if there's a better way to do this. for %lx
-static const char* itoa_u64(unsigned long long num, char* str, int base) {
- int cou = 0; // nt
-
- if (num == 0) { // 0
- str[cou] = '0';
- str[++cou] = '\0';
- return str;
- }
-
- while (num)
- {
- unsigned long long rem = num % base;
- // brings the number up to ascii 0 + the digit
- if (rem > 9) {
- str[cou] = rem + '7'; // 7 = 55 + 10(A) = 65
- } else {
- str[cou] = rem + '0';
- }
- num /= base;
- ++cou;
- }
-
- // reverse the string
- for (int i = 0; i < cou; i++) {
- char temp = str[i];
- str[i] = str[cou - i - 1];
- str[cou - 1] = temp;
- }
-
- str[cou] = '\0';
- return str;
-}
-
-int printf(const char* restrict format, ...) {
- va_list parameters;
- va_start(parameters, format);
-
- int written = 0;
-
- while (*format != '\0') {
- size_t maxrem = INT_MAX - written;
-
- if (format[0] != '%' || format[1] == '%') {
- if (format[0] == '%')
- format++;
- size_t amount = 1;
- while (format[amount] && format[amount] != '%')
- amount++;
- if (maxrem < amount) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(format, amount))
- return -1;
- format += amount;
- written += amount;
- continue;
- }
-
- const char* format_begun_at = format++;
-
- if (*format == 'c') {
- format++;
- char c = (char) va_arg(parameters, int /* char promotes to int */);
- if (!maxrem) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(&c, sizeof(c)))
- return -1;
- written++;
- } else if (*format == 'd') {
- format++;
- char str[20]; // probably a long enough buffer
- unsigned int d = va_arg(parameters, unsigned int);
- itoa(d, str, 10);
- size_t len = strlen(str);
- if (maxrem < len) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(str, len))
- return -1;
- written += len;
- } else if (*format == 'x') {
- format++;
- char str[20]; // probably a long enough buffer
- unsigned int d = va_arg(parameters, unsigned int);
- itoa(d, str, 16);
- size_t len = strlen(str);
- if (maxrem < len) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(str, len))
- return -1;
- written += len;
- } else if (*format == 'l') { // for %lx and others that start with l
- format++;
- if (*format == 'x') {
- format++;
- char str[20]; // probably a long enough buffer
- unsigned long long d = va_arg(parameters, unsigned long long);
- itoa_u64(d, str, 16);
- size_t len = strlen(str);
- if (maxrem < len) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(str, len))
- return -1;
- written += len;
- }
- } else if (*format == 's') {
- format++;
- const char* str = va_arg(parameters, const char*);
- size_t len = strlen(str);
- if (maxrem < len) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(str, len))
- return -1;
- written += len;
- } else {
- format = format_begun_at;
- size_t len = strlen(format);
- if (maxrem < len) {
- // TODO: Set errno to EOVERFLOW.
- return -1;
- }
- if (!print(format, len))
- return -1;
- written += len;
- format += len;
- }
- }
-
- va_end(parameters);
- return written;
-}
\ No newline at end of file diff --git a/kernel/std/putchar.c b/kernel/std/putchar.c deleted file mode 100644 index c5a7976..0000000 --- a/kernel/std/putchar.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <stdio.h>
-
-#include <arch/i386/tmtty.h>
-
-int putchar(int ic) {
- char c = (char) ic;
- terminal_write(&c, sizeof(c));
- return ic;
-}
\ No newline at end of file diff --git a/kernel/std/puts.c b/kernel/std/puts.c deleted file mode 100644 index 8c8c036..0000000 --- a/kernel/std/puts.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <stdio.h>
-
-int puts(const char* string) {
- return printf("%s\n", string);
-}
\ No newline at end of file diff --git a/kernel/std/strlen.c b/kernel/std/strlen.c deleted file mode 100644 index 441622a..0000000 --- a/kernel/std/strlen.c +++ /dev/null @@ -1,9 +0,0 @@ -#include <string.h>
-
-size_t strlen(const char* str) {
- size_t len = 0;
- while (str[len]) {
- ++len;
- }
- return len;
-}
\ No newline at end of file |
