// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <printf.h>

#include <efi.h>
#include <efilib.h>
#include <utils.h>

#define PCBUFMAX 126
// buffer is two larger to leave room for a \0 and room
// for a \r that may be added after a \n

typedef struct {
    int off;
    CHAR16 buf[PCBUFMAX + 2];
} _pcstate;

static int _printf_console_out(const char* str, size_t len, void* _state) {
    _pcstate* state = _state;
    CHAR16* buf = state->buf;
    int i = state->off;
    int n = len;
    while (n > 0) {
        if (*str == '\n') {
            buf[i++] = '\r';
        }
        buf[i++] = *str++;
        if (i >= PCBUFMAX) {
            buf[i] = 0;
            gConOut->OutputString(gConOut, buf);
            i = 0;
        }
        n--;
    }
    state->off = i;
    return len;
}

int _printf(const char* fmt, ...) {
    va_list ap;
    _pcstate state;
    int r;
    state.off = 0;
    va_start(ap, fmt);
    r = _printf_engine(_printf_console_out, &state, fmt, ap);
    va_end(ap);
    if (state.off) {
        state.buf[state.off] = 0;
        gConOut->OutputString(gConOut, state.buf);
    }
    return r;
}
