22 #ifndef LELY_UTIL_PRINT_H_
23 #define LELY_UTIL_PRINT_H_
31 #ifndef LELY_UTIL_PRINT_INLINE
32 #define LELY_UTIL_PRINT_INLINE static inline
41 #pragma GCC diagnostic ignored "-Wformat"
42 #pragma GCC diagnostic ignored "-Wformat-extra-args"
89 LELY_UTIL_PRINT_INLINE
int otoc(
int i);
96 LELY_UTIL_PRINT_INLINE
int xtoc(
int i);
117 size_t print_fmt(
char **pbegin,
char *end,
const char *format, ...)
118 format_printf__(3, 4);
125 size_t vprint_fmt(
char **pbegin,
char *end,
const char *format, va_list ap)
126 format_printf__(3, 0);
143 LELY_UTIL_PRINT_INLINE
size_t print_char(
char **pbegin,
char *end,
int c);
164 size_t print_utf8(
char **pbegin,
char *end, char32_t c32);
186 size_t print_c99_esc(
char **pbegin,
char *end, char32_t c32);
209 size_t print_c99_str(
char **pbegin,
char *end,
const char *s,
size_t n);
212 #define LELY_UTIL_DEFINE_PRINT(type, suffix, name) \
226 size_t print_c99_##suffix( \
227 char **pbegin, char *end, type name);
230 LELY_UTIL_DEFINE_PRINT(
long,
long, l)
231 LELY_UTIL_DEFINE_PRINT(
unsigned long, ulong, ul)
232 LELY_UTIL_DEFINE_PRINT(
long long, llong, ll)
233 LELY_UTIL_DEFINE_PRINT(
unsigned long long, ullong, ul)
234 LELY_UTIL_DEFINE_PRINT(
float, flt, f)
235 LELY_UTIL_DEFINE_PRINT(
double, dbl, d)
236 LELY_UTIL_DEFINE_PRINT(
long double, ldbl, ld)
238 LELY_UTIL_DEFINE_PRINT(int_least8_t, i8, i8)
239 LELY_UTIL_DEFINE_PRINT(int_least16_t, i16, i16)
240 LELY_UTIL_DEFINE_PRINT(int_least32_t, i32, i32)
241 LELY_UTIL_DEFINE_PRINT(int_least64_t, i64, i64)
242 LELY_UTIL_DEFINE_PRINT(uint_least8_t, u8, u8)
243 LELY_UTIL_DEFINE_PRINT(uint_least16_t, u16, u16)
244 LELY_UTIL_DEFINE_PRINT(uint_least32_t, u32, u32)
245 LELY_UTIL_DEFINE_PRINT(uint_least64_t, u64, u64)
247 #undef LELY_UTIL_DEFINE_PRINT
268 size_t print_base64(
char **pbegin,
char *end,
const void *ptr,
size_t n);
270 LELY_UTIL_PRINT_INLINE
int
273 return '0' + (i & 7);
276 LELY_UTIL_PRINT_INLINE
int
282 #if __STDC_ISO_10646__ && !__STDC_MB_MIGHT_NEQ_WC__
286 case 0xa:
return 'a';
287 case 0xb:
return 'b';
288 case 0xc:
return 'c';
289 case 0xd:
return 'd';
290 case 0xe:
return 'e';
291 case 0xf:
return 'f';
297 LELY_UTIL_PRINT_INLINE
size_t
300 if (pbegin && *pbegin && (!end || *pbegin < end))
301 *(*pbegin)++ = (
unsigned char)c;
This is the public header file of the utilities library.
size_t print_c99_str(char **pbegin, char *end, const char *s, size_t n)
Prints a UTF-8 encoded Unicode string to a memory buffer.
size_t vprint_fmt(char **pbegin, char *end, const char *format, va_list ap)
Prints a formatted string to a memory buffer.
size_t print_char(char **pbegin, char *end, int c)
Prints a single character to a memory buffer.
int xtoc(int i)
Returns the character corresponding to the hexadecimal digit i.
size_t print_c99_esc(char **pbegin, char *end, char32_t c32)
Prints a UTF-8 encoded Unicode character to a memory buffer.
size_t print_base64(char **pbegin, char *end, const void *ptr, size_t n)
Prints the Base64 representation of binary data to a memory buffer.
size_t print_utf8(char **pbegin, char *end, char32_t c32)
Prints a UTF-8 encoded Unicode character to a memory buffer.
int otoc(int i)
Returns the character corresponding to the octal digit i.
size_t print_fmt(char **pbegin, char *end, const char *format,...)
Prints a formatted string to a memory buffer.
This header file is part of the C11 and POSIX compatibility library; it includes <stddef....
This header file is part of the C11 and POSIX compatibility library; it includes <uchar....