From: Roger Wolff Date: Fri, 23 Oct 1998 00:00:00 +0000 (+0000) Subject: mtr v0.23 X-Git-Tag: v0.23^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e023da5471240fd7b76c8c16084ff58e957765f6;p=thirdparty%2Fmtr.git mtr v0.23 - Fixed Sparc alignment problem with statmalloc source: ftp://ftp.bitwizard.nl/mtr/mtr-0.23.tar.gz --- diff --git a/configure.in b/configure.in index 7787504..e866607 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ AC_INIT(mtr.c) -AM_INIT_AUTOMAKE(mtr, 0.22) +AM_INIT_AUTOMAKE(mtr, 0.23) AC_SUBST(GTK_OBJ) AC_SUBST(CURSES_OBJ) diff --git a/dns.c b/dns.c index 42c1c75..0637427 100644 --- a/dns.c +++ b/dns.c @@ -271,15 +271,29 @@ char nullstring[] = ""; /* Code */ + +#ifdef CorruptCheck +#define TOT_SLACK 2 +#define HEAD_SLACK 1 +/* Need an entry for sparc systems here too. + Don't try this on Sparc for now. */ +#else +#ifdef sparc +#define TOT_SLACK 2 +#define HEAD_SLACK 2 +#else +#define TOT_SLACK 1 +#define HEAD_SLACK 1 +#endif +#endif + + void *statmalloc(size_t size){ void *p; size_t mallocsize; mem+= size; -#ifdef CorruptCheck - mallocsize = size + (sizeof(dword)) + sizeof(dword); -#else - mallocsize = size + (sizeof(dword)); -#endif + mallocsize = size + TOT_SLACK * sizeof(dword); + p = malloc(mallocsize); if (!p){ fprintf(stderr,"malloc() of %u bytes failed: %s\n",size,strerror(errno)); @@ -292,7 +306,7 @@ void *statmalloc(size_t size){ *(byte *)((char *)p + size + sizeof(dword) + sizeof(byte) * 2) = 0xbe; *(byte *)((char *)p + size + sizeof(dword) + sizeof(byte) * 3) = 0xef; #endif - p = (void *)((dword *)p + 1); + p = (void *)((dword *)p + HEAD_SLACK); #ifdef WipeMallocs memset(p,0xf0,size); #endif @@ -301,12 +315,12 @@ void *statmalloc(size_t size){ void statfree(void *p){ if (p){ - if (*((dword *)p - 1) == 0){ + if (*((dword *)p - HEAD_SLACK) == 0){ fprintf(stderr,"ERROR: Attempt to free pointer twice.\n"); *(int*)0=0; exit(-1); } else { - if (*((dword *)p - 1) > 8192){ + if (*((dword *)p - HEAD_SLACK) > 8192){ fprintf(stderr,"ERROR: Corrupted free() buffer. (header)\n"); *(int*)0=0; exit(-1); @@ -321,12 +335,12 @@ void statfree(void *p){ exit(-1); } #endif - mem-= *((dword *)p - 1); + mem-= *((dword *)p - HEAD_SLACK); #ifdef WipeFrees - memset(p,0xfe,*((dword *)p - 1)); + memset(p,0xfe,*((dword *)p - HEAD_SLACK)); *((dword *)p - 1) = 0; #endif - free((dword *)p - 1); + free((dword *)p - HEAD_SLACK); } } } @@ -430,7 +444,7 @@ struct resolve *allocresolve(){ fprintf(stderr,"statmalloc() failed: %s\n",strerror(errno)); exit(-1); } - bzero(rp,sizeof(struct resolve)); + memset(rp,0, sizeof(struct resolve)); return rp; }