diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/exit/atexit.c | 5 | ||||
| -rw-r--r-- | src/exit/exit.c | 11 | ||||
| -rw-r--r-- | src/stdio/__towrite.c | 5 | 
3 files changed, 12 insertions, 9 deletions
| diff --git a/src/exit/atexit.c b/src/exit/atexit.c index 49c060e6..6f00e374 100644 --- a/src/exit/atexit.c +++ b/src/exit/atexit.c @@ -12,18 +12,15 @@ static struct fl  	void (*f[COUNT])(void);  } builtin, *head; -static int run_atexit_functions(void) +void __funcs_on_exit()  {  	int i;  	for (; head; head=head->next) {  		for (i=COUNT-1; i>=0 && !head->f[i]; i--);  		for (; i>=0; i--) head->f[i]();  	} -	return 0;  } -int (*const __funcs_on_exit)(void) = run_atexit_functions; -  int atexit(void (*func)(void))  {  	static int lock; diff --git a/src/exit/exit.c b/src/exit/exit.c index bfdb3923..1ff19dbe 100644 --- a/src/exit/exit.c +++ b/src/exit/exit.c @@ -3,8 +3,11 @@  #include <stdio.h>  #include "libc.h" -/* __overflow.c and atexit.c override these */ -static int (*const dummy)() = 0; +static void dummy() +{ +} + +/* __towrite.c and atexit.c override these */  weak_alias(dummy, __funcs_on_exit);  weak_alias(dummy, __fflush_on_exit); @@ -16,8 +19,8 @@ void exit(int code)  	LOCK(&lock);  	/* Only do atexit & stdio flush if they were actually used */ -	if (__funcs_on_exit) __funcs_on_exit(); -	if (__fflush_on_exit) __fflush_on_exit((void *)0); +	__funcs_on_exit(); +	__fflush_on_exit();  	/* Destructor s**t is kept separate from atexit to avoid bloat */  	if (libc.fini) libc.fini(); diff --git a/src/stdio/__towrite.c b/src/stdio/__towrite.c index b4587419..4bf96f4d 100644 --- a/src/stdio/__towrite.c +++ b/src/stdio/__towrite.c @@ -18,4 +18,7 @@ int __towrite(FILE *f)  }  /* Link flush-on-exit code iff any stdio write functions are linked. */ -int (*const __fflush_on_exit)(FILE *) = fflush; +void __fflush_on_exit() +{ +	fflush(0); +} | 
