blob: 728257fa831a774b30c13c022b98f18b828e0fb4 [file] [log] [blame]
// SPDX-License-Identifier: BSD-3-Clause
/*
* Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
*/
#include "trace.h"
#include <stdarg.h>
#include <stdio.h>
#if TRACE_LEVEL >= TRACE_LEVEL_ERROR
#ifndef TRACE_PREFIX
#error TRACE_PREFIX must be defined
#endif /* TRACE_PREFIX */
void (*trace_puts_interface)(const char *str) = &trace_puts;
void ts_trace_printf(const char *func, int line, int level, const char *fmt, ...)
{
char buffer[256];
char level_char = 0;
int offset = 0;
va_list ap;
static const char levels[] = {'E', 'I', 'D'};
if (TRACE_LEVEL_ERROR <= level && TRACE_LEVEL_DEBUG >= level)
level_char = levels[level - TRACE_LEVEL_ERROR];
else
level_char = '?';
offset = snprintf(buffer, sizeof(buffer), "%c/" TRACE_PREFIX ": %s:%d ",
level_char, func, line);
if (offset < sizeof(buffer)) {
va_start(ap, fmt);
offset += vsnprintf(buffer + offset, sizeof(buffer) - offset, fmt, ap);
va_end(ap);
}
if (offset < sizeof(buffer) - 2) {
buffer[offset] = '\n';
buffer[offset + 1] = '\0';
} else {
buffer[sizeof(buffer) - 2] = '\n';
buffer[sizeof(buffer) - 1] = '\0';
}
(*trace_puts_interface)(buffer);
}
#endif