diff --git a/myprintf.c b/myprintf.c --- a/myprintf.c +++ b/myprintf.c @@ -10,7 +10,7 @@ #define BUF_SIZE 1024 -int myprintf (char *fmt, ...) +int myvfprintf (FILE * fp, const char *fmt, va_list list) { int i, value, pos = 0, size = 1; char c; @@ -20,14 +20,10 @@ char *s_str; char v_str[28]; - va_list list; - if ((s_str = malloc (BUF_SIZE)) == NULL) { return EOF; } - va_start (list, fmt); - while (*fmt) { switch (*fmt) { case '%': @@ -42,7 +38,7 @@ while ((pos + strlen (s)) > (size * BUF_SIZE)) { if ((ptr = realloc (s_str, ++size * BUF_SIZE)) == NULL) { s_str[pos] = '\0'; - fputs (s_str, stdout); /* print it anyway... */ + fputs (s_str, fp); /* print it anyway... */ return EOF; } s_str = ptr; @@ -75,17 +71,41 @@ } s_str = ptr; } - - va_end (list); } + va_end (list); + s_str[pos] = '\0'; - fputs (s_str, stdout); + fputs (s_str, fp); free (s_str); return pos; } +int myfprintf (FILE * fp, const char *fmt, ...) +{ + va_list list; + int ret; + + va_start (list, fmt); + ret = myvfprintf (fp, fmt, list); + va_end (list); + + return ret; +} + +int myprintf (const char *fmt, ...) +{ + va_list list; + int ret; + + va_start (list, fmt); + ret = myvfprintf (stdout, fmt, list); + va_end (list); + + return ret; +} + int main (int argc, char **argv) { int len;