1// Copyright 2016 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#pragma once
6
7#pragma GCC visibility push(hidden)
8
9#include <stdarg.h>
10#include <zircon/status.h>
11#include <zircon/types.h>
12
13// printl() is printf-like, understanding %s %p %d %u %x %zu %zd %zx.
14// No other formatting features are supported.
15void __PRINTFLIKE(2, 3) printl(zx_handle_t log, const char* fmt, ...);
16void vprintl(zx_handle_t log, const char* fmt, va_list ap);
17
18// fail() combines printl() with process exit
19_Noreturn void __PRINTFLIKE(2, 3) fail(zx_handle_t log, const char* fmt, ...);
20
21#define check(log, status, fmt, ...)                                    \
22    do {                                                                \
23        if (status != ZX_OK)                                            \
24            fail(log, "%s: " fmt,                                       \
25                 zx_status_get_string(status),##__VA_ARGS__);           \
26    } while (0)
27
28#pragma GCC visibility pop
29