assfail.h revision 274623
1240303Smm/*- 2240303Smm * Copyright (c) 2012 Martin Matuska <mm@FreeBSD.org> 3240303Smm * All rights reserved. 4240303Smm * 5240303Smm * Redistribution and use in source and binary forms, with or without 6240303Smm * modification, are permitted provided that the following conditions 7240303Smm * are met: 8240303Smm * 1. Redistributions of source code must retain the above copyright 9240303Smm * notice, this list of conditions and the following disclaimer. 10240303Smm * 2. Redistributions in binary form must reproduce the above copyright 11240303Smm * notice, this list of conditions and the following disclaimer in the 12240303Smm * documentation and/or other materials provided with the distribution. 13240303Smm * 14240303Smm * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND 15240303Smm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16240303Smm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17240303Smm * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE 18240303Smm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19240303Smm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20240303Smm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21240303Smm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22240303Smm * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23240303Smm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24240303Smm * SUCH DAMAGE. 25240303Smm * 26240303Smm * $FreeBSD: stable/10/sys/cddl/compat/opensolaris/sys/assfail.h 274623 2014-11-17 13:26:50Z avg $ 27240303Smm */ 28240303Smm 29240303Smm#ifndef _OPENSOLARIS_SYS_ASSFAIL_H_ 30240303Smm#define _OPENSOLARIS_SYS_ASSFAIL_H_ 31240303Smm 32240303Smm#include <sys/types.h> 33240415Smm#ifndef _KERNEL 34240415Smm#include <stdio.h> 35240415Smm#include <stdlib.h> 36240415Smm#endif 37240303Smm 38240303Smm#ifdef __cplusplus 39240303Smmextern "C" { 40240303Smm#endif 41240303Smm 42240415Smm#ifdef _KERNEL 43240303Smmint assfail(const char *, const char *, int); 44240303Smmvoid assfail3(const char *, uintmax_t, const char *, uintmax_t, const char *, 45240303Smm int); 46240415Smm#else /* !defined(_KERNEL) */ 47240303Smm 48240415Smm#ifndef HAVE_ASSFAIL 49274623Savgextern int aok; 50274623Savg 51240415Smmstatic __inline int 52240415Smm__assfail(const char *expr, const char *file, int line) 53240415Smm{ 54240415Smm 55240415Smm (void)fprintf(stderr, "Assertion failed: (%s), file %s, line %d.\n", 56240415Smm expr, file, line); 57274623Savg if (!aok) 58274623Savg abort(); 59240415Smm return (0); 60240415Smm} 61240415Smm#define assfail __assfail 62240415Smm#endif 63240415Smm 64240415Smm#ifndef HAVE_ASSFAIL3 65274623Savgextern int aok; 66274623Savg 67240415Smmstatic __inline void 68240415Smm__assfail3(const char *expr, uintmax_t lv, const char *op, uintmax_t rv, 69240415Smm const char *file, int line) { 70240415Smm 71240415Smm (void)fprintf(stderr, 72240415Smm "Assertion failed: %s (0x%jx %s 0x%jx), file %s, line %d.\n", 73240415Smm expr, lv, op, rv, file, line); 74274623Savg if (!aok) 75274623Savg abort(); 76240415Smm} 77240415Smm#define assfail3 __assfail3 78240415Smm#endif 79240415Smm 80240415Smm#endif /* !defined(_KERNEL) */ 81240415Smm 82240303Smm#ifdef __cplusplus 83240303Smm} 84240303Smm#endif 85240303Smm 86240303Smm#endif /* _OPENSOLARIS_SYS_ASSFAIL_H_ */ 87