1258791Spjd/*- 2258791Spjd * Copyright (c) 2009-2010 The FreeBSD Foundation 3258791Spjd * Copyright (c) 2011 Pawel Jakub Dawidek <pjd@FreeBSD.org> 4258791Spjd * All rights reserved. 5258791Spjd * 6258791Spjd * This software was developed by Pawel Jakub Dawidek under sponsorship from 7258791Spjd * the FreeBSD Foundation. 8258791Spjd * 9258791Spjd * Redistribution and use in source and binary forms, with or without 10258791Spjd * modification, are permitted provided that the following conditions 11258791Spjd * are met: 12258791Spjd * 1. Redistributions of source code must retain the above copyright 13258791Spjd * notice, this list of conditions and the following disclaimer. 14258791Spjd * 2. Redistributions in binary form must reproduce the above copyright 15258791Spjd * notice, this list of conditions and the following disclaimer in the 16258791Spjd * documentation and/or other materials provided with the distribution. 17258791Spjd * 18258791Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 19258791Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20258791Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21258791Spjd * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 22258791Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23258791Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24258791Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25258791Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26258791Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27258791Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28258791Spjd * SUCH DAMAGE. 29258791Spjd * 30258791Spjd * $FreeBSD: releng/11.0/lib/libpjdlog/pjdlog.h 258791 2013-12-01 09:41:06Z pjd $ 31258791Spjd */ 32258791Spjd 33258791Spjd#ifndef _PJDLOG_H_ 34258791Spjd#define _PJDLOG_H_ 35258791Spjd 36258791Spjd#include <sys/cdefs.h> 37258791Spjd 38258791Spjd#include <errno.h> 39258791Spjd#include <stdarg.h> 40258791Spjd#include <sysexits.h> 41258791Spjd#include <syslog.h> 42258791Spjd 43258791Spjd#define PJDLOG_MODE_STD 0 44258791Spjd#define PJDLOG_MODE_SYSLOG 1 45258791Spjd#define PJDLOG_MODE_SOCK 2 46258791Spjd 47258791Spjdvoid pjdlog_init(int mode); 48258791Spjdvoid pjdlog_fini(void); 49258791Spjd 50258791Spjdvoid pjdlog_mode_set(int mode); 51258791Spjdint pjdlog_mode_get(void); 52258791Spjd 53258791Spjd#ifdef notyet 54258791Spjdvoid pjdlog_sock_set(int sock); 55258791Spjdint pjdlog_sock_get(void); 56258791Spjd#endif 57258791Spjd 58258791Spjdvoid pjdlog_debug_set(int level); 59258791Spjdint pjdlog_debug_get(void); 60258791Spjd 61258791Spjdvoid pjdlog_prefix_set(const char *fmt, ...) __printflike(1, 2); 62258791Spjdvoid pjdlogv_prefix_set(const char *fmt, va_list ap) __printflike(1, 0); 63258791Spjdconst char *pjdlog_prefix_get(void); 64258791Spjdvoid pjdlog_prefix_push(const char *fmt, ...) __printflike(1, 2); 65258791Spjdvoid pjdlogv_prefix_push(const char *fmt, va_list ap) __printflike(1, 0); 66258791Spjdvoid pjdlog_prefix_pop(void); 67258791Spjd 68258791Spjdvoid _pjdlogv_common(const char *func, const char *file, int line, int loglevel, 69258791Spjd int debuglevel, int error, const char *fmt, va_list ap) __printflike(7, 0); 70258791Spjdvoid _pjdlog_common(const char *func, const char *file, int line, int loglevel, 71258791Spjd int debuglevel, int error, const char *fmt, ...) __printflike(7, 8); 72258791Spjd 73258791Spjdvoid _pjdlogv_exit(const char *func, const char *file, int line, int exitcode, 74258791Spjd int error, const char *fmt, va_list ap) __printflike(6, 0) __dead2; 75258791Spjdvoid _pjdlog_exit(const char *func, const char *file, int line, int exitcode, 76258791Spjd int error, const char *fmt, ...) __printflike(6, 7) __dead2; 77258791Spjd 78258791Spjdvoid _pjdlog_abort(const char *func, const char *file, int line, int error, 79258791Spjd const char *failedexpr, const char *fmt, ...) __printflike(6, 7) __dead2; 80258791Spjd 81258791Spjd#ifdef notyet 82258791Spjdint pjdlog_receive(int sock); 83258791Spjd#endif 84258791Spjd 85258791Spjd#define pjdlogv_common(loglevel, debuglevel, error, fmt, ap) \ 86258791Spjd _pjdlogv_common(__func__, __FILE__, __LINE__, (loglevel), \ 87258791Spjd (debuglevel), (error), (fmt), (ap)) 88258791Spjd#define pjdlog_common(loglevel, debuglevel, error, ...) \ 89258791Spjd _pjdlog_common(__func__, __FILE__, __LINE__, (loglevel), \ 90258791Spjd (debuglevel), (error), __VA_ARGS__) 91258791Spjd 92258791Spjd#define pjdlogv(loglevel, fmt, ap) \ 93258791Spjd pjdlogv_common((loglevel), 0, -1, (fmt), (ap)) 94258791Spjd#define pjdlog(loglevel, ...) \ 95258791Spjd pjdlog_common((loglevel), 0, -1, __VA_ARGS__) 96258791Spjd 97258791Spjd#define pjdlogv_emergency(fmt, ap) pjdlogv(LOG_EMERG, (fmt), (ap)) 98258791Spjd#define pjdlog_emergency(...) pjdlog(LOG_EMERG, __VA_ARGS__) 99258791Spjd#define pjdlogv_alert(fmt, ap) pjdlogv(LOG_ALERT, (fmt), (ap)) 100258791Spjd#define pjdlog_alert(...) pjdlog(LOG_ALERT, __VA_ARGS__) 101258791Spjd#define pjdlogv_critical(fmt, ap) pjdlogv(LOG_CRIT, (fmt), (ap)) 102258791Spjd#define pjdlog_critical(...) pjdlog(LOG_CRIT, __VA_ARGS__) 103258791Spjd#define pjdlogv_error(fmt, ap) pjdlogv(LOG_ERR, (fmt), (ap)) 104258791Spjd#define pjdlog_error(...) pjdlog(LOG_ERR, __VA_ARGS__) 105258791Spjd#define pjdlogv_warning(fmt, ap) pjdlogv(LOG_WARNING, (fmt), (ap)) 106258791Spjd#define pjdlog_warning(...) pjdlog(LOG_WARNING, __VA_ARGS__) 107258791Spjd#define pjdlogv_notice(fmt, ap) pjdlogv(LOG_NOTICE, (fmt), (ap)) 108258791Spjd#define pjdlog_notice(...) pjdlog(LOG_NOTICE, __VA_ARGS__) 109258791Spjd#define pjdlogv_info(fmt, ap) pjdlogv(LOG_INFO, (fmt), (ap)) 110258791Spjd#define pjdlog_info(...) pjdlog(LOG_INFO, __VA_ARGS__) 111258791Spjd 112258791Spjd#define pjdlog_debug(debuglevel, ...) \ 113258791Spjd pjdlog_common(LOG_DEBUG, (debuglevel), -1, __VA_ARGS__) 114258791Spjd#define pjdlogv_debug(debuglevel, fmt, ap) \ 115258791Spjd pjdlogv_common(LOG_DEBUG, (debuglevel), -1, (fmt), (ap)) 116258791Spjd 117258791Spjd#define pjdlog_errno(loglevel, ...) \ 118258791Spjd pjdlog_common((loglevel), 0, (errno), __VA_ARGS__) 119258791Spjd#define pjdlogv_errno(loglevel, fmt, ap) \ 120258791Spjd pjdlogv_common((loglevel), 0, (errno), (fmt), (ap)) 121258791Spjd 122258791Spjd#define pjdlogv_exit(exitcode, fmt, ap) \ 123258791Spjd _pjdlogv_exit(__func__, __FILE__, __LINE__, (exitcode), \ 124258791Spjd (errno), (fmt), (ap)) 125258791Spjd#define pjdlog_exit(exitcode, ...) \ 126258791Spjd _pjdlog_exit(__func__, __FILE__, __LINE__, (exitcode), (errno), \ 127258791Spjd __VA_ARGS__) 128258791Spjd 129258791Spjd#define pjdlogv_exitx(exitcode, fmt, ap) \ 130258791Spjd _pjdlogv_exit(__func__, __FILE__, __LINE__, (exitcode), -1, \ 131258791Spjd (fmt), (ap)) 132258791Spjd#define pjdlog_exitx(exitcode, ...) \ 133258791Spjd _pjdlog_exit(__func__, __FILE__, __LINE__, (exitcode), -1, \ 134258791Spjd __VA_ARGS__) 135258791Spjd 136258791Spjd#define PJDLOG_VERIFY(expr) do { \ 137258791Spjd if (!(expr)) { \ 138258791Spjd _pjdlog_abort(__func__, __FILE__, __LINE__, -1, #expr, \ 139258791Spjd __func__); \ 140258791Spjd } \ 141258791Spjd} while (0) 142258791Spjd#define PJDLOG_RVERIFY(expr, ...) do { \ 143258791Spjd if (!(expr)) { \ 144258791Spjd _pjdlog_abort(__func__, __FILE__, __LINE__, -1, #expr, \ 145258791Spjd __VA_ARGS__); \ 146258791Spjd } \ 147258791Spjd} while (0) 148258791Spjd#define PJDLOG_EVERIFY(expr) do { \ 149258791Spjd if (!(expr)) { \ 150258791Spjd _pjdlog_abort(__func__, __FILE__, __LINE__, errno, \ 151258791Spjd #expr, __func__); \ 152258791Spjd } \ 153258791Spjd} while (0) 154258791Spjd#define PJDLOG_ABORT(...) _pjdlog_abort(__func__, __FILE__, \ 155258791Spjd __LINE__, -1, NULL, __VA_ARGS__) 156258791Spjd#ifdef NDEBUG 157258791Spjd#define PJDLOG_ASSERT(expr) do { } while (0) 158258791Spjd#define PJDLOG_RASSERT(...) do { } while (0) 159258791Spjd#else 160258791Spjd#define PJDLOG_ASSERT(expr) do { \ 161258791Spjd if (!(expr)) { \ 162258791Spjd _pjdlog_abort(__func__, __FILE__, __LINE__, -1, #expr, \ 163258791Spjd __func__); \ 164258791Spjd } \ 165258791Spjd} while (0) 166258791Spjd#define PJDLOG_RASSERT(expr, ...) do { \ 167258791Spjd if (!(expr)) { \ 168258791Spjd _pjdlog_abort(__func__, __FILE__, __LINE__, -1, #expr, \ 169258791Spjd __VA_ARGS__); \ 170258791Spjd } \ 171258791Spjd} while (0) 172258791Spjd#endif 173258791Spjd 174258791Spjd#endif /* !_PJDLOG_H_ */ 175