diff --git a/src/stdio/fscanf.c b/src/stdio/fscanf.c index 107874e..46000df 100644 --- a/src/stdio/fscanf.c +++ b/src/stdio/fscanf.c @@ -10,7 +10,9 @@ int fscanf(FILE * restrict fp, char const * restrict fmt, ...) va_list args; va_start(args, fmt); + __scanf_start(&in); int count = __scanf(&in, fmt, &args); + __scanf_end(&in); va_end(args); return count; diff --git a/src/stdio/scanf.c b/src/stdio/scanf.c index 50080df..734f703 100644 --- a/src/stdio/scanf.c +++ b/src/stdio/scanf.c @@ -10,7 +10,9 @@ int scanf(char const * restrict fmt, ...) va_list args; va_start(args, fmt); + __scanf_start(&in); int count = __scanf(&in, fmt, &args); + __scanf_end(&in); va_end(args); return count; diff --git a/src/stdio/scanf/scan.c b/src/stdio/scanf/scan.c index bdaa4ed..baecbe3 100644 --- a/src/stdio/scanf/scan.c +++ b/src/stdio/scanf/scan.c @@ -231,10 +231,6 @@ int __scanf( /* Number of successful assignments */ int validrets = 0; - __scanf_start( in ); - - // TODO: No __scanf_end() in any of the "return validrets"!! - for(int pos = 0; format[pos]; pos++) { if(format[pos] == ' ') { __skip_spaces(in); @@ -366,6 +362,5 @@ int __scanf( } } - __scanf_end( in ); return validrets; } diff --git a/src/stdio/sscanf.c b/src/stdio/sscanf.c index 9d60ad2..6100f99 100644 --- a/src/stdio/sscanf.c +++ b/src/stdio/sscanf.c @@ -3,7 +3,6 @@ int sscanf(const char * restrict str, char const * restrict fmt, ...) { - /* This is valid even if str=NULL. */ struct __scanf_input in = { .str = str, }; @@ -11,7 +10,9 @@ int sscanf(const char * restrict str, char const * restrict fmt, ...) va_list args; va_start(args, fmt); + __scanf_start(&in); int count = __scanf(&in, fmt, &args); + __scanf_end(&in); va_end(args); return count; diff --git a/src/stdio/vfscanf.c b/src/stdio/vfscanf.c index d17c455..9b5f418 100644 --- a/src/stdio/vfscanf.c +++ b/src/stdio/vfscanf.c @@ -7,5 +7,8 @@ int vfscanf(FILE * restrict fp, char const * restrict fmt, va_list args) .fp = fp, }; - return __scanf(&in, fmt, &args); + __scanf_start(&in); + int rc = __scanf(&in, fmt, &args); + __scanf_end(&in); + return rc; } diff --git a/src/stdio/vscanf.c b/src/stdio/vscanf.c index 3185ff9..1db6d34 100644 --- a/src/stdio/vscanf.c +++ b/src/stdio/vscanf.c @@ -7,5 +7,8 @@ int vscanf(char const * restrict fmt, va_list args) .fp = stdin, }; - return __scanf(&in, fmt, &args); + __scanf_start(&in); + int rc = __scanf(&in, fmt, &args); + __scanf_end(&in); + return rc; } diff --git a/src/stdio/vsscanf.c b/src/stdio/vsscanf.c index c6815e4..6418906 100644 --- a/src/stdio/vsscanf.c +++ b/src/stdio/vsscanf.c @@ -8,5 +8,8 @@ int vsscanf(const char * restrict str, char const * restrict fmt, va_list args) .str = str, }; - return __scanf(&in, fmt, &args); + __scanf_start(&in); + int rc = __scanf(&in, fmt, &args); + __scanf_end(&in); + return rc; }