Ignore:
Timestamp:
Jun 30, 2008, 10:13:07 AM (13 years ago)
Author:
Eugene Romanenko
Message:

PDF plugin: poppler library updated to version 0.8.3

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/poppler/mypoppler/goo/gmem.cc

    r115 r250  
    1818
    1919typedef struct _GMemHdr {
     20  unsigned int magic;
    2021  int size;
    2122  int index;
    22   struct _GMemHdr *next;
     23  struct _GMemHdr *next, *prev;
    2324} GMemHdr;
    2425
    2526#define gMemHdrSize ((sizeof(GMemHdr) + 7) & ~7)
    2627#define gMemTrlSize (sizeof(long))
     28
     29#define gMemMagic 0xabcd9999
    2730
    2831#if gmemTrlSize==8
     
    3639  ((((size) + gMemTrlSize - 1) / gMemTrlSize) * gMemTrlSize)
    3740
    38 #define gMemNLists    64
    39 #define gMemListShift  4
    40 #define gMemListMask  (gMemNLists - 1)
    41 static GMemHdr *gMemList[gMemNLists] = {
    42   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    43   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    44   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    45   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    46   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    47   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    48   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    49   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
    50 };
     41static GMemHdr *gMemHead = NULL;
     42static GMemHdr *gMemTail = NULL;
    5143
    5244static int gMemIndex = 0;
     
    5648#endif /* DEBUG_MEM */
    5749
    58 void *gmalloc(size_t size) {
    59 #ifdef DEBUG_MEM
    60   size_t size1;
     50void *gmalloc(size_t size) GMEM_EXCEP {
     51#ifdef DEBUG_MEM
     52  int size1;
    6153  char *mem;
    6254  GMemHdr *hdr;
    6355  void *data;
    64   int lst;
    6556  unsigned long *trl, *p;
    6657
    67   if (size <= 0)
    68     return NULL;
     58  if (size <= 0) {
     59    return NULL;
     60  }
    6961  size1 = gMemDataSize(size);
    7062  if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) {
     63#if USE_EXCEPTIONS
     64    throw GMemException();
     65#else
    7166    fprintf(stderr, "Out of memory\n");
    7267    exit(1);
     68#endif
    7369  }
    7470  hdr = (GMemHdr *)mem;
    7571  data = (void *)(mem + gMemHdrSize);
    7672  trl = (unsigned long *)(mem + gMemHdrSize + size1);
     73  hdr->magic = gMemMagic;
    7774  hdr->size = size;
    7875  hdr->index = gMemIndex++;
    79   lst = ((int)hdr >> gMemListShift) & gMemListMask;
    80   hdr->next = gMemList[lst];
    81   gMemList[lst] = hdr;
     76  if (gMemTail) {
     77    gMemTail->next = hdr;
     78    hdr->prev = gMemTail;
     79    gMemTail = hdr;
     80  } else {
     81    hdr->prev = NULL;
     82    gMemHead = gMemTail = hdr;
     83  }
     84  hdr->next = NULL;
    8285  ++gMemAlloc;
    8386  gMemInUse += size;
    84   for (p = (unsigned long *)data; p <= trl; ++p)
     87  for (p = (unsigned long *)data; p <= trl; ++p) {
    8588    *p = gMemDeadVal;
     89  }
    8690  return data;
    8791#else
    8892  void *p;
    8993
    90   if (size <= 0)
    91     return NULL;
     94  if (size <= 0) {
     95    return NULL;
     96  }
    9297  if (!(p = malloc(size))) {
     98#if USE_EXCEPTIONS
     99    throw GMemException();
     100#else
    93101    fprintf(stderr, "Out of memory\n");
    94102    exit(1);
     103#endif
    95104  }
    96105  return p;
     
    98107}
    99108
    100 void *grealloc(void *p, size_t size) {
     109void *grealloc(void *p, size_t size) GMEM_EXCEP {
    101110#ifdef DEBUG_MEM
    102111  GMemHdr *hdr;
    103112  void *q;
    104   size_t oldSize;
    105 
    106   if (size <= 0) {
    107     if (p)
     113  int oldSize;
     114
     115  if (size <= 0) {
     116    if (p) {
    108117      gfree(p);
     118    }
    109119    return NULL;
    110120  }
     
    123133
    124134  if (size <= 0) {
    125     if (p)
     135    if (p) {
    126136      free(p);
    127     return NULL;
    128   }
    129   if (p)
     137    }
     138    return NULL;
     139  }
     140  if (p) {
    130141    q = realloc(p, size);
    131   else
     142  } else {
    132143    q = malloc(size);
     144  }
    133145  if (!q) {
     146#if USE_EXCEPTIONS
     147    throw GMemException();
     148#else
    134149    fprintf(stderr, "Out of memory\n");
    135150    exit(1);
     151#endif
    136152  }
    137153  return q;
     
    139155}
    140156
    141 void *gmallocn(int nObjs, int objSize) {
     157void *gmallocn(int nObjs, int objSize) GMEM_EXCEP {
    142158  int n;
    143159
     160  if (nObjs == 0) {
     161    return NULL;
     162  }
    144163  n = nObjs * objSize;
    145   if (objSize == 0 || n / objSize != nObjs) {
     164  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
     165#if USE_EXCEPTIONS
     166    throw GMemException();
     167#else
    146168    fprintf(stderr, "Bogus memory allocation size\n");
    147169    exit(1);
     170#endif
    148171  }
    149172  return gmalloc(n);
    150173}
    151174
    152 void *greallocn(void *p, int nObjs, int objSize) {
     175void *gmallocn_checkoverflow(int nObjs, int objSize) GMEM_EXCEP {
    153176  int n;
    154177
     178  if (nObjs == 0) {
     179    return NULL;
     180  }
    155181  n = nObjs * objSize;
    156   if (objSize == 0 || n / objSize != nObjs) {
     182  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
     183#if USE_EXCEPTIONS
     184    throw GMemException();
     185#else
    157186    fprintf(stderr, "Bogus memory allocation size\n");
    158     exit(1);
     187    return NULL;
     188#endif
     189  }
     190  return gmalloc(n);
     191}
     192
     193void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP {
     194  int n;
     195
     196  if (nObjs == 0) {
     197    if (p) {
     198      gfree(p);
     199    }
     200    return NULL;
     201  }
     202  n = nObjs * objSize;
     203  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
     204#if USE_EXCEPTIONS
     205    throw GMemException();
     206#else
     207    fprintf(stderr, "Bogus memory allocation size\n");
     208    exit(1);
     209#endif
    159210  }
    160211  return grealloc(p, n);
     
    163214void gfree(void *p) {
    164215#ifdef DEBUG_MEM
    165   size_t size;
     216  int size;
    166217  GMemHdr *hdr;
    167   GMemHdr *prevHdr, *q;
    168   int lst;
    169218  unsigned long *trl, *clr;
    170219
    171220  if (p) {
    172221    hdr = (GMemHdr *)((char *)p - gMemHdrSize);
    173     lst = ((int)hdr >> gMemListShift) & gMemListMask;
    174     for (prevHdr = NULL, q = gMemList[lst]; q; prevHdr = q, q = q->next) {
    175       if (q == hdr)
    176         break;
    177     }
    178     if (q) {
    179       if (prevHdr)
    180         prevHdr->next = hdr->next;
    181       else
    182         gMemList[lst] = hdr->next;
     222    if (hdr->magic == gMemMagic &&
     223        ((hdr->prev == NULL) == (hdr == gMemHead)) &&
     224        ((hdr->next == NULL) == (hdr == gMemTail))) {
     225      if (hdr->prev) {
     226        hdr->prev->next = hdr->next;
     227      } else {
     228        gMemHead = hdr->next;
     229      }
     230      if (hdr->next) {
     231        hdr->next->prev = hdr->prev;
     232      } else {
     233        gMemTail = hdr->prev;
     234      }
    183235      --gMemAlloc;
    184236      gMemInUse -= hdr->size;
     
    189241                hdr->index, p);
    190242      }
    191       for (clr = (unsigned long *)hdr; clr <= trl; ++clr)
     243      for (clr = (unsigned long *)hdr; clr <= trl; ++clr) {
    192244        *clr = gMemDeadVal;
     245      }
    193246      free(hdr);
    194247    } else {
     
    197250  }
    198251#else
    199   if (p)
     252  if (p) {
    200253    free(p);
     254  }
    201255#endif
    202256}
     
    205259void gMemReport(FILE *f) {
    206260  GMemHdr *p;
    207   int lst;
    208261
    209262  fprintf(f, "%d memory allocations in all\n", gMemIndex);
     
    212265    fprintf(f, " index     size\n");
    213266    fprintf(f, "-------- --------\n");
    214     for (lst = 0; lst < gMemNLists; ++lst) {
    215       for (p = gMemList[lst]; p; p = p->next)
    216         fprintf(f, "%8d %8d\n", p->index, p->size);
     267    for (p = gMemHead; p; p = p->next) {
     268      fprintf(f, "%8d %8d\n", p->index, p->size);
    217269    }
    218270  } else {
     
    229281  return s1;
    230282}
     283
     284char *gstrndup(const char *s, size_t n) {
     285  char *s1 = (char*)gmalloc(n + 1); /* cannot return NULL for size > 0 */
     286  s1[n] = '\0';
     287  memcpy(s1, s, n);
     288  return s1;
     289}
Note: See TracChangeset for help on using the changeset viewer.