This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 4/6] vfprintf: Move jump table definition and the macros out of function
- From: Florian Weimer <fweimer at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Sun, 1 Mar 2015 22:00:12 +0100
- Subject: [PATCH 4/6] vfprintf: Move jump table definition and the macros out of function
- Authentication-results: sourceware.org; auth=none
- References: <cover dot 1425246936 dot git dot fweimer at redhat dot com>
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;
--
2.1.0