aboutsummaryrefslogtreecommitdiff
path: root/kernel/lib/printf.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/lib/printf.c')
-rw-r--r--kernel/lib/printf.c120
1 files changed, 0 insertions, 120 deletions
diff --git a/kernel/lib/printf.c b/kernel/lib/printf.c
deleted file mode 100644
index 68e08d8..0000000
--- a/kernel/lib/printf.c
+++ /dev/null
@@ -1,120 +0,0 @@
-#include <printf.h>
-#include <stdarg.h>
-
-int snprintf(char * buff, size_t len, const char *format, ...) {
- va_list ap;
-
- va_start(ap, format);
- len = vsnprintf(buff, len, format, ap);
- va_end(ap);
-
- return len;
-}
-
-int vsnprintf(char *buff, size_t len, const char* format, va_list ap){
- size_t i, result;
-
- if (!buff || !format)
- return -1;
-
-#define PUTCHAR(thechar) \
- do { \
- if (result < len-1) \
- *buff++ = (thechar); \
- result++; \
- } while (0)
-
- result = 0;
- for(i = 0; format[i] != '\0' ; i++) {
- if (format[i] == '%') {
- i++;
- switch(format[i]) {
- case '%':
- PUTCHAR('%');
- break;
-
- case 'i':;
- case 'd': {
- int integer = va_arg(ap,int);
- int cpt2 = 0;
- char buff_int[16];
-
- if (integer<0)
- PUTCHAR('-');
-
- do {
- int m10 = integer%10;
- m10 = (m10 < 0)? -m10:m10;
- buff_int[cpt2++] = (char)('0'+ m10);
- integer = integer/10;
- } while(integer != 0);
-
- for(cpt2 = cpt2 - 1; cpt2 >= 0; cpt2--)
- PUTCHAR(buff_int[cpt2]);
-
- break;
- }
- case 'c': {
- int value = va_arg(ap,int);
- PUTCHAR((char)value);
- break;
- }
- case 's': {
- char *string = va_arg(ap,char *);
- if (!string)
- string = "(null)";
- for(; *string != '\0' ; string++)
- PUTCHAR(*string);
- break;
- }
- case 'x': {
- unsigned int hexa = va_arg(ap,int);
- unsigned int nb;
- int j, had_nonzero = 0;
- for(j = 0; j < 8; j++) {
- nb = (unsigned int)(hexa << (j*4));
- nb = (nb >> 28) & 0xf;
- // Skip the leading zeros
- if (nb == 0) {
- if (had_nonzero)
- PUTCHAR('0');
- } else {
- had_nonzero = 1;
- if (nb < 10)
- PUTCHAR('0'+nb);
- else
- PUTCHAR('a'+(nb-10));
- }
- }
- if (!had_nonzero)
- PUTCHAR('0');
- break;
- }
- case 'p': {
- unsigned int hexa = va_arg(ap,int);
- unsigned int nb;
- int j;
- for (j = 0; j < 8; j++) {
- nb = (unsigned int)(hexa << (j*4));
- nb = (nb >> 28) & 0xf;
- if (nb < 10)
- PUTCHAR('0'+nb);
- else
- PUTCHAR('a'+(nb-10));
- }
- break;
- }
- default:
- PUTCHAR('%');
- PUTCHAR(format[i]);
- }
- } else {
- PUTCHAR(format[i]);
- }
- }
-
- *buff = '\0';
- return result;
-}
-
-/* vim: set ts=4 sw=4 tw=0 noet :*/