Attempting to add support for 64-bit platforms. (CVS 314)
FossilOrigin-Name: 03673adbfe0c8a92d79f86ddf1136736594208ad
diff --git a/src/btree.c b/src/btree.c
index fa36fd8..e381f92 100644
--- a/src/btree.c
+++ b/src/btree.c
@@ -9,7 +9,7 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
-** $Id: btree.c,v 1.39 2001/11/10 13:51:08 drh Exp $
+** $Id: btree.c,v 1.40 2001/11/21 02:21:12 drh Exp $
**
** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
@@ -54,26 +54,6 @@
#include "btree.h"
#include <assert.h>
-
-/*
-** Primitive data types. u32 must be 4 bytes and u16 must be 2 bytes.
-** The uptr type must be big enough to hold a pointer.
-** Change these typedefs when porting to new architectures.
-*/
-typedef unsigned int uptr;
-
-/* There are already defined in sqliteInt.h...
-** typedef unsigned int u32;
-** typedef unsigned short int u16;
-** typedef unsigned char u8;
-*/
-
-/*
-** This macro casts a pointer to an integer. Useful for doing
-** pointer arithmetic.
-*/
-#define Addr(X) ((uptr)X)
-
/*
** Forward declarations of structures used only in this file.
*/
@@ -829,7 +809,7 @@
int sqliteBtreeCursor(Btree *pBt, int iTable, int wrFlag, BtCursor **ppCur){
int rc;
BtCursor *pCur;
- int nLock;
+ ptr nLock;
if( pBt->page1==0 ){
rc = lockBtree(pBt);
@@ -852,7 +832,7 @@
if( rc!=SQLITE_OK ){
goto create_cursor_exception;
}
- nLock = (int)sqliteHashFind(&pBt->locks, 0, iTable);
+ nLock = (ptr)sqliteHashFind(&pBt->locks, 0, iTable);
if( nLock<0 || (nLock>0 && wrFlag) ){
rc = SQLITE_LOCKED;
goto create_cursor_exception;
@@ -886,7 +866,7 @@
** when the last cursor is closed.
*/
int sqliteBtreeCloseCursor(BtCursor *pCur){
- int nLock;
+ ptr nLock;
Btree *pBt = pCur->pBt;
if( pCur->pPrev ){
pCur->pPrev->pNext = pCur->pNext;
@@ -900,7 +880,7 @@
sqlitepager_unref(pCur->pPage);
}
unlockBtreeIfUnused(pBt);
- nLock = (int)sqliteHashFind(&pBt->locks, 0, pCur->pgnoRoot);
+ nLock = (ptr)sqliteHashFind(&pBt->locks, 0, pCur->pgnoRoot);
assert( nLock!=0 || sqlite_malloc_failed );
nLock = nLock<0 ? 0 : nLock-1;
sqliteHashInsert(&pBt->locks, 0, pCur->pgnoRoot, (void*)nLock);
@@ -2293,11 +2273,11 @@
*/
int sqliteBtreeClearTable(Btree *pBt, int iTable){
int rc;
- int nLock;
+ ptr nLock;
if( !pBt->inTrans ){
return SQLITE_ERROR; /* Must start a transaction first */
}
- nLock = (int)sqliteHashFind(&pBt->locks, 0, iTable);
+ nLock = (ptr)sqliteHashFind(&pBt->locks, 0, iTable);
if( nLock ){
return SQLITE_LOCKED;
}
diff --git a/src/build.c b/src/build.c
index 69f3924..778d9d0 100644
--- a/src/build.c
+++ b/src/build.c
@@ -25,7 +25,7 @@
** ROLLBACK
** PRAGMA
**
-** $Id: build.c,v 1.55 2001/11/07 16:48:27 drh Exp $
+** $Id: build.c,v 1.56 2001/11/21 02:21:12 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@@ -101,7 +101,7 @@
void sqliteExprSpan(Expr *pExpr, Token *pLeft, Token *pRight){
if( pExpr ){
pExpr->span.z = pLeft->z;
- pExpr->span.n = pRight->n + (int)pRight->z - (int)pLeft->z;
+ pExpr->span.n = pRight->n + Addr(pRight->z) - Addr(pLeft->z);
}
}
@@ -498,7 +498,7 @@
i = p->nCol-1;
if( i<0 ) return;
pz = &p->aCol[i].zType;
- n = pLast->n + ((int)pLast->z) - (int)pFirst->z;
+ n = pLast->n + Addr(pLast->z) - Addr(pFirst->z);
sqliteSetNString(pz, pFirst->z, n, 0);
z = *pz;
if( z==0 ) return;
@@ -618,7 +618,7 @@
v = sqliteGetVdbe(pParse);
if( v==0 ) return;
- n = (int)pEnd->z - (int)pParse->sFirstToken.z + 1;
+ n = Addr(pEnd->z) - Addr(pParse->sFirstToken.z) + 1;
if( !p->isTemp ){
sqliteVdbeAddOp(v, OP_NewRecno, 0, 0);
sqliteVdbeAddOp(v, OP_String, 0, 0);
@@ -972,7 +972,7 @@
if( !isTemp ){
addr = sqliteVdbeAddOp(v, OP_String, 0, 0);
if( pStart && pEnd ){
- n = (int)pEnd->z - (int)pStart->z + 1;
+ n = Addr(pEnd->z) - Addr(pStart->z) + 1;
sqliteVdbeChangeP3(v, addr, pStart->z, n);
}
sqliteVdbeAddOp(v, OP_MakeRecord, 5, 0);
diff --git a/src/hash.c b/src/hash.c
index 26d88e8..59dbf11 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -12,7 +12,7 @@
** This is the implementation of generic hash-tables
** used in SQLite.
**
-** $Id: hash.c,v 1.3 2001/10/22 02:58:10 drh Exp $
+** $Id: hash.c,v 1.4 2001/11/21 02:21:12 drh Exp $
*/
#include "sqliteInt.h"
#include <assert.h>
@@ -68,11 +68,13 @@
** Hash and comparison functions when the mode is SQLITE_HASH_POINTER
*/
static int ptrHash(const void *pKey, int nKey){
- nKey = (int)pKey;
- return nKey ^ (nKey<<8) ^ (nKey>>8);
+ uptr x = Addr(pKey);
+ return x ^ (x<<8) ^ (x>>8);
}
static int ptrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
- return ((int)pKey2) - (int)pKey1;
+ if( pKey1==pKey2 ) return 0;
+ if( pKey1<pKey2 ) return -1;
+ return 1;
}
/*
diff --git a/src/sqliteInt.h b/src/sqliteInt.h
index 8f5481e..2a92353 100644
--- a/src/sqliteInt.h
+++ b/src/sqliteInt.h
@@ -11,7 +11,7 @@
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.69 2001/11/08 00:45:21 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.70 2001/11/21 02:21:12 drh Exp $
*/
#include "sqlite.h"
#include "hash.h"
@@ -31,12 +31,35 @@
#define TEMP_PAGES 25
/*
-** Integers of known sizes. These typedefs much change for architectures
-** where the sizes very.
+** Integers of known sizes. These typedefs might change for architectures
+** where the sizes very. Preprocessor macros are available so that the
+** types can be conveniently redefined at compile-type. Like this:
+**
+** cc '-DUINTPTR_TYPE=long long int' ...
*/
-typedef unsigned int u32; /* 4-byte unsigned integer */
-typedef unsigned short int u16; /* 2-byte unsigned integer */
-typedef unsigned char u8; /* 1-byte unsigned integer */
+#ifndef UINT32_TYPE
+# define UINT32_TYPE unsigned int
+#endif
+#ifndef UINT16_TYPE
+# define UINT16_TYPE unsigned short int
+#endif
+#ifndef UINT8_TYPE
+# define UINT8_TYPE unsigned char
+#endif
+#ifndef INTPTR_TYPE
+# define INTPTR_TYPE int
+#endif
+typedef UINT32_TYPE u32; /* 4-byte unsigned integer */
+typedef UINT16_TYPE u16; /* 2-byte unsigned integer */
+typedef UINT8_TYPE u8; /* 1-byte unsigned integer */
+typedef INTPTR_TYPE ptr; /* Big enough to hold a pointer */
+typedef unsigned INTPTR_TYPE uptr; /* Big enough to hold a pointer */
+
+/*
+** This macro casts a pointer to an integer. Useful for doing
+** pointer arithmetic.
+*/
+#define Addr(X) ((uptr)X)
/*
** The maximum number of bytes of data that can be put into a single
diff --git a/src/update.c b/src/update.c
index 9cc967a..ce5d5b3 100644
--- a/src/update.c
+++ b/src/update.c
@@ -12,7 +12,7 @@
** This file contains C code routines that are called by the parser
** to handle UPDATE statements.
**
-** $Id: update.c,v 1.21 2001/11/07 14:22:00 drh Exp $
+** $Id: update.c,v 1.22 2001/11/21 02:21:12 drh Exp $
*/
#include "sqliteInt.h"
@@ -110,7 +110,7 @@
}
}
- /* Allocate memory for the array apIdx[] and fill it pointers to every
+ /* Allocate memory for the array apIdx[] and fill it with pointers to every
** index that needs to be updated. Indices only need updating if their
** key includes one of the columns named in pChanges.
*/
@@ -193,7 +193,7 @@
sqliteVdbeAddOp(v, OP_IdxDelete, base+i+1, 0);
}
- /* Compute a completely new data for this record.
+ /* Compute new data for this record.
*/
for(i=0; i<pTab->nCol; i++){
j = aXRef[i];
diff --git a/src/util.c b/src/util.c
index 88b2f24..ddb7cfa 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.31 2001/11/06 04:00:19 drh Exp $
+** $Id: util.c,v 1.32 2001/11/21 02:21:12 drh Exp $
*/
#include "sqliteInt.h"
#include <stdarg.h>
@@ -769,7 +769,8 @@
** The following procedure converts a double-precision floating point
** number into a string. The resulting string has the property that
** two such strings comparied using strcmp() or memcmp() will give the
-** same results as comparing the original floating point numbers.
+** same results as a numeric comparison of the original floating point
+** numbers.
**
** This routine is used to generate database keys from floating point
** numbers such that the keys sort in the same order as the original