Support __func__ in assert, as required by C99.
* libc/stdlib/assert.c (__assert_func): New function. (__assert): Use __assert_func. * libc/include/assert.h (assert) [!NDEBUG]: Use __assert_func when possible.
This commit is contained in:
@ -9,11 +9,6 @@ ANSI_SYNOPSIS
|
||||
#include <assert.h>
|
||||
void assert(int <[expression]>);
|
||||
|
||||
TRAD_SYNOPSIS
|
||||
#include <assert.h>
|
||||
assert(<[expression]>)
|
||||
int <[expression]>;
|
||||
|
||||
DESCRIPTION
|
||||
Use this macro to embed debuggging diagnostic statements in
|
||||
your programs. The argument <[expression]> should be an
|
||||
@ -24,7 +19,11 @@ DESCRIPTION
|
||||
calls <<abort>>, after first printing a message showing what
|
||||
failed and where:
|
||||
|
||||
. Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>
|
||||
. Assertion failed: <[expression]>, file <[filename]>, line <[lineno]>, function: <[func]>
|
||||
|
||||
If the name of the current function is not known (for example,
|
||||
when using a C89 compiler that does not understand __func__),
|
||||
the function location is omitted.
|
||||
|
||||
The macro is defined to permit you to turn off all uses of
|
||||
<<assert>> at compile time by defining <<NDEBUG>> as a
|
||||
@ -48,15 +47,28 @@ Supporting OS subroutines required (only if enabled): <<close>>, <<fstat>>,
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/* func can be NULL, in which case no function information is given. */
|
||||
void
|
||||
_DEFUN (__assert_func, (file, line, func, failedexpr),
|
||||
const char *file _AND
|
||||
int line _AND
|
||||
const char *func _AND
|
||||
const char *failedexpr)
|
||||
{
|
||||
fiprintf(stderr,
|
||||
"assertion \"%s\" failed: file \"%s\", line %d%s%s\n",
|
||||
failedexpr, file, line,
|
||||
func ? ", function: " : "", func ? func : "");
|
||||
abort();
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
void
|
||||
_DEFUN (__assert, (file, line, failedexpr),
|
||||
const char *file _AND
|
||||
int line _AND
|
||||
const char *failedexpr)
|
||||
{
|
||||
(void)fiprintf(stderr,
|
||||
"assertion \"%s\" failed: file \"%s\", line %d\n",
|
||||
failedexpr, file, line);
|
||||
abort();
|
||||
__assert_func (file, line, NULL, failedexpr);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
Reference in New Issue
Block a user