1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-29 08:08:37 +00:00

Make it possible to override the function which writes messages to

stderr in case of warnings and errors.

Rename malloc_options to have a leading underscore, I belive I have been
told that is more correct namespace wise.
This commit is contained in:
Poul-Henning Kamp 2000-11-26 10:30:18 +00:00
parent a16f31237a
commit 798c1fd885
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=69201
3 changed files with 35 additions and 18 deletions

View File

@ -115,6 +115,9 @@ int mbtowc __P((wchar_t *, const char *, size_t));
size_t wcstombs __P((char *, const wchar_t *, size_t));
#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
extern char *_malloc_options;
extern void (*_malloc_message)__P((char *p1, char *p2, char *p3, char *p4));
int putenv __P((const char *));
int setenv __P((const char *, const char *, int));

View File

@ -57,7 +57,9 @@
.Ft void
.Fn free "void *ptr"
.Ft char *
.Va malloc_options;
.Va _malloc_options
.Ft void
.Va (*_malloc_message)(char *p1, char *p2, char *p3, char *p4)
.Sh DESCRIPTION
The
.Fn malloc
@ -146,7 +148,7 @@ The ``name'' of the file referenced by the symbolic link named
the value of the environment variable
.Ev MALLOC_OPTIONS ,
and the string pointed to by the global variable
.Va malloc_options
.Va _malloc_options
will be interpreted, in that order, character by character as flags.
.Pp
Most flags are single letters,
@ -211,8 +213,7 @@ core (using
This option should be set at compile time by including the following in
the source code:
.Bd -literal -offset indent
extern char *malloc_options;
malloc_options = "X";
_malloc_options = "X";
.Ed
.It Z
This option implicitly sets the
@ -249,8 +250,7 @@ ln -s 'A<' /etc/malloc.conf
To specify in the source that a program does no return value checking
on calls to these functions:
.Bd -literal -offset indent
extern char *malloc_options;
malloc_options = "X";
_malloc_options = "X";
.Ed
.Sh ENVIRONMENT
The following environment variables affect the execution of the allocation
@ -364,6 +364,14 @@ If the
.Dq A
option is set, all warnings are treated as errors.
.Pp
The
.Va _malloc_message
variable allows the programmer to override the function which emits
the text strings forming the errors and warnings if for some reason
the stderr filedescriptor is not suitable for this.
Please note that doing anything which tries to allocate memory in
this function will certain suicide for the process.
.Pp
The following is a brief description of possible error messages and
their meanings:
.Pp

View File

@ -251,7 +251,7 @@ static void *malloc_brk;
static struct pgfree *px;
/* compile-time options */
char *malloc_options;
char *_malloc_options;
/* Name of the current public function */
static char *malloc_func;
@ -269,30 +269,36 @@ static void *imalloc(size_t size);
static void ifree(void *ptr);
static void *irealloc(void *ptr, size_t size);
static void
wrtmessage(char *p1, char *p2, char *p3, char *p4)
{
_write(STDERR_FILENO, p1, strlen(p1));
_write(STDERR_FILENO, p2, strlen(p2));
_write(STDERR_FILENO, p3, strlen(p3));
_write(STDERR_FILENO, p4, strlen(p4));
}
void (*_malloc_message)(char *p1, char *p2, char *p3, char *p4) = wrtmessage;
extern char *__progname;
static void
wrterror(char *p)
{
char *q = " error: ";
_write(STDERR_FILENO, __progname, strlen(__progname));
_write(STDERR_FILENO, malloc_func, strlen(malloc_func));
_write(STDERR_FILENO, q, strlen(q));
_write(STDERR_FILENO, p, strlen(p));
suicide = 1;
_malloc_message(__progname, malloc_func, " error: ", p);
abort();
}
static void
wrtwarning(char *p)
{
char *q = " warning: ";
if (malloc_abort)
wrterror(p);
_write(STDERR_FILENO, __progname, strlen(__progname));
_write(STDERR_FILENO, malloc_func, strlen(malloc_func));
_write(STDERR_FILENO, q, strlen(q));
_write(STDERR_FILENO, p, strlen(p));
_malloc_message(__progname, malloc_func, " warning: ", p);
}
/*
@ -403,7 +409,7 @@ malloc_init ()
} else if (i == 1) {
p = getenv("MALLOC_OPTIONS");
} else {
p = malloc_options;
p = _malloc_options;
}
for (; p && *p; p++) {
switch (*p) {