16#error "_PRINT_WRITE not defined"
20#error "_PRINT_FILL not defined"
96 char paddingChar =
' ';
136#define _PRINT_INTEGER_PUSH(integer, c) (*--(integer)->dataPtr = (c))
138#define _PRINT_INTEGER_PREFIX_PUSH(integer, c) (*--(integer)->prefixPtr = (c))
140#define _PRINT_INTEGER_LEN(integer) ((int)((sizeof((integer)->data)) - ((integer)->dataPtr - (integer)->data)))
142#define _PRINT_INTEGER_PREFIX_LEN(integer) \
143 ((int)((sizeof((integer)->prefix)) - ((integer)->prefixPtr - (integer)->prefix)))
151 if (integer->
base == 8)
155 else if (integer->
base == 16)
171 else if (integerLen < format->precision)
173 precision =
format->precision - integerLen;
176 if (integer->
sign < 0)
180 else if (integer->
sign > 0)
195 if (prefixLen > 0 && padZeroes)
210 if (prefixLen > 0 && !padZeroes)
243 value = (
signed char)
va_arg(ctx->
arg,
int);
246 value = (
short int)
va_arg(ctx->
arg,
int);
268 .dataPtr = integer.
data +
sizeof(integer.
data),
279 while (uvalue >= 100)
281 unsigned index = (uvalue % 100) * 2;
305 value = (
unsigned char)
va_arg(ctx->
arg,
unsigned int);
308 value = (
unsigned short int)
va_arg(ctx->
arg,
unsigned int);
311 value =
va_arg(ctx->
arg,
unsigned long int);
314 value =
va_arg(ctx->
arg,
unsigned long long int);
330 .dataPtr = integer.
data +
sizeof(integer.
data),
338 unsigned int index = (value % 100) * 2;
395 const char* s =
va_arg(ctx->
arg,
const char*);
402 for (
int i = 0; s[i] !=
'\0' && (
format->precision ==
EOF || i <
format->precision); i++)
424 signed int* written =
va_arg(ctx->
arg,
signed int*);
425 *written = (
signed int)ctx->
written;
557 char specifier = *ctx->
p;
590 format.flags &= ~_PRINT_PAD_ZERO;
594 format.flags &= ~_PRINT_PAD_ZERO;
600 format.precision = 2 *
sizeof(
void*);
#define assert(expression)
static char format[MAX_NAME]
static char _int_to_digit(uint8_t i)
#define _PRINT_INTEGER_PREFIX_LEN(integer)
static int _print_format(_print_ctx_t *ctx)
static int _print_format_written(_print_ctx_t *ctx)
static int _print_format_char(_print_ctx_t *ctx, _print_format_ctx_t *format)
#define _PRINT_INTEGER_PUSH(integer, c)
#define _PRINT_INTEGER_LEN(integer)
static int _print_padding_left(_print_ctx_t *ctx, _print_format_ctx_t *format, int len)
static int _print_format_percent(_print_ctx_t *ctx)
static int _print_format_string(_print_ctx_t *ctx, _print_format_ctx_t *format)
#define _PRINT_INTEGER_PREFIX_PUSH(integer, c)
static int _print_format_unsigned_integer(_print_ctx_t *ctx, _print_format_ctx_t *format, uint32_t base)
static int _print(const char *_RESTRICT format, size_t n, va_list arg, void *data)
static int _print_padding_right(_print_ctx_t *ctx, _print_format_ctx_t *format, int padding)
static int _print_integer_print(_print_ctx_t *ctx, _print_format_ctx_t *format, _print_integer_t *integer)
static int _print_format_signed_integer(_print_ctx_t *ctx, _print_format_ctx_t *format)
#define NULL
Pointer error value.
__UINTMAX_TYPE__ uintmax_t
__PTRDIFF_TYPE__ ptrdiff_t
#define va_copy(dest, src)
__builtin_va_list va_list
#define _PRINT_WRITE(ctx, buffer, count)
#define _PRINT_FILL(ctx, c, count)