root/src/add-ons/kernel/bus_managers/ata/ATATracing.cpp
/*
 * Copyright 2009, Michael Lotz, mmlr@mlotz.ch.
 * Distributed under the terms of the MIT License.
 */

#include "ATATracing.h"

#include <stdarg.h>

#include <algorithm>


static char sTraceBuffer[256];
static uint32 sTraceBufferOffset = 0;


void
ata_trace_printf(uint32 flags, const char *format, ...)
{
        if (sTraceBufferOffset < sizeof(sTraceBuffer)) {
                va_list arguments;
                va_start(arguments, format);
                size_t totalBytes = vsnprintf(sTraceBuffer + sTraceBufferOffset,
                        sizeof(sTraceBuffer) - sTraceBufferOffset, format, arguments);
                sTraceBufferOffset += std::min(totalBytes,
                        (size_t)(sizeof(sTraceBuffer) - sTraceBufferOffset - 1));
                va_end(arguments);
        }

        if (flags & ATA_TRACE_FLUSH) {
#if ATA_TRACING
                ktrace_printf(sTraceBuffer);
#endif
                if (flags & ATA_TRACE_SYSLOG)
                        dprintf("%s", sTraceBuffer);

                sTraceBufferOffset = 0;
        }
}