137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang/************************************************************************
22da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2002-2009, Xiph.org Foundation
32da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2010, Robin Watts for Pinknoise Productions Ltd
437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * All rights reserved.
537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * Redistribution and use in source and binary forms, with or without
72da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * modification, are permitted provided that the following conditions
82da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * are met:
937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
1037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *     * Redistributions of source code must retain the above copyright
1137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * notice, this list of conditions and the following disclaimer.
1237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *     * Redistributions in binary form must reproduce the above
1337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * copyright notice, this list of conditions and the following disclaimer
1437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * in the documentation and/or other materials provided with the
1537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * distribution.
162da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang *     * Neither the names of the Xiph.org Foundation nor Pinknoise
172da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Productions Ltd nor the names of its contributors may be used to
182da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * endorse or promote products derived from this software without
192da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * specific prior written permission.
2037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
2137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2737fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2837fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************/
337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define HEAD_ALIGN 64
357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include <stdlib.h>
367913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include <string.h>
377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include <stdio.h>
387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define MISC_C
397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include "misc.h"
407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang//#include <sys/time.h>
417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic void **pointers=NULL;
437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic long *insertlist=NULL; /* We can't embed this in the pointer list;
447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang			  a pointer can have any value... */
457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic char **files=NULL;
477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic long *file_bytes=NULL;
487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic int  filecount=0;
497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic int ptop=0;
517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic int palloced=0;
527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic int pinsert=0;
537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct {
557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  char *file;
567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long line;
577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long ptr;
587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long bytes;
597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} head;
607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wanglong global_bytes=0;
627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wanglong start_time=-1;
637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic void *_insert(void *ptr,long bytes,char *file,long line){
657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ((head *)ptr)->file=file;
667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ((head *)ptr)->line=line;
677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ((head *)ptr)->ptr=pinsert;
687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ((head *)ptr)->bytes=bytes-HEAD_ALIGN;
697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(pinsert>=palloced){
717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    palloced+=64;
727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(pointers){
737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      pointers=(void **)realloc(pointers,sizeof(void **)*palloced);
747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      insertlist=(long *)realloc(insertlist,sizeof(long *)*palloced);
757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    }else{
767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      pointers=(void **)malloc(sizeof(void **)*palloced);
777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      insertlist=(long *)malloc(sizeof(long *)*palloced);
787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    }
797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  pointers[pinsert]=ptr;
827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(pinsert==ptop)
847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    pinsert=++ptop;
857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  else
867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    pinsert=insertlist[pinsert];
877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef _VDBG_GRAPHFILE
897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  {
907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    FILE *out;
917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    struct timeval tv;
927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    static struct timezone tz;
937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    int i;
947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    char buffer[80];
957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    gettimeofday(&tv,&tz);
967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    for(i=0;i<filecount;i++)
987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      if(!strcmp(file,files[i]))break;
997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(i==filecount){
1017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      filecount++;
1027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      if(!files){
1037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	files=malloc(filecount*sizeof(*files));
1047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	file_bytes=malloc(filecount*sizeof(*file_bytes));
1057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      }else{
1067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	files=realloc(files,filecount*sizeof(*files));
1077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	file_bytes=realloc(file_bytes,filecount*sizeof(*file_bytes));
1087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      }
1097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      files[i]=strdup(file);
1107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      file_bytes[i]=0;
1117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    }
1127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    file_bytes[i]+=bytes-HEAD_ALIGN;
1147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(start_time==-1)start_time=(tv.tv_sec*1000)+(tv.tv_usec/1000);
1167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    snprintf(buffer,80,"%s",file);
1187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(strchr(buffer,'.'))strchr(buffer,'.')[0]=0;
1197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    strcat(buffer,_VDBG_GRAPHFILE);
1207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    out=fopen(buffer,"a");
1217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    file_bytes[i]-(bytes-HEAD_ALIGN));
1237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld # FILE %s LINE %ld\n",
1247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    -start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    file_bytes[i],file,line);
1267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fclose(out);
1277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    out=fopen("total"_VDBG_GRAPHFILE,"a");
1297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1307913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    global_bytes);
1317913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1327913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    global_bytes+(bytes-HEAD_ALIGN));
1337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fclose(out);
1347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
1357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif
1367913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  global_bytes+=(bytes-HEAD_ALIGN);
1387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  return(void *)(((char *)ptr)+HEAD_ALIGN);
1407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
1417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstatic void _ripremove(void *ptr){
1437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int insert;
1447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef _VDBG_GRAPHFILE
1467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  {
1477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    FILE *out=fopen("total"_VDBG_GRAPHFILE,"a");
1487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    struct timeval tv;
1497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    static struct timezone tz;
1507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    char buffer[80];
1517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    char *file =((head *)ptr)->file;
1527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    long bytes =((head *)ptr)->bytes;
1537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    int i;
1547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    gettimeofday(&tv,&tz);
1567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    global_bytes);
1587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    global_bytes-((head *)ptr)->bytes);
1607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fclose(out);
1617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    for(i=0;i<filecount;i++)
1637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      if(!strcmp(file,files[i]))break;
1647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    snprintf(buffer,80,"%s",file);
1667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(strchr(buffer,'.'))strchr(buffer,'.')[0]=0;
1677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    strcat(buffer,_VDBG_GRAPHFILE);
1687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    out=fopen(buffer,"a");
1697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    file_bytes[i]);
1717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(out,"%ld, %ld\n",-start_time+(tv.tv_sec*1000)+(tv.tv_usec/1000),
1727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	    file_bytes[i]-bytes);
1737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fclose(out);
1747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    file_bytes[i]-=bytes;
1767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
1787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif
1797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  global_bytes-=((head *)ptr)->bytes;
1817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  insert=((head *)ptr)->ptr;
1837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  insertlist[insert]=pinsert;
1847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  pinsert=insert;
1857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(pointers[insert]==NULL){
1877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing previously freed memory\n");
1887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(stderr,"\t%s %ld\n",((head *)ptr)->file,((head *)ptr)->line);
1897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
1907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(global_bytes<0){
1927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    fprintf(stderr,"DEBUGGING MALLOC ERROR: freeing unmalloced memory\n");
1937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
1947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  pointers[insert]=NULL;
1967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
1977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangvoid _VDBG_dump(void){
1997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int i;
2007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  for(i=0;i<ptop;i++){
2017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    head *ptr=pointers[i];
2027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    if(ptr)
2037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang      fprintf(stderr,"unfreed bytes from %s:%ld\n",
2047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang	      ptr->file,ptr->line);
2057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
2067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
2087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line){
2107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  bytes+=HEAD_ALIGN;
2117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(ptr){
2127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    ptr=(void *)(((char *)ptr)-HEAD_ALIGN);
2137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    _ripremove(ptr);
2147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    ptr=realloc(ptr,bytes);
2157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }else{
2167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    ptr=malloc(bytes);
2177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    memset(ptr,0,bytes);
2187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
2197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  return _insert(ptr,bytes,file,line);
2207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
2217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void _VDBG_free(void *ptr,char *file,long line){
2237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  if(ptr){
2247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    ptr=(void *)(((char *)ptr)-HEAD_ALIGN);
2257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    _ripremove(ptr);
2267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    free(ptr);
2277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  }
2287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
2297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
230