From patchwork Sun Mar 1 21:00:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 5380 Received: (qmail 104730 invoked by alias); 1 Mar 2015 21:57:31 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 104513 invoked by uid 89); 1 Mar 2015 21:57:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.0 required=5.0 tests=AWL, BAYES_00, SPF_HELO_PASS, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Message-Id: In-Reply-To: References: From: Florian Weimer Date: Sun, 1 Mar 2015 22:00:12 +0100 Subject: [PATCH 4/6] vfprintf: Move jump table definition and the macros out of function To: libc-alpha@sourceware.org The second jump table will be moved to a separate function in the next commit. --- stdio-common/vfprintf.c | 108 ++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index dcc24b3..da52dbc 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -212,60 +212,10 @@ static int printf_unknown (FILE *, const struct printf_info *, static CHAR_T *group_number (CHAR_T *, CHAR_T *, const char *, THOUSANDS_SEP_T) __THROW internal_function; -/* The function itself. */ -int -vfprintf (FILE *s, const CHAR_T *format, va_list ap) -{ - /* The character used as thousands separator. */ - THOUSANDS_SEP_T thousands_sep = 0; - - /* The string describing the size of groups of digits. */ - const char *grouping; - - /* Place to accumulate the result. */ - int done; - - /* Current character in format string. */ - const UCHAR_T *f; - - /* End of leading constant string. */ - const UCHAR_T *lead_str_end; - - /* Points to next format specifier. */ - const UCHAR_T *end_of_spec; - - /* Buffer intermediate results. */ -#define WORK_BUFFER_SIZE 1000 - CHAR_T work_buffer[WORK_BUFFER_SIZE]; - CHAR_T *workstart = NULL; - CHAR_T *workend; - - /* We have to save the original argument pointer. */ - va_list ap_save; - - /* Count number of specifiers we already processed. */ - int nspecs_done; - - /* For the %m format we may need the current `errno' value. */ - int save_errno = errno; - - /* 1 if format is in read-only memory, -1 if it is in writable memory, - 0 if unknown. */ - int readonly_format = 0; - - /* For the argument descriptions, which may be allocated on the heap. */ - void *args_malloced = NULL; - - /* For positional argument handling. */ - struct printf_spec *specs; - - /* Track if we malloced the SPECS array and thus must free it. */ - bool specs_malloced = false; - - /* This table maps a character into a number representing a - class. In each step there is a destination label for each - class. */ - static const uint8_t jump_table[] = +/* Jump tables. This table maps a character into a number + representing a class. In each step there is a destination label + for each class. */ +static const uint8_t jump_table[] = { /* ' ' */ 1, 0, 0, /* '#' */ 4, 0, /* '%' */ 14, 0, /* '\''*/ 6, @@ -1266,6 +1216,56 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) break; #endif +/* The function itself. */ +int +vfprintf (FILE *s, const CHAR_T *format, va_list ap) +{ + /* The character used as thousands separator. */ + THOUSANDS_SEP_T thousands_sep = 0; + + /* The string describing the size of groups of digits. */ + const char *grouping; + + /* Place to accumulate the result. */ + int done; + + /* Current character in format string. */ + const UCHAR_T *f; + + /* End of leading constant string. */ + const UCHAR_T *lead_str_end; + + /* Points to next format specifier. */ + const UCHAR_T *end_of_spec; + + /* Buffer intermediate results. */ +#define WORK_BUFFER_SIZE 1000 + CHAR_T work_buffer[WORK_BUFFER_SIZE]; + CHAR_T *workstart = NULL; + CHAR_T *workend; + + /* We have to save the original argument pointer. */ + va_list ap_save; + + /* Count number of specifiers we already processed. */ + int nspecs_done; + + /* For the %m format we may need the current `errno' value. */ + int save_errno = errno; + + /* 1 if format is in read-only memory, -1 if it is in writable memory, + 0 if unknown. */ + int readonly_format = 0; + + /* For the argument descriptions, which may be allocated on the heap. */ + void *args_malloced = NULL; + + /* For positional argument handling. */ + struct printf_spec *specs; + + /* Track if we malloced the SPECS array and thus must free it. */ + bool specs_malloced = false; + /* Orient the stream. */ #ifdef ORIENT ORIENT;