home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_09_10 / 9n10072c < prev    next >
Text File  |  1991-07-09  |  2KB  |  61 lines

  1. /* These enhanced "wrappers" pad the dynamic object
  2.    with a serial number and a trailing fence post.
  3. */   
  4.  
  5. #ifndef HWRAPPER
  6. #ifdef DEBUG
  7. #define HWRAPPER
  8.  
  9. #define SIGWORD 0xAA55
  10.  
  11. int count;
  12. int fcount;   /* count free calls separately */
  13. FILE * log;
  14.  
  15. void my_free(void * tree)
  16. {
  17.         char * adjptr;
  18.         char * fenceptr;
  19.         
  20.         fenceptr = adjptr = (char *) tree;
  21.     adjptr -= sizeof(size_t);  /* step back to size */
  22.     fenceptr += * ((size_t *) adjptr);  /* add size */
  23.     adjptr -= sizeof(int);
  24.     if (log == NULL) log = fopen("log","w");
  25.     fprintf(log,"%p %5.5d free %d\n",adjptr, * ((int * ) adjptr),fcount);
  26.     if (*( (unsigned int *) fenceptr) != SIGWORD)
  27.        fprintf(log,"%p %5.5d damaged object %d\n",adjptr,
  28.             * ((int *) adjptr), fcount);
  29.     fcount += 1;
  30.         free( (void *) adjptr );
  31. }
  32.  
  33. void * my_alloc(size_t size)
  34. {
  35.     void * temp;
  36.         char * adjptr;
  37.         size_t lsize;
  38.             
  39.     if (log == NULL) log = fopen("log","w");
  40.     lsize = size + sizeof(int) + sizeof(unsigned int) + sizeof(size_t);
  41.     temp = (void *) malloc(lsize);
  42.     fprintf(log,"%p %5.5d anew\n",temp,count);
  43.  
  44.         adjptr = (char *) temp;
  45.         *( (int * ) adjptr ) = count++;
  46.         adjptr += sizeof(int);
  47.         *( (size_t *) adjptr) = size;
  48.         temp = (void *) (adjptr += sizeof(size_t));
  49.         adjptr += size;
  50.         *( (unsigned int *) adjptr) = SIGWORD;
  51.     return temp ;
  52. }
  53.  
  54. #define malloc(x) my_alloc(x)
  55.  
  56. #define free(x)  my_free(x)
  57.  
  58. #endif
  59. #endif
  60.  
  61.