mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-26 00:57:22 +08:00
c1a61029fe
These fixes fall into a few different buckets. First c99 doesn't allow a parameter without a type. So in cases where the type had previously been an implicit int, make it an explicit int. Second, for return values, don't allow them to be implicit ints either, make them explicit. In a few cases change c89 function definitions to c99 function definitions. Lastly include <stdlib.h> in sbrk.c to get the prototype for abort () which we call when we detect a heap/stack collision.
32 lines
626 B
C
32 lines
626 B
C
#include <_ansi.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include "sys/syscall.h"
|
|
#include <stdlib.h>
|
|
|
|
extern int _write (int, char *, int);
|
|
caddr_t
|
|
_sbrk (int incr)
|
|
{
|
|
extern char heap_start[]; /* Defined by the linker script. */
|
|
static char * heap_end = NULL;
|
|
char * prev_heap_end;
|
|
char * sp = (char *) & sp;
|
|
|
|
if (heap_end == NULL)
|
|
heap_end = heap_start;
|
|
|
|
prev_heap_end = heap_end;
|
|
|
|
if (heap_end + incr > sp)
|
|
{
|
|
#define MESSAGE "Heap and stack collision\n"
|
|
_write (1, MESSAGE, sizeof MESSAGE);
|
|
abort ();
|
|
}
|
|
|
|
heap_end += incr;
|
|
|
|
return (caddr_t) prev_heap_end;
|
|
}
|