diff options
author | Neal H. Walfield <neal@gnu.org> | 2009-01-18 01:39:07 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2009-01-18 01:39:07 +0100 |
commit | 75b9fed1bf5e5408f8f05e0569d2c713c47778eb (patch) | |
tree | d4511790bfb3625ff1a48adf8126e46674212e2a /viengoos | |
parent | 51088c5d0e9cb261cd114c297447abd149a2b98d (diff) |
Remove printf hacks.
Diffstat (limited to 'viengoos')
-rw-r--r-- | viengoos/viengoos.c | 495 |
1 files changed, 0 insertions, 495 deletions
diff --git a/viengoos/viengoos.c b/viengoos/viengoos.c index 7e50838..afa2616 100644 --- a/viengoos/viengoos.c +++ b/viengoos/viengoos.c @@ -321,498 +321,3 @@ main (int argc, char *argv[]) server_loop (); #endif } -#if HAVE_CONFIG_H -#include <config.h> -#endif - -#ifndef RM_INTERN -static void -io_buffer_flush (struct io_buffer *buffer) -{ - if (buffer->len == 0) - return; - - rm_write (*buffer); - buffer->len = 0; -} - -static void -io_buffer_append (struct io_buffer *buffer, int chr) -{ - if (buffer->len == sizeof (buffer->data)) - io_buffer_flush (buffer); - - buffer->data[buffer->len ++] = chr; -} -#endif - -/* Print the single character CHR on the output device. */ -int -s_putchar (int chr) -{ -#if defined(RM_INTERN) || defined(_L4_TEST_ENVIRONMENT) - /* For Viengoos, use driver putchar routine. For the test - environment, just use the stdio putchar. */ - extern int putchar (int chr); - - return putchar (chr); -#else - struct io_buffer buffer; - buffer.len = 1; - buffer.data[0] = chr; - rm_write (buffer); - return 0; -#endif -} - -int -s_cputs (int (*putchar) (int), const char *str) -{ - while (*str != '\0') - putchar (*(str++)); - - putchar ('\n'); - - return 0; -} - - -int -s_puts (const char *str) -{ -#ifndef RM_INTERN - struct io_buffer buffer; - buffer.len = 0; - - int putchar (int chr) - { - io_buffer_append (&buffer, chr); - return 0; - } -#endif - - int ret = s_cputs (putchar, str); - -#ifndef RM_INTERN - io_buffer_flush (&buffer); -#endif - - return ret; -} - -/* Output format flags. */ -#define FLAG_LONGLONG (1 << 0) -#define FLAG_PAD_ZERO (1 << 1) -#define FLAG_BASE (1 << 2) -#define FLAG_UPPERCASE (1 << 3) -#define FLAG_LONG (1 << 4) - -static void -print_nr (unsigned long long nr, int base, int precision, unsigned int flags) -{ - static char *digits; - char str[30]; - int i = 0; - - digits = (flags & FLAG_UPPERCASE) ? "0123456789ABCDEF" : "0123456789abcdef"; - - if (flags & FLAG_BASE) - { - if (base == 16) - { - putchar ('0'); - putchar ((flags & FLAG_UPPERCASE) ? 'X' : 'x'); - } - else if (base == 8) - putchar ('0'); - } - - do - { - str[i++] = digits[nr % base]; - nr = nr / base; - } - while (nr); - - if (precision >= sizeof (str)) - precision = sizeof (str); - - while (i < precision) - str[i++] = (flags & FLAG_PAD_ZERO) ? '0' : ' '; - - i--; - while (i >= 0) - putchar (str[i--]); -} - - -static void -print_signed_nr (long long nr, int base, int precision, unsigned int flags) -{ - unsigned long long unr; - - if (nr < 0) - { - putchar ('-'); - unr = -nr; - } - else - unr = nr; - - print_nr (unr, base, precision, flags); -} - -int -s_cvprintf (int (*putchar) (int), const char *fmt, va_list ap) -{ - int precision = 0; - unsigned int flags = 0; - bool done; - - const char *p = fmt; - - while (*p != '\0') - { - const char *startp; - - if (*p != '%') - { - putchar (*(p++)); - continue; - } - p++; - - startp = p; - flags = 0; - precision = 0; - done = false; - - while (*p && !done) - { - switch (*p) - { - case '%': - putchar ('%'); - p++; - done = true; - break; - - case '#': - flags |= FLAG_BASE; - p++; - break; - - case '0': - flags |= FLAG_PAD_ZERO; - p++; - break; - - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - while (*p >= '0' && *p <= '9') - { - precision = precision * 10; - precision += *(p++) - '0'; - } - break; - - case 'l': - p++; - if (*p == 'l') - { - p++; - flags |= FLAG_LONGLONG; - } - else - flags |= FLAG_LONG; - break; - - case 'o': - if (flags & FLAG_LONGLONG) - print_nr (va_arg (ap, unsigned long long), 8, - precision, flags); - else if (flags & FLAG_LONG) - print_nr (va_arg (ap, unsigned long), 8, - precision, flags); - else - print_nr (va_arg (ap, unsigned int), 8, precision, flags); - p++; - done = true; - break; - - case 'd': - case 'i': - if (flags & FLAG_LONGLONG) - print_signed_nr (va_arg (ap, long long), 10, - precision, flags); - else if (flags & FLAG_LONG) - print_signed_nr (va_arg (ap, long), 10, - precision, flags); - else - print_signed_nr (va_arg (ap, int), 10, precision, flags); - p++; - done = true; - break; - - case 'X': - flags |= FLAG_UPPERCASE; - /* Fall-through. */ - case 'x': - if (flags & FLAG_LONGLONG) - print_nr (va_arg (ap, unsigned long long), 16, - precision, flags); - else if (flags & FLAG_LONG) - print_nr (va_arg (ap, unsigned long), 16, - precision, flags); - else - print_nr (va_arg (ap, unsigned int), 16, precision, flags); - p++; - done = true; - break; - - case 'u': - if (flags & FLAG_LONGLONG) - print_nr (va_arg (ap, unsigned long long), 10, - precision, flags); - else if (flags & FLAG_LONG) - print_nr (va_arg (ap, unsigned long), 10, - precision, flags); - else - print_nr (va_arg (ap, unsigned int), 10, precision, flags); - p++; - done = true; - break; - - case 'c': - putchar (va_arg (ap, int)); - p++; - done = true; - break; - - case 's': - { - char *str = va_arg (ap, char *); - while (*str) - putchar (*(str++)); - } - p++; - done = true; - break; - - case 'P': - flags |= FLAG_UPPERCASE; - /* Fall-through. */ - case 'p': - flags |= FLAG_BASE; - print_nr ((uintptr_t) va_arg (ap, void *), 16, - precision, flags); - p++; - done = true; - break; - - default: - putchar ('%'); - p++; - while (startp < p) - putchar (*(startp++)); - done = true; - break; - } - } - } - - return 0; - - - - -#if 0 - const char *p = fmt; - - while (*p != '\0') - { - if (*p != '%') - { - putchar (*(p++)); - continue; - } - - p++; - switch (*p) - { - case '%': - putchar ('%'); - p++; - break; - - case 'l': - p++; - if (*p != 'l') - { - putchar ('%'); - putchar ('l'); - putchar (*(p++)); - continue; - } - p++; - switch (*p) - { - case 'o': - print_nr (putchar, va_arg (ap, unsigned long long), 8); - p++; - break; - - case 'd': - case 'i': - print_signed_nr (putchar, va_arg (ap, long long), 10); - p++; - break; - - case 'x': - case 'X': - print_nr (putchar, va_arg (ap, unsigned long long), 16); - p++; - break; - - case 'u': - print_nr (putchar, va_arg (ap, unsigned long long), 10); - p++; - break; - - default: - putchar ('%'); - putchar ('l'); - putchar ('l'); - putchar (*(p++)); - break; - } - break; - - case 'o': - print_nr (putchar, va_arg (ap, unsigned int), 8); - p++; - break; - - case 'd': - case 'i': - print_signed_nr (putchar, va_arg (ap, int), 10); - p++; - break; - - case 'x': - case 'X': - print_nr (putchar, va_arg (ap, unsigned int), 16); - p++; - break; - - case 'u': - print_nr (putchar, va_arg (ap, unsigned int), 10); - p++; - break; - - case 'c': - putchar (va_arg (ap, int)); - p++; - break; - - case 's': - { - char *str = va_arg (ap, char *); - if (str) - while (*str) - putchar (*(str++)); - else - { - putchar ('N'); - putchar ('U'); - putchar ('L'); - putchar ('L'); - } - } - p++; - break; - - case 'p': - print_nr (putchar, (unsigned int) va_arg (ap, void *), 16); - p++; - break; - - default: - putchar ('%'); - putchar (*p); - p++; - break; - } - } - - return 0; -#endif -} - -int -s_vprintf (const char *fmt, va_list ap) -{ -#ifndef RM_INTERN - struct io_buffer buffer; - buffer.len = 0; - - int putchar (int chr) - { - io_buffer_append (&buffer, chr); - return 0; - } -#endif - - int ret = s_cvprintf (putchar, fmt, ap); - -#ifndef RM_INTERN - io_buffer_flush (&buffer); -#endif - - return ret; -} - -int -s_cprintf (int (*putchar) (int), const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - int r = s_cvprintf (putchar, fmt, ap); - va_end (ap); - return r; -} - -int -s_printf (const char *fmt, ...) -{ -#ifndef RM_INTERN - struct io_buffer buffer; - buffer.len = 0; - - int putchar (int chr) - { - io_buffer_append (&buffer, chr); - return 0; - } -#endif - - va_list ap; - - va_start (ap, fmt); - int r = s_cvprintf (putchar, fmt, ap); - va_end (ap); - -#ifndef RM_INTERN - io_buffer_flush (&buffer); -#endif - - return r; -} |