home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
files
/
gnu
/
g__lib
/
atarist.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-07-23
|
2KB
|
130 lines
/* this file is NOT C++, it's C.
cf gnu-1.35\gnulib.c, these are extra things required by G++
*/
#define L_builtin_new
#define L_builtin_New
#define L_builtin_del
/* frills for C++ */
#ifdef L_builtin_new
typedef void (*vfp)();
extern vfp __new_handler;
char *
__builtin_new (sz)
long sz;
{
char *p;
p = (char *)malloc (sz);
if (p == 0)
(*__new_handler) ();
return p;
}
#endif
#ifdef L_builtin_New
/* this seems to be completely fukt... typedef void (*vfp)(); */
static void
default_new_handler ();
vfp __new_handler = default_new_handler;
char *
__builtin_vec_new (p, maxindex, size, ctor)
char *p;
int maxindex, size;
void (*ctor)();
{
int i, nelts = maxindex + 1;
char *rval;
if (p == 0)
p = (char *)__builtin_new (nelts * size);
rval = p;
for (i = 0; i < nelts; i++)
{
ctor (p);
p += size;
}
return rval;
}
vfp
__set_new_handler (handler)
vfp handler;
{
vfp prev_handler;
prev_handler = __new_handler;
if (handler == 0) handler = default_new_handler;
__new_handler = handler;
return prev_handler;
}
vfp
set_new_handler (handler)
vfp handler;
{
return __set_new_handler (handler);
}
static void
default_new_handler ()
{
/* don't use fprintf (stderr, ...) because it may need to call malloc. */
write (2, "default_new_handler: out of memory... aaaiiiiiieeeeeeeeeeeeee!\n", 65);
/* don't call exit () because that may call global destructors which
may cause a loop. */
_exit (-1);
}
#endif
#ifdef L_builtin_del
/* this ifdef added by jrd; this construct appears broken in the original */
#ifndef L_builtin_New
typedef void (*vfp)();
#endif
void
__builtin_delete (ptr)
char *ptr;
{
if (ptr)
free (ptr);
}
void
__builtin_vec_delete (ptr, maxindex, size, dtor, auto_delete_vec, auto_delete)
char *ptr;
int maxindex, size;
void (*dtor)();
int auto_delete;
{
int i, nelts = maxindex + 1;
char *p = ptr;
ptr += nelts * size;
for (i = 0; i < nelts; i++)
{
ptr -= size;
dtor (ptr, auto_delete);
}
if (auto_delete_vec)
free (p);
}
#endif