1/* 2 * Copyright 2009, Michael Lotz, mmlr@mlotz.ch. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "ATATracing.h" 7 8#include <stdarg.h> 9 10#include <algorithm> 11 12 13static char sTraceBuffer[256]; 14static uint32 sTraceBufferOffset = 0; 15 16 17void 18ata_trace_printf(uint32 flags, const char *format, ...) 19{ 20 if (sTraceBufferOffset < sizeof(sTraceBuffer)) { 21 va_list arguments; 22 va_start(arguments, format); 23 size_t totalBytes = vsnprintf(sTraceBuffer + sTraceBufferOffset, 24 sizeof(sTraceBuffer) - sTraceBufferOffset, format, arguments); 25 sTraceBufferOffset += std::min(totalBytes, 26 sizeof(sTraceBuffer) - sTraceBufferOffset - 1); 27 va_end(arguments); 28 } 29 30 if (flags & ATA_TRACE_FLUSH) { 31#if ATA_TRACING 32 ktrace_printf(sTraceBuffer); 33#endif 34 if (flags & ATA_TRACE_SYSLOG) 35 dprintf(sTraceBuffer); 36 37 sTraceBufferOffset = 0; 38 } 39} 40