blob: bc7f0a9771038dd0d9b574aa6cd81f0513a3d68c [file] [log] [blame]
Imre Kis2ccd8e82021-10-08 11:21:14 +02001// SPDX-License-Identifier: BSD-3-Clause
2/*
3 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
4 */
5
6#include "trace.h"
7#include <stdarg.h>
8#include <stdio.h>
9
10#if TRACE_LEVEL >= TRACE_LEVEL_ERROR
11#ifndef TRACE_PREFIX
12#error TRACE_PREFIX must be defined
13#endif /* TRACE_PREFIX */
14
15void trace_printf(const char *func, int line, int level, const char *fmt, ...)
16{
17 char buffer[256];
18 char level_char = 0;
19 int offset = 0;
20 va_list ap;
21 static const char levels[] = {'E', 'I', 'D'};
22
23 if (TRACE_LEVEL_ERROR <= level && TRACE_LEVEL_DEBUG >= level)
24 level_char = levels[level - TRACE_LEVEL_ERROR];
25 else
26 level_char = '?';
27
28 offset = snprintf(buffer, sizeof(buffer), "%c/" TRACE_PREFIX ": %s:%d ",
29 level_char, func, line);
30
31 if (offset < sizeof(buffer)) {
32 va_start(ap, fmt);
33 vsnprintf(buffer + offset, sizeof(buffer) - offset, fmt, ap);
34 va_end(ap);
35 }
36
37 trace_puts(buffer);
38}
39#endif