# HG changeset patch # User Markus Bröker # Date 1239878953 -7200 # Node ID 9609c54a54d3bea53d25fb05f5ff7baa760f8f2d # Parent 7739518acafb5b1067c28c6b65b14795ab77379c myprintf.c added - replaces varargs.c committer: Markus Bröker diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ cunit \ md5 \ md5rec \ - varargs \ + myprintf \ concatenation \ alpha_beta \ life \ @@ -186,7 +186,7 @@ @echo Linking $< ... @$(CC) -o $@ $< -llsf -varargs: varargs.o +myprintf: myprintf.o @echo Linking $< ... @$(CC) -o $@ $< diff --git a/myprintf.c b/myprintf.c new file mode 100644 --- /dev/null +++ b/myprintf.c @@ -0,0 +1,70 @@ +/** + * test/demos/myprintf.c + * Copyright (C) 2008 Markus Broeker + */ + +#include +#include +#include +#include + +int myprintf (char *fmt, ...) +{ + int i, pos = 0; + va_list list; + + char c; + char *s; + char s_str[1024]; + + char v[12]; + int value; + + va_start (list, fmt); + + while (*fmt) { + switch (*fmt) { + case '%': + switch (*++fmt) { + case 'c': + c = va_arg (list, int); + s_str[pos++] = c; + c = *fmt++; + break; + case 's': + s = va_arg (list, char *); + for (i = 0; i < strlen (s); i++) { + s_str[pos++] = s[i]; + } + c = *fmt++; + break; + case 'd': + value = va_arg (list, int); + sprintf (v, "%d", value); + for (i = 0; i < strlen (v); i++) { + s_str[pos++] = v[i]; + } + c = *fmt++; + break; + default: + puts ("Unknown character"); + } + default: + s_str[pos++] = *fmt++; + } + va_end (list); + } + + s_str[pos] = '\0'; + + puts (s_str); + return pos; +} + +int main (int argc, char **argv) +{ + int len; + + len = myprintf ("Bugfix needed: %s\t[%d:%d]", "Lines", 20, 30); + return EXIT_SUCCESS; +} diff --git a/varargs.c b/varargs.c deleted file mode 100644 --- a/varargs.c +++ /dev/null @@ -1,59 +0,0 @@ -/** - * test/demos/varargs.c - * Copyright (C) 2008 Markus Broeker - */ - -#include -#include -#include - -int params (char *fmt, ...) -{ - int i = 0; - - va_list list; - - char c; - char *s; - - int value; - - va_start (list, fmt); - - while (*list) { - switch (*fmt++) { - case 'c': - c = va_arg (list, int); - - printf (" Char: %c\n", c); - i++; - break; - case 's': - s = va_arg (list, char *); - - printf ("String: %s\n", s); - i++; - break; - case 'd': - value = va_arg (list, int); - - printf (" Value: %d\n", value); - i++; - break; - default: - printf ("Unknown format character\n"); - } - } - - va_end (list); - - return i; -} - -int main (int argc, char **argv) -{ - - printf ("Number of Parameter: %d\n", params ("Xcssssd", 'I', "made", "this", "application", "in", 2008, NULL)); - - return EXIT_SUCCESS; -}