2N/A/*
2N/A * Copyright (C) 2004, 2005, 2008 Internet Systems Consortium, Inc. ("ISC")
2N/A * Copyright (C) 1997, 1999, 2001 Internet Software Consortium.
2N/A *
2N/A * Permission to use, copy, modify, and/or distribute this software for any
2N/A * purpose with or without fee is hereby granted, provided that the above
2N/A * copyright notice and this permission notice appear in all copies.
2N/A *
2N/A * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
2N/A * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
2N/A * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
2N/A * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
2N/A * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
2N/A * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2N/A * PERFORMANCE OF THIS SOFTWARE.
2N/A */
2N/A
2N/A#if !defined(LINT) && !defined(CODECENTER)
2N/Astatic const char rcsid[] = "$Id: assertions.c,v 1.5 2008/11/14 02:36:51 marka Exp $";
2N/A#endif
2N/A
2N/A#include "port_before.h"
2N/A
2N/A#include <errno.h>
2N/A#include <stdio.h>
2N/A#include <stdlib.h>
2N/A#include <string.h>
2N/A
2N/A#include <isc/assertions.h>
2N/A
2N/A#include "port_after.h"
2N/A
2N/A/*
2N/A * Forward.
2N/A */
2N/A
2N/Astatic void default_assertion_failed(const char *, int, assertion_type,
2N/A const char *, int);
2N/A
2N/A/*
2N/A * Public.
2N/A */
2N/A
2N/Aassertion_failure_callback __assertion_failed = default_assertion_failed;
2N/A
2N/Avoid
2N/Aset_assertion_failure_callback(assertion_failure_callback f) {
2N/A if (f == NULL)
2N/A __assertion_failed = default_assertion_failed;
2N/A else
2N/A __assertion_failed = f;
2N/A}
2N/A
2N/Aconst char *
2N/Aassertion_type_to_text(assertion_type type) {
2N/A const char *result;
2N/A
2N/A switch (type) {
2N/A case assert_require:
2N/A result = "REQUIRE";
2N/A break;
2N/A case assert_ensure:
2N/A result = "ENSURE";
2N/A break;
2N/A case assert_insist:
2N/A result = "INSIST";
2N/A break;
2N/A case assert_invariant:
2N/A result = "INVARIANT";
2N/A break;
2N/A default:
2N/A result = NULL;
2N/A }
2N/A return (result);
2N/A}
2N/A
2N/A/*
2N/A * Private.
2N/A */
2N/A
2N/A/* coverity[+kill] */
2N/Astatic void
2N/Adefault_assertion_failed(const char *file, int line, assertion_type type,
2N/A const char *cond, int print_errno)
2N/A{
2N/A fprintf(stderr, "%s:%d: %s(%s)%s%s failed.\n",
2N/A file, line, assertion_type_to_text(type), cond,
2N/A (print_errno) ? ": " : "",
2N/A (print_errno) ? strerror(errno) : "");
2N/A abort();
2N/A /* NOTREACHED */
2N/A}
2N/A
2N/A/*! \file */