Răsfoiți Sursa

feat: print pointer and improvements on stdio

0x or 0X is printed ahead of hex numbers
greatbridf 3 ani în urmă
părinte
comite
17edec9339
1 a modificat fișierele cu 16 adăugiri și 0 ștergeri
  1. 16 0
      src/kernel/stdio.c

+ 16 - 0
src/kernel/stdio.c

@@ -1,5 +1,6 @@
 #include <kernel/stdio.h>
 
+#include <types/size.h>
 #include <types/stdint.h>
 
 // where n is in the range of [0, 9]
@@ -97,6 +98,14 @@ snprint_hex(
 {
     ssize_t n_write = 0;
 
+    do_write_if_free(buf, buf_size, '0');
+    if (capitalized) {
+        do_write_if_free(buf, buf_size, 'X');
+    } else {
+        do_write_if_free(buf, buf_size, 'x');
+    }
+    n_write += 2;
+
     char* orig_buf = buf;
 
     do {
@@ -182,6 +191,13 @@ snprintf(
                 n_tmp_write = snprint_char(buf, buf_size, *(char*)arg_ptr);
                 arg_ptr += sizeof(char);
                 break;
+
+            // pointer
+            case 'p':
+                n_tmp_write = snprint_hex(buf, buf_size, *(ptr_t*)arg_ptr, 0);
+                arg_ptr += sizeof(ptr_t);
+                break;
+
             default:
                 n_tmp_write = snprint_char(buf, buf_size, *(fmt - 1));
                 break;