summaryrefslogtreecommitdiff
path: root/kernel/src/libk
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksav013@gmail.com>2022-08-09 09:05:02 +0200
committerAleksa Vuckovic <aleksav013@gmail.com>2022-08-09 09:05:02 +0200
commit78579419442f22641368db777120d7e75cbaee94 (patch)
treecd49284e7fe0a4c1e8057fce6e2aa66a07f12fee /kernel/src/libk
parente11298e56be560de64bbccfe74fef7ff85c623d1 (diff)
map on page fault
Diffstat (limited to 'kernel/src/libk')
-rw-r--r--kernel/src/libk/stdio.c8
-rw-r--r--kernel/src/libk/string.c29
2 files changed, 35 insertions, 2 deletions
diff --git a/kernel/src/libk/stdio.c b/kernel/src/libk/stdio.c
index b8ddb67..be75b73 100644
--- a/kernel/src/libk/stdio.c
+++ b/kernel/src/libk/stdio.c
@@ -47,6 +47,13 @@ inline void print_int(uint64_t num)
print_string(a);
}
+inline void print_hex(uint64_t num)
+{
+ char a[100];
+ itoh(num, a);
+ print_string(a);
+}
+
void printf(const char *s, ...)
{
size_t count = 0;
@@ -63,6 +70,7 @@ void printf(const char *s, ...)
if(s[i] == 'c') print_char((char)va_arg(list, uint32_t));
else if(s[i] == 's') print_string(va_arg(list, char*));
else if(s[i] == 'd') print_int((uint64_t)va_arg(list, uint64_t));
+ else if(s[i] == 'x') print_hex((uint64_t)va_arg(list, uint64_t));
else
{
print_string("Wrong format using printf\n");
diff --git a/kernel/src/libk/string.c b/kernel/src/libk/string.c
index fde9645..6d7ab69 100644
--- a/kernel/src/libk/string.c
+++ b/kernel/src/libk/string.c
@@ -35,9 +35,34 @@ void strrev(char *s)
void itos(uint64_t num, char* s)
{
+ if (num == 0) {
+ s[0] = '0';
+ s[1] = '\0';
+ return;
+ }
+
+ size_t i;
+ for (i = 0; num; num /= 10, i++) {
+ s[i] = (char)('0' + num % 10);
+ }
+ s[i] = '\0';
+ strrev(s);
+}
+
+void itoh(uint64_t num, char* s)
+{
+ if (num == 0) {
+ s[0] = '0';
+ s[1] = '\0';
+ return;
+ }
+
size_t i;
- for (i = 0; num; num/=10, i++) {
- s[i] = (char)('0' + num%10);
+ for (i = 0; num; num /= 16, i++) {
+ if (num % 16 < 10)
+ s[i] = (char)('0' + num % 16);
+ else
+ s[i] = (char)('A' + num % 16 - 10);
}
s[i] = '\0';
strrev(s);