home *** CD-ROM | disk | FTP | other *** search
/ Shareware 1 2 the Maxx / sw_1.zip / sw_1 / PROGRAM / DJLSR106.ZIP / LIBSRC / C / GNU / BI_NEW2.C < prev    next >
C/C++ Source or Header  |  1992-03-02  |  1KB  |  60 lines

  1. typedef void (*vfp)();
  2.  
  3. static void
  4. default_new_handler ();
  5.  
  6. vfp __new_handler = default_new_handler;
  7.  
  8. char *
  9. __builtin_vec_new (p, maxindex, size, ctor)
  10.      char *p;
  11.      int maxindex, size;
  12.      void (*ctor)();
  13. {
  14.   int i, nelts = maxindex + 1;
  15.   char *rval;
  16.  
  17.   if (p == 0)
  18.     p = (char *)__builtin_new (nelts * size);
  19.  
  20.   rval = p;
  21.  
  22.   for (i = 0; i < nelts; i++)
  23.     {
  24.       (*ctor) (p);
  25.       p += size;
  26.     }
  27.  
  28.   return rval;
  29. }
  30.  
  31. vfp
  32. __set_new_handler (handler)
  33.      vfp handler;
  34. {
  35.   vfp prev_handler;
  36.  
  37.   prev_handler = __new_handler;
  38.   if (handler == 0) handler = default_new_handler;
  39.   __new_handler = handler;
  40.   return prev_handler;
  41. }
  42.  
  43. vfp
  44. set_new_handler (handler)
  45.      vfp handler;
  46. {
  47.   return __set_new_handler (handler);
  48. }
  49.  
  50. static void
  51. default_new_handler ()
  52. {
  53.   /* don't use fprintf (stderr, ...) because it may need to call malloc.  */
  54.   write (2, "default_new_handler: out of memory... aaaiiiiiieeeeeeeeeeeeee!\n", 65);
  55.   /* don't call exit () because that may call global destructors which
  56.      may cause a loop.  */
  57.   _exit (-1);
  58. }
  59.  
  60.