![]() |
Here is a difference of Str.c++ and Str.h that seems to hide the segfault problem. It's not really a good long term solution though. Anyone have ideas for a better fix? Kris ==== util/Str.c++ (text) ==== @@ -818,3 +818,69 @@ { return fxTempStr(a, strlen(a), b.data, b.slength-1); } + + void* fxStr::malloc(size_t strSize) + { + const int sun = sizeof(unsigned); + strSize = ((strSize+sun-1)/sun)*sun; + + char* junk = (char*)::malloc(strSize+3*sun); + *(unsigned*)junk = strSize; + junk += sun; + *(unsigned*)junk = 0xa5c3a5c3; + junk += sun; + junk += strSize; + *(unsigned*)junk = 0xc3a5c3a5; + + return junk-strSize; + } + + void fxStr::free(void* freeMem) + { + const int sun = sizeof(unsigned); + char* unFreeMem = (char*)freeMem; + + unFreeMem -= 2*sun; + + unsigned strSize = *(unsigned*)unFreeMem; + + unFreeMem += sun; + + if (0xa5c3a5c3 != *(unsigned*)unFreeMem) + { + raise(SIGSEGV); + } + + unFreeMem += sun; + unFreeMem += strSize; + + if (0xc3a5c3a5 != *(unsigned*)unFreeMem) + { + raise(SIGSEGV); + } + + unFreeMem -= strSize+2*sun; + + ::free(unFreeMem); + } + + void* fxStr::realloc(void* reMem, size_t strSize) + { + char* reJunk = (char*)malloc(strSize); + + const int sun = sizeof(unsigned); + char* cReMem = (char*)reMem; + + cReMem -= 2*sun; + + unsigned reStrSize = *(unsigned*)cReMem; + + reStrSize = reStrSize > strSize ? strSize : reStrSize; + + memcpy(reJunk, reMem, reStrSize); + + free(reMem); + + return reJunk; + } + ==== util/Str.h (text) ==== @@ -28,6 +28,7 @@ #include "stdlib.h" #include "stdarg.h" +#include "signal.h" #include "Obj.h" // Temporary strings are generated by the concatenation operators. @@ -244,5 +245,9 @@ int findEndBuffer(const char *, u_int buflen) const; int findBuffer(const char *buf, u_int buflen) const; void bracketBuffer(const char *, u_int buflen, int &, int &) const; + + static void* realloc(void* reMem, size_t strSize); + static void* malloc(size_t strSize); + static void free(void* freeMem); }; #endif /* _Str_ */ ____________________ HylaFAX(tm) Users Mailing List _______________________ To subscribe/unsubscribe, click http://lists.hylafax.org/cgi-bin/lsg2.cgi On UNIX: mail -s unsubscribe hylafax-users-request@xxxxxxxxxxx < /dev/null *To learn about commercial HylaFAX(tm) support, mail sales@xxxxxxxxx*