aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c36
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