diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/src/util.c b/src/util.c index 4c148087c..b99f26209 100644 --- a/src/util.c +++ b/src/util.c @@ -14,7 +14,7 @@ ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** -** $Id: util.c,v 1.116 2004/09/06 17:24:13 drh Exp $ +** $Id: util.c,v 1.117 2004/09/08 20:13:06 drh Exp $ */ #include "sqliteInt.h" #include <stdarg.h> @@ -27,11 +27,11 @@ void print_stack_trace(){ int i; int n = backtrace(bt, 30); - fprintf(stderr, "STACK: "); + sqlite3DebugPrintf("STACK: "); for(i=0; i<n;i++){ - fprintf(stderr, "%p ", bt[i]); + sqlite3DebugPrintf("%p ", bt[i]); } - fprintf(stderr, "\n"); + sqlite3DebugPrintf("\n"); } #else #define print_stack_trace() @@ -994,3 +994,31 @@ void *sqlite3HexToBlob(const char *z){ } return zBlob; } + +#if defined(SQLITE_TEST) +/* +** Convert text generated by the "%p" conversion format back into +** a pointer. +*/ +void *sqlite3TextToPtr(const char *z){ + void *p; + u64 v; + u32 v2; + if( z[0]=='0' && z[1]=='x' ){ + z += 2; + } + v = 0; + while( *z ){ + v = (v<<4) + hexToInt(*z); + z++; + } + if( sizeof(p)==sizeof(v) ){ + p = *(void**)&v; + }else{ + assert( sizeof(p)==sizeof(v2) ); + v2 = (u32)v; + p = *(void**)&v2; + } + return p; +} +#endif |