Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int genprintf(void (*put)(void * ctx, char c), void * ctx, char const * fmt, va_list ArgList)
- {
- int len = 0;
- bool isNull = false;
- if (put == NULL)
- isNull = true;
- while (*fmt)
- {
- len++;
- if (*fmt == '%')
- {
- fmt++;
- if (*fmt == 'i')
- {
- fmt++;
- char Buff[64] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- int length = NumToString(Buff, sizeof(Buff), va_arg(ArgList, int), 10);
- len += length - 1;
- for (int i = 0; i < length; i++) {
- if (!isNull)
- put(ctx, Buff[i]);
- }
- }
- else if (*fmt == 'h')
- {
- fmt++;
- char Buff[64] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
- int length = NumToString(Buff, sizeof(Buff), va_arg(ArgList, int), 16);
- len += length - 1;
- if (!isNull)
- {
- put(ctx, '0');
- put(ctx, 'x');
- for (int i = 0; i < length; i++) {
- put(ctx, Buff[i]);
- }
- }
- }
- }
- else
- {
- if (!isNull)
- put(ctx, *fmt);
- fmt++;
- }
- }
- return len;
- }
- void kprintf(void (*put)(void * ctx, char c), void * ctx, char const * fmt, ...)
- {
- va_list vaList;
- va_start(vaList, fmt);
- genprintf(put, ctx, fmt, vaList);
- va_end(vaList);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement