blob: 0b8cb53d72244b10dbdee2b90dc65e05fb89dca9 [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);
Imre Kise56c7b12023-06-01 13:33:40 +020033 offset += vsnprintf(buffer + offset, sizeof(buffer) - offset, fmt, ap);
Imre Kis2ccd8e82021-10-08 11:21:14 +020034 va_end(ap);
35 }
36
Imre Kise56c7b12023-06-01 13:33:40 +020037 if (offset < sizeof(buffer) - 2) {
38 buffer[offset] = '\n';
39 buffer[offset + 1] = '\0';
40 } else {
41 buffer[sizeof(buffer) - 2] = '\n';
42 buffer[sizeof(buffer) - 1] = '\0';
43 }
44
Imre Kis2ccd8e82021-10-08 11:21:14 +020045 trace_puts(buffer);
46}
47#endif