Back to index

tetex-bin  3.0
Defines | Functions
gmem.h File Reference
#include <stdio.h>
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define gMemReport(f)

Functions

voidgmalloc (int size)
voidgrealloc (void *p, int size)
void gfree (void *p)
char * copyString (char *s)

Define Documentation

#define gMemReport (   f)

Definition at line 41 of file gmem.h.


Function Documentation

char* copyString ( char *  s)

Definition at line 198 of file gmem.c.

                          {
  char *s1;

  s1 = (char *)gmalloc(strlen(s) + 1);
  strcpy(s1, s);
  return s1;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void gfree ( void p)

Definition at line 138 of file gmem.c.

                    {
#ifdef DEBUG_MEM
  int size;
  GMemHdr *hdr;
  GMemHdr *prevHdr, *q;
  int lst;
  unsigned long *trl, *clr;

  if (p) {
    hdr = (GMemHdr *)((char *)p - gMemHdrSize);
    lst = ((int)hdr >> gMemListShift) & gMemListMask;
    for (prevHdr = NULL, q = gMemList[lst]; q; prevHdr = q, q = q->next) {
      if (q == hdr)
       break;
    }
    if (q) {
      if (prevHdr)
       prevHdr->next = hdr->next;
      else
       gMemList[lst] = hdr->next;
      --gMemAlloc;
      size = gMemDataSize(hdr->size);
      trl = (unsigned long *)((char *)hdr + gMemHdrSize + size);
      if (*trl != gMemDeadVal) {
       fprintf(stderr, "Overwrite past end of block %d at address %p\n",
              hdr->index, p);
      }
      for (clr = (unsigned long *)hdr; clr <= trl; ++clr)
       *clr = gMemDeadVal;
      free(hdr);
    } else {
      fprintf(stderr, "Attempted to free bad address %p\n", p);
    }
  }
#else
  if (p)
    free(p);
#endif
}

Here is the call graph for this function:

void* gmalloc ( int  size)

Definition at line 56 of file gmem.c.

                        {
#ifdef DEBUG_MEM
  int size1;
  char *mem;
  GMemHdr *hdr;
  void *data;
  int lst;
  unsigned long *trl, *p;

  if (size == 0)
    return NULL;
  size1 = gMemDataSize(size);
  if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) {
    fprintf(stderr, "Out of memory\n");
    exit(1);
  }
  hdr = (GMemHdr *)mem;
  data = (void *)(mem + gMemHdrSize);
  trl = (unsigned long *)(mem + gMemHdrSize + size1);
  hdr->size = size;
  hdr->index = gMemIndex++;
  lst = ((int)hdr >> gMemListShift) & gMemListMask;
  hdr->next = gMemList[lst];
  gMemList[lst] = hdr;
  ++gMemAlloc;
  for (p = (unsigned long *)data; p <= trl; ++p)
    *p = gMemDeadVal;
  return data;
#else
  void *p;

  if (size == 0)
    return NULL;
  if (!(p = malloc(size))) {
    fprintf(stderr, "Out of memory\n");
    exit(1);
  }
  return p;
#endif
}

Here is the call graph for this function:

void* grealloc ( void p,
int  size 
)

Definition at line 97 of file gmem.c.

                                  {
#ifdef DEBUG_MEM
  GMemHdr *hdr;
  void *q;
  int oldSize;

  if (size == 0) {
    if (p)
      gfree(p);
    return NULL;
  }
  if (p) {
    hdr = (GMemHdr *)((char *)p - gMemHdrSize);
    oldSize = hdr->size;
    q = gmalloc(size);
    memcpy(q, p, size < oldSize ? size : oldSize);
    gfree(p);
  } else {
    q = gmalloc(size);
  }
  return q;
#else
  void *q;

  if (size == 0) {
    if (p)
      free(p);
    return NULL;
  }
  if (p)
    q = realloc(p, size);
  else
    q = malloc(size);
  if (!q) {
    fprintf(stderr, "Out of memory\n");
    exit(1);
  }
  return q;
#endif
}

Here is the call graph for this function:

Here is the caller graph for this function: