radv_util.c revision 01e04c3f
1/*
2 * Copyright © 2015 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 */
23
24#include <stdarg.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <errno.h>
29#include <assert.h>
30
31#include "radv_private.h"
32#include "radv_debug.h"
33#include "vk_enum_to_str.h"
34
35#include "util/u_math.h"
36
37/** Log an error message.  */
38void radv_printflike(1, 2)
39	radv_loge(const char *format, ...)
40{
41	va_list va;
42
43	va_start(va, format);
44	radv_loge_v(format, va);
45	va_end(va);
46}
47
48/** \see radv_loge() */
49void
50radv_loge_v(const char *format, va_list va)
51{
52	fprintf(stderr, "vk: error: ");
53	vfprintf(stderr, format, va);
54	fprintf(stderr, "\n");
55}
56
57/** Log an error message.  */
58void radv_printflike(1, 2)
59	radv_logi(const char *format, ...)
60{
61	va_list va;
62
63	va_start(va, format);
64	radv_logi_v(format, va);
65	va_end(va);
66}
67
68/** \see radv_logi() */
69void
70radv_logi_v(const char *format, va_list va)
71{
72	fprintf(stderr, "radv: info: ");
73	vfprintf(stderr, format, va);
74	fprintf(stderr, "\n");
75}
76
77void radv_printflike(3, 4)
78	__radv_finishme(const char *file, int line, const char *format, ...)
79{
80	va_list ap;
81	char buffer[256];
82
83	va_start(ap, format);
84	vsnprintf(buffer, sizeof(buffer), format, ap);
85	va_end(ap);
86
87	fprintf(stderr, "%s:%d: FINISHME: %s\n", file, line, buffer);
88}
89
90VkResult
91__vk_errorf(struct radv_instance *instance, VkResult error, const char *file,
92	    int line, const char *format, ...)
93{
94	va_list ap;
95	char buffer[256];
96
97	const char *error_str = vk_Result_to_str(error);
98
99#ifndef DEBUG
100	if (instance && !(instance->debug_flags & RADV_DEBUG_ERRORS))
101		return error;
102#endif
103
104	if (format) {
105		va_start(ap, format);
106		vsnprintf(buffer, sizeof(buffer), format, ap);
107		va_end(ap);
108
109		fprintf(stderr, "%s:%d: %s (%s)\n", file, line, buffer, error_str);
110	} else {
111		fprintf(stderr, "%s:%d: %s\n", file, line, error_str);
112	}
113
114	return error;
115}
116
117