Index: src/shell.c.in ================================================================== --- src/shell.c.in +++ src/shell.c.in @@ -3856,11 +3856,15 @@ int pgsz = 0; int iOffset = 0; int j, k; int rc; FILE *in; +#if !defined(_MSC_VER) || _MSC_VER>=1900 unsigned char x[16]; +#else + unsigned int x[16]; +#endif char zLine[1000]; if( p->zDbFilename ){ in = fopen(p->zDbFilename, "r"); if( in==0 ){ utf8_printf(stderr, "cannot open \"%s\" for reading\n", p->zDbFilename); @@ -3901,11 +3905,18 @@ &j, &x[0], &x[1], &x[2], &x[3], &x[4], &x[5], &x[6], &x[7], &x[8], &x[9], &x[10], &x[11], &x[12], &x[13], &x[14], &x[15]); if( rc==17 ){ k = iOffset+j; if( k+16<=n ){ +#if !defined(_MSC_VER) || _MSC_VER>=1900 memcpy(a+k, x, 16); +#else + int ii; + for(ii=0; ii<16; ii++){ + a[k+ii] = (unsigned char)x[ii]; + } +#endif } } } *pnData = n; if( in!=p->in ){ Index: src/test1.c ================================================================== --- src/test1.c +++ src/test1.c @@ -7697,11 +7697,15 @@ int lineno = 0; int i, iNext; int iOffset = 0; int j, k; int rc; +#if !defined(_MSC_VER) || _MSC_VER>=1900 unsigned char x[16]; +#else + unsigned int x[16]; +#endif if( objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "HEXDB"); return TCL_ERROR; } zIn = Tcl_GetString(objv[1]); @@ -7736,11 +7740,18 @@ &j, &x[0], &x[1], &x[2], &x[3], &x[4], &x[5], &x[6], &x[7], &x[8], &x[9], &x[10], &x[11], &x[12], &x[13], &x[14], &x[15]); if( rc==17 ){ k = iOffset+j; if( k+16<=n ){ +#if !defined(_MSC_VER) || _MSC_VER>=1900 memcpy(a+k, x, 16); +#else + int ii; + for(ii=0; ii<16; ii++){ + a[k+ii] = (unsigned char)x[ii]; + } +#endif } continue; } } Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(a, n)); Index: src/test_func.c ================================================================== --- src/test_func.c +++ src/test_func.c @@ -527,10 +527,17 @@ u8 *pEndHdr; /* Points to one byte past record header */ u8 *pHdr; /* Current point in record header */ u8 *pBody; /* Current point in record data */ u64 nHdr; /* Bytes in record header */ Tcl_Obj *pRet; /* Return value */ + Mem *pMem; /* Pointer to memory cell */ + + pMem = sqlite3_malloc(sizeof(Mem)); + if( pMem==0 ){ + sqlite3_result_error_nomem(context); + return; + } pRet = Tcl_NewObj(); Tcl_IncrRefCount(pRet); assert( argc==1 ); @@ -539,30 +546,29 @@ pHdr = pRec + sqlite3GetVarint(pRec, &nHdr); pBody = pEndHdr = &pRec[nHdr]; while( pHdrdb = db; + pMem->enc = ENC(db); pHdr += sqlite3GetVarint(pHdr, &iSerialType); - pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, &mem); + pBody += sqlite3VdbeSerialGet(pBody, (u32)iSerialType, pMem); - switch( sqlite3_value_type(&mem) ){ + switch( sqlite3_value_type(pMem) ){ case SQLITE_TEXT: - pVal = Tcl_NewStringObj((const char*)sqlite3_value_text(&mem), -1); + pVal = Tcl_NewStringObj((const char*)sqlite3_value_text(pMem), -1); break; case SQLITE_BLOB: { char hexdigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - int n = sqlite3_value_bytes(&mem); - u8 *z = (u8*)sqlite3_value_blob(&mem); + int n = sqlite3_value_bytes(pMem); + u8 *z = (u8*)sqlite3_value_blob(pMem); int i; pVal = Tcl_NewStringObj("x'", -1); for(i=0; i> 4) & 0x0F)]; @@ -573,15 +579,15 @@ Tcl_AppendStringsToObj(pVal, "'", 0); break; } case SQLITE_FLOAT: - pVal = Tcl_NewDoubleObj(sqlite3_value_double(&mem)); + pVal = Tcl_NewDoubleObj(sqlite3_value_double(pMem)); break; case SQLITE_INTEGER: - pVal = Tcl_NewWideIntObj(sqlite3_value_int64(&mem)); + pVal = Tcl_NewWideIntObj(sqlite3_value_int64(pMem)); break; case SQLITE_NULL: pVal = Tcl_NewStringObj("NULL", -1); break; @@ -590,17 +596,18 @@ assert( 0 ); } Tcl_ListObjAppendElement(0, pRet, pVal); - if( mem.szMalloc ){ - sqlite3DbFree(db, mem.zMalloc); + if( pMem->szMalloc ){ + sqlite3DbFree(db, pMem->zMalloc); } } sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT); Tcl_DecrRefCount(pRet); + sqlite3_free(pMem); } /* ** test_zeroblob(N) **