2002-02-26 09:45:59 +08:00
|
|
|
/* Copyright (C) 1991,1994-1996,1998,2001,2002 Free Software Foundation, Inc.
|
1996-12-04 09:41:39 +08:00
|
|
|
This file is part of the GNU C Library.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1996-12-04 09:41:39 +08:00
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 12:58:11 +08:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1996-12-04 09:41:39 +08:00
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
2001-07-06 12:58:11 +08:00
|
|
|
Lesser General Public License for more details.
|
1995-02-18 09:27:10 +08:00
|
|
|
|
2001-07-06 12:58:11 +08:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with the GNU C Library; if not, write to the Free
|
|
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
|
|
02111-1307 USA. */
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
#include <assert.h>
|
2001-08-17 12:49:12 +08:00
|
|
|
#include <libintl.h>
|
1995-02-18 09:27:10 +08:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <sysdep.h>
|
2001-12-06 16:49:08 +08:00
|
|
|
#include <unistd.h>
|
1995-02-18 09:27:10 +08:00
|
|
|
|
|
|
|
|
2001-08-11 17:25:47 +08:00
|
|
|
extern const char *__progname;
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1998-07-16 19:44:36 +08:00
|
|
|
#ifdef USE_IN_LIBIO
|
2001-08-17 12:49:12 +08:00
|
|
|
# include <wchar.h>
|
1998-07-17 03:28:34 +08:00
|
|
|
# include <libio/iolibio.h>
|
2002-02-26 09:45:59 +08:00
|
|
|
# define fflush(s) INTUSE(_IO_fflush) (s)
|
1998-07-16 19:44:36 +08:00
|
|
|
#endif
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
/* This function, when passed a string containing an asserted
|
|
|
|
expression, a filename, and a line number, prints a message
|
|
|
|
on the standard error stream of the form:
|
|
|
|
a.c:10: foobar: Assertion `a == b' failed.
|
|
|
|
It then aborts program execution via a call to `abort'. */
|
|
|
|
|
|
|
|
#ifdef FATAL_PREPARE_INCLUDE
|
1998-07-16 19:44:36 +08:00
|
|
|
# include FATAL_PREPARE_INCLUDE
|
1995-02-18 09:27:10 +08:00
|
|
|
#endif
|
|
|
|
|
|
|
|
void
|
1996-12-04 09:41:39 +08:00
|
|
|
__assert_fail (const char *assertion, const char *file, unsigned int line,
|
|
|
|
const char *function)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
2001-08-17 12:49:12 +08:00
|
|
|
char *buf;
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
#ifdef FATAL_PREPARE
|
|
|
|
FATAL_PREPARE;
|
|
|
|
#endif
|
|
|
|
|
2001-12-06 16:49:08 +08:00
|
|
|
if (__asprintf (&buf, _("%s%s%s:%u: %s%sAssertion `%s' failed.\n"),
|
|
|
|
__progname, __progname[0] ? ": " : "",
|
|
|
|
file, line,
|
|
|
|
function ? function : "", function ? ": " : "",
|
|
|
|
assertion) >= 0)
|
|
|
|
{
|
|
|
|
/* Print the message. */
|
2001-08-17 12:49:12 +08:00
|
|
|
#ifdef USE_IN_LIBIO
|
2001-12-06 16:49:08 +08:00
|
|
|
if (_IO_fwide (stderr, 0) > 0)
|
|
|
|
(void) __fwprintf (stderr, L"%s", buf);
|
|
|
|
else
|
2001-08-17 12:49:12 +08:00
|
|
|
#endif
|
2001-12-06 16:49:08 +08:00
|
|
|
(void) fputs (buf, stderr);
|
2001-08-17 12:49:12 +08:00
|
|
|
|
2001-12-06 16:49:08 +08:00
|
|
|
(void) fflush (stderr);
|
1995-02-18 09:27:10 +08:00
|
|
|
|
2001-12-06 16:49:08 +08:00
|
|
|
/* We have to free the buffer since the appplication might catch the
|
|
|
|
SIGABRT. */
|
|
|
|
free (buf);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
/* At least print a minimal message. */
|
|
|
|
#define STR_N_LEN(str) str, sizeof (str) - 1
|
|
|
|
__libc_write (STDERR_FILENO, STR_N_LEN ("Unexpected error.\n"));
|
2001-08-17 12:49:12 +08:00
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
abort ();
|
|
|
|
}
|
Update.
* sysdeps/mach/hurd/chown.c: Use INTDEF for __chown.
* sysdeps/unix/sysv/aix/chown.c: Likewise.
* sysdeps/unix/grantpt.c: Use INTUSE for __chown calls.
* sysdeps/unix/sysv/linux/m68k/chown.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/chown.c: Likewise.
* sysdeps/unix/sysv/linux/i386/chown.c: Use INTDEF2 to define
__chown_internal.
* sysdeps/unix/sysv/linux/s390/s390-32//chown.c: Likewise.
* intl/dcngettext.c [_LIBC]: Use INTUSE for __dcngettext.
* intl/dngettext.c [_LIBC] (DCNGETTEXT): Use INTUSE.
* intl/ngettext.c: Likewise.
* include/sys/socket.h: Declare __connect_internal and define
__connect macro if not NOT_IN_libc.
* sysdeps/mach/hurd/connect.c: Use INTDEF for __connect.
* sysdeps/unix/sysv/aix/connect.c: Likewise.
* sysdeps/unix/sysv/linux/connect.S: Add __connect_internal alias.
* include/unistd.h: Declare __close_internal and define __close macro
if not NOT_IN_libc.
* libio/libioP.h (JUMO0, JUMP1, JUMP2, JUMP3, WJUMP0, WJUMP1, WJUMP2,
WJUMP3): Add extra parenthesis to avoid expanding element names with
macors like __close.
* sysdeps/unix/syscalls.list: Add __close_internal alias.
* include/unistd.h: Declare __dup2_internal and define __dup2 macro
if not NOT_IN_libc.
* sysdeps/mach/hurd/dup2.c: Use INTDEF for __dup2.
* sysdeps/posix/dup2.c: Use INTDEF for __dup2.
* sysdeps/unix/syscalls.list: Add __dup2_internal alias.
* include/unistd.h: Declare __fork_internal and define __fork macro
if not NOT_IN_libc.
* sysdeps/mach/hurd/fork.c: Use INTDEF for __fork.
* sysdeps/unix/sysv/aix/fork.c: Likewise.
* sysdeps/unix/sysv/linux/syscalls.list: Add __fork_internal alias.
* include/stdio_ext.h: Declare __fsetlocking_internal and define
__fsetlocking macro to use it if not NOT_IN_libc.
* libio/__fsetlocking.c: Use INTDEF for __fsetlocking.
* libio/__fbufsize.c: Correct copyright.
* libio/__flbf.c: Likewise.
* libio/__fpending.c: Likewise.
* libio/__fpurge.c: Likewise.
* libio/__freadable.c: Likewise.
* libio/__freading.c: Likewise.
* libio/__fsetlocking.c: Likewise.
* libio/__fwritable.c: Likewise.
* libio/__fwriting.c: Likewise.
* include/stdio.h: Declare __asprintf_internal and define __asprintf
macro to use it if not NOT_IN_libc.
* stdio-common/asprintf.c: Use INTDEF for __asprintf.
* include/mntent.h: Declare __setmntent_internal,
__getmntent_r_internal, __endmntent_internal. Define __setmntent,
__getmntent_r, and __endmntent macros to use these functions if not
NOT_IN_libc.
* misc/mntent_r.c: Use INTDEF for __setmntent, __getmntent_r, and
__endmntent.
* include/math.h: Declare __finite_internal, __finitef_internal, and
__finitel_internal. Redefine isfinite macro if in libc or libm using
these functions.
* sysdeps/generic/s_ldexp.c: Use INTUSE for __finite calls.
* sysdeps/generic/s_ldexpf.c: Use INTUSE for __finitef calls.
* sysdeps/generic/s_ldexpl.c: Use INTUSE for __finitel calls.
* sysdeps/i386/fpu/s_finite.S: Define _internal alias.
* sysdeps/i386/fpu/s_finitef.S: Likewise.
* sysdeps/i386/fpu/s_finitel.S: Likewise.
* sysdeps/ieee754/dbl-64/s_finite.c: Likewise.
* sysdeps/ieee754/flt-32/s_finitef.c: Likewise.
* sysdeps/ieee754/ldbl-128/s_finitel.c: Likewise.
* sysdeps/ieee754/ldbl-96/s_finitel.c: Likewise.
* include/fcntl.h: Declare __fcntl_internal. Define __fcntl macro
to use this function if not NOT_IN_libc.
* libio/iofdopen.c (_IO_fcntl): Use INTUSE.
* sysdeps/generic/fcntl.c: Use INTDEF for __fcntl.
* sysdeps/mach/hurd/fcntl.c: Likewise.
* sysdeps/unix/sysv/aix/fcntl.c: Likewise.
* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
* include/argz.h: Declare __argz_count_internal and
__argz_stringify_internal.
* intl/l10nflist.c [_LIBC]: Use INTUSE for __argz_count and
__argz_stringify.
* string/argz-count.c: Use INTDEF for __argz_count.
* string/argz-stringify.c: Use INTDEF for __argz_stringify.
* include/stdlib.h: Declare __cxa_atexit_internal and define
__cxa_atexit macro if not NOT_IN_libc.
* stdlib/cxa_atexit.c: Use INTDEF for __cxa_atexit.
* dlfcn/Makefile: Define NOT_IN_libc when compiling modcxaatexit.c.
* assert/assert.c: Use INTDEF for __assert_fail.
* assert/__assert.c: Use INTUSE for call to __assert_fail.
* include/assert.h: Declare __assert_fail_internal.
2002-04-10 04:36:24 +08:00
|
|
|
INTDEF(__assert_fail)
|