[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 2/6] kernel2: kprintf '%p' korrekt behandeln und 'z' hinzugefügt



! kprintf.c: ein Pointer hat nicht immer die Größe von 'unsigend int'
  statt dessen sollte 'uintptr_t' verwendet werden.
+ kprintf.c: 'z' als Größen Angabe für 'size_t' Werte.

Signed-off-by: Andreas Freimuth <m.nemo@xxxxxxx>
---
 src/kernel2/src/kprintf.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/kernel2/src/kprintf.c b/src/kernel2/src/kprintf.c
index 29d8e5a..d2cea6c 100644
--- a/src/kernel2/src/kprintf.c
+++ b/src/kernel2/src/kprintf.c
@@ -34,6 +34,7 @@
  */
  
 #include <stdint.h>
+#include <stddef.h>
 #include <lost/config.h>
 
 #include "kprintf.h"
@@ -161,6 +162,9 @@ void kaprintf(char* format, va_list args)
                     value = tmp;
                 }
                 format++;
+            } else if(format[0] == 'z' && (format[1] == 'u' || format[1] == 'x')) {
+                value = va_arg(args, size_t);
+                format++;
             }
             else if(format[0] == 'l' && (format[1] == 'o' || format[1] == 'u' || format[1] == 'x'))
             {
@@ -177,10 +181,10 @@ void kaprintf(char* format, va_list args)
                 } else {
                     value = tmp;
                 }
-            }
-            else if(format[0] == 'u' || format[0] == 'o' || format[0] == 'p' || format[0] == 'x')
-            {
+            } else if(format[0] == 'u' || format[0] == 'o' || format[0] == 'x') {
                 value = va_arg(args, unsigned int);
+            } else if(format[0] == 'p') {
+                value = va_arg(args, uintptr_t);
             }
 
             switch(*format)
@@ -233,7 +237,7 @@ void kaprintf(char* format, va_list args)
 }
 
 /* printf für den Kernel. Nur für Testzwecke gedacht.
- Unterstützt %c, %d, %i, %o, %p, %u, %s, %x und %lld, %lli, %llo, %llu, %llx. */
+ Unterstützt %c, %d, %i, %o, %p, %u, %s, %x und %lld, %lli, %llo, %llu, %llx, %zu, %zx. */
 void kprintf(char* format, ...)
 {
     lock(&printf_lock);
-- 
1.7.11.7