diff options
Diffstat (limited to 'include/printf_buffer.h')
-rw-r--r-- | include/printf_buffer.h | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/include/printf_buffer.h b/include/printf_buffer.h index ad08a72b71..e89f984aca 100644 --- a/include/printf_buffer.h +++ b/include/printf_buffer.h @@ -44,7 +44,12 @@ enum __printf_buffer_mode { __printf_buffer_mode_failed, + __printf_buffer_mode_snprintf, __printf_buffer_mode_to_file, + __printf_buffer_mode_strfmon, + __printf_buffer_mode_fp, /* For __printf_fp_l_buffer. */ + __printf_buffer_mode_fp_to_wide, /* For __wprintf_fp_l_buffer. */ + __printf_buffer_mode_fphex_to_wide, /* For __wprintf_fphex_l_buffer. */ }; /* Buffer for fast character writing with overflow handling. @@ -266,13 +271,44 @@ bool __wprintf_buffer_flush (struct __wprintf_buffer *buf) attribute_hidden; #define Xprintf_buffer_puts Xprintf (buffer_puts) #define Xprintf_buffer_write Xprintf (buffer_write) +/* Commonly used buffers. */ + +struct __printf_buffer_snprintf +{ + struct __printf_buffer base; + char discard[128]; /* Used in counting mode. */ +}; + +/* Sets up [BUFFER, BUFFER + LENGTH) as the write target. If LENGTH + is positive, also writes a NUL byte to *BUFFER. */ +void __printf_buffer_snprintf_init (struct __printf_buffer_snprintf *, + char *buffer, size_t length) + attribute_hidden; + +/* Add the null terminator after everything has been written. The + return value is the one expected by printf (see __printf_buffer_done). */ +int __printf_buffer_snprintf_done (struct __printf_buffer_snprintf *) + attribute_hidden; + /* Flush function implementations follow. They are called from __printf_buffer_flush. Generic code should not call these flush functions directly. Some modes have inline implementations. */ +void __printf_buffer_flush_snprintf (struct __printf_buffer_snprintf *) + attribute_hidden; struct __printf_buffer_to_file; void __printf_buffer_flush_to_file (struct __printf_buffer_to_file *) attribute_hidden; +struct __printf_buffer_fp; +void __printf_buffer_flush_fp (struct __printf_buffer_fp *) + attribute_hidden; +struct __printf_buffer_fp_to_wide; +void __printf_buffer_flush_fp_to_wide (struct __printf_buffer_fp_to_wide *) + attribute_hidden; +struct __printf_buffer_fphex_to_wide; +void __printf_buffer_flush_fphex_to_wide (struct + __printf_buffer_fphex_to_wide *) + attribute_hidden; struct __wprintf_buffer_to_file; void __wprintf_buffer_flush_to_file (struct __wprintf_buffer_to_file *) |