⛏️ index : haiku.git

/*
 * 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;
	}
}