mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Extend wasm build to enable inclusion of client-custom C code, initialized via the SQLITE_EXTRA_INIT mechanism, per discussion in [forum:1e1c04f3ed1bc96b|forum post 1e1c04f3ed1bc96b].
FossilOrigin-Name: 68a52cafff60f19c9c998133d04f192b1e8b23f78b8cee13807d76845ef5e13d
This commit is contained in:
@ -189,6 +189,34 @@ else
|
|||||||
$(info Development build. Use '$(MAKE) release' for a smaller release build.)
|
$(info Development build. Use '$(MAKE) release' for a smaller release build.)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
# Adding custom C code via sqlite3_wasm_extra_init.c:
|
||||||
|
#
|
||||||
|
# If the canonical build process finds the file
|
||||||
|
# sqlite3_wasm_extra_init.c in the main wasm build directory, it
|
||||||
|
# arranges to include that file in the build of sqlite3.wasm and
|
||||||
|
# defines SQLITE_EXTRA_INIT=sqlite3_wasm_extra_init.
|
||||||
|
#
|
||||||
|
# sqlite3_wasm_extra_init() must be a function with this signature:
|
||||||
|
#
|
||||||
|
# int sqlite3_wasm_extra_init(const char *)
|
||||||
|
#
|
||||||
|
# and the sqlite3 library will call it with an argument of NULL one
|
||||||
|
# time during sqlite3_initialize(). If it returns non-0,
|
||||||
|
# initialization of the library will fail.
|
||||||
|
#
|
||||||
|
# The filename can be overridden with:
|
||||||
|
#
|
||||||
|
# make sqlite3_wasm_extra_init.c=my_custom_stuff.c
|
||||||
|
#
|
||||||
|
# See example_extra_init.c for an example implementation.
|
||||||
|
########################################################################
|
||||||
|
sqlite3_wasm_extra_init.c ?= $(wildcard sqlite3_wasm_extra_init.c)
|
||||||
|
ifneq (,$(sqlite3_wasm_extra_init.c))
|
||||||
|
$(info Enabling SQLITE_EXTRA_INIT via $(sqlite3_wasm_extra_init.c).)
|
||||||
|
SQLITE_OPT += -I. -DSQLITE_WASM_EXTRA_INIT
|
||||||
|
endif
|
||||||
|
|
||||||
# bin.version-info = binary to output various sqlite3 version info for
|
# bin.version-info = binary to output various sqlite3 version info for
|
||||||
# embedding in the JS files and in building the distribution zip file.
|
# embedding in the JS files and in building the distribution zip file.
|
||||||
# It must NOT be in $(dir.tmp) because we need it to survive the
|
# It must NOT be in $(dir.tmp) because we need it to survive the
|
||||||
@ -576,6 +604,7 @@ endef
|
|||||||
# https://github.com/emscripten-core/emscripten/issues/14383
|
# https://github.com/emscripten-core/emscripten/issues/14383
|
||||||
sqlite3.wasm := $(dir.dout)/sqlite3.wasm
|
sqlite3.wasm := $(dir.dout)/sqlite3.wasm
|
||||||
sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
|
sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
|
||||||
|
sqlite3-wasm.cs := $(sqlite3-wasm.c) $(sqlite3_wasm_extra_init.c)
|
||||||
# sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter
|
# sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter
|
||||||
# (predictably) results in a slightly faster binary. We're close
|
# (predictably) results in a slightly faster binary. We're close
|
||||||
# enough to the target speed requirements that the 500ms makes a
|
# enough to the target speed requirements that the 500ms makes a
|
||||||
@ -650,12 +679,12 @@ $$(eval $$(call call-make-pre-post,sqlite3,$(1)))
|
|||||||
emcc.flags.sqlite3.$(1) := $(6)
|
emcc.flags.sqlite3.$(1) := $(6)
|
||||||
$$(eval $$(call C-PP.FILTER, $$(sqlite3-api.js.in), $(3), $(5)))
|
$$(eval $$(call C-PP.FILTER, $$(sqlite3-api.js.in), $(3), $(5)))
|
||||||
$(4): $(3)
|
$(4): $(3)
|
||||||
$(4): $(3) $$(MAKEFILE) $$(sqlite3-wasm.c) $$(EXPORTED_FUNCTIONS.api) $$(pre-post-sqlite3.deps.$(1))
|
$(4): $(3) $$(MAKEFILE) $$(sqlite3-wasm.cs) $$(EXPORTED_FUNCTIONS.api) $$(pre-post-sqlite3.deps.$(1))
|
||||||
@echo "Building $$@ ..."
|
@echo "Building $$@ ..."
|
||||||
$$(emcc.bin) -o $$@ $$(emcc_opt_full) $$(emcc.flags) \
|
$$(emcc.bin) -o $$@ $$(emcc_opt_full) $$(emcc.flags) \
|
||||||
$$(emcc.jsflags) \
|
$$(emcc.jsflags) \
|
||||||
$$(pre-post-sqlite3.flags.$(1)) $$(emcc.flags.sqlite3.$(1)) \
|
$$(pre-post-sqlite3.flags.$(1)) $$(emcc.flags.sqlite3.$(1)) \
|
||||||
$$(cflags.common) $$(SQLITE_OPT) $$(sqlite3-wasm.c)
|
$$(cflags.common) $$(SQLITE_OPT) $$(sqlite3-wasm.cs)
|
||||||
@$$(call SQLITE3.xJS.ESM-EXPORT-DEFAULT,$(2))
|
@$$(call SQLITE3.xJS.ESM-EXPORT-DEFAULT,$(2))
|
||||||
@if [ bundler-friendly = $(1) ]; then \
|
@if [ bundler-friendly = $(1) ]; then \
|
||||||
echo "Patching $(3) for sqlite3.wasm..."; \
|
echo "Patching $(3) for sqlite3.wasm..."; \
|
||||||
@ -806,7 +835,7 @@ $(EXPORTED_FUNCTIONS.speedtest1): $(EXPORTED_FUNCTIONS.api)
|
|||||||
speedtest1.js := $(dir.dout)/speedtest1.js
|
speedtest1.js := $(dir.dout)/speedtest1.js
|
||||||
speedtest1.wasm := $(dir.dout)/speedtest1.wasm
|
speedtest1.wasm := $(dir.dout)/speedtest1.wasm
|
||||||
cflags.speedtest1 := $(cflags.common) -DSQLITE_SPEEDTEST1_WASM
|
cflags.speedtest1 := $(cflags.common) -DSQLITE_SPEEDTEST1_WASM
|
||||||
speedtest1.cses := $(speedtest1.c) $(sqlite3-wasm.c)
|
speedtest1.cses := $(speedtest1.c) $(sqlite3-wasm.cs)
|
||||||
$(eval $(call call-make-pre-post,speedtest1,vanilla))
|
$(eval $(call call-make-pre-post,speedtest1,vanilla))
|
||||||
$(speedtest1.js): $(MAKEFILE) $(speedtest1.cses) \
|
$(speedtest1.js): $(MAKEFILE) $(speedtest1.cses) \
|
||||||
$(pre-post-speedtest1.deps.vanilla) \
|
$(pre-post-speedtest1.deps.vanilla) \
|
||||||
|
@ -163,6 +163,10 @@
|
|||||||
# define SQLITE_USE_URI 1
|
# define SQLITE_USE_URI 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef SQLITE_WASM_EXTRA_INIT
|
||||||
|
# define SQLITE_EXTRA_INIT sqlite3_wasm_extra_init
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "sqlite3.c" /* yes, .c instead of .h. */
|
#include "sqlite3.c" /* yes, .c instead of .h. */
|
||||||
|
|
||||||
@ -171,7 +175,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** SQLITE_WASM_KEEP is functionally identical to EMSCRIPTEN_KEEPALIVE
|
** SQLITE_WASM_EXPORT is functionally identical to EMSCRIPTEN_KEEPALIVE
|
||||||
** but is not Emscripten-specific. It explicitly marks functions for
|
** but is not Emscripten-specific. It explicitly marks functions for
|
||||||
** export into the target wasm file without requiring explicit listing
|
** export into the target wasm file without requiring explicit listing
|
||||||
** of those functions in Emscripten's -sEXPORTED_FUNCTIONS=... list
|
** of those functions in Emscripten's -sEXPORTED_FUNCTIONS=... list
|
||||||
@ -193,7 +197,7 @@
|
|||||||
** this writing we are tied to Emscripten for various reasons
|
** this writing we are tied to Emscripten for various reasons
|
||||||
** and cannot test the library with other build environments.
|
** and cannot test the library with other build environments.
|
||||||
*/
|
*/
|
||||||
#define SQLITE_WASM_KEEP __attribute__((used,visibility("default")))
|
#define SQLITE_WASM_EXPORT __attribute__((used,visibility("default")))
|
||||||
// See also:
|
// See also:
|
||||||
//__attribute__((export_name("theExportedName"), used, visibility("default")))
|
//__attribute__((export_name("theExportedName"), used, visibility("default")))
|
||||||
|
|
||||||
@ -210,24 +214,24 @@
|
|||||||
** Another option is to malloc() a chunk of our own and call that our
|
** Another option is to malloc() a chunk of our own and call that our
|
||||||
** "stack".
|
** "stack".
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_stack_end(void){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_end(void){
|
||||||
extern void __heap_base
|
extern void __heap_base
|
||||||
/* see https://stackoverflow.com/questions/10038964 */;
|
/* see https://stackoverflow.com/questions/10038964 */;
|
||||||
return &__heap_base;
|
return &__heap_base;
|
||||||
}
|
}
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_stack_begin(void){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_begin(void){
|
||||||
extern void __data_end;
|
extern void __data_end;
|
||||||
return &__data_end;
|
return &__data_end;
|
||||||
}
|
}
|
||||||
static void * pWasmStackPtr = 0;
|
static void * pWasmStackPtr = 0;
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_stack_ptr(void){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_ptr(void){
|
||||||
if(!pWasmStackPtr) pWasmStackPtr = sqlite3_wasm_stack_end();
|
if(!pWasmStackPtr) pWasmStackPtr = sqlite3_wasm_stack_end();
|
||||||
return pWasmStackPtr;
|
return pWasmStackPtr;
|
||||||
}
|
}
|
||||||
SQLITE_WASM_KEEP void sqlite3_wasm_stack_restore(void * p){
|
SQLITE_WASM_EXPORT void sqlite3_wasm_stack_restore(void * p){
|
||||||
pWasmStackPtr = p;
|
pWasmStackPtr = p;
|
||||||
}
|
}
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_stack_alloc(int n){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_alloc(int n){
|
||||||
if(n<=0) return 0;
|
if(n<=0) return 0;
|
||||||
n = (n + 7) & ~7 /* align to 8-byte boundary */;
|
n = (n + 7) & ~7 /* align to 8-byte boundary */;
|
||||||
unsigned char * const p = (unsigned char *)sqlite3_wasm_stack_ptr();
|
unsigned char * const p = (unsigned char *)sqlite3_wasm_stack_ptr();
|
||||||
@ -263,14 +267,14 @@ static struct {
|
|||||||
/*
|
/*
|
||||||
** Returns the current pstack position.
|
** Returns the current pstack position.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_pstack_ptr(void){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_pstack_ptr(void){
|
||||||
return PStack.pPos;
|
return PStack.pPos;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
** Sets the pstack position poitner to p. Results are undefined if the
|
** Sets the pstack position poitner to p. Results are undefined if the
|
||||||
** given value did not come from sqlite3_wasm_pstack_ptr().
|
** given value did not come from sqlite3_wasm_pstack_ptr().
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP void sqlite3_wasm_pstack_restore(unsigned char * p){
|
SQLITE_WASM_EXPORT void sqlite3_wasm_pstack_restore(unsigned char * p){
|
||||||
assert(p>=PStack.pBegin && p<=PStack.pEnd && p>=PStack.pPos);
|
assert(p>=PStack.pBegin && p<=PStack.pEnd && p>=PStack.pPos);
|
||||||
assert(0==(p & 0x7));
|
assert(0==(p & 0x7));
|
||||||
if(p>=PStack.pBegin && p<=PStack.pEnd /*&& p>=PStack.pPos*/){
|
if(p>=PStack.pBegin && p<=PStack.pEnd /*&& p>=PStack.pPos*/){
|
||||||
@ -285,7 +289,7 @@ SQLITE_WASM_KEEP void sqlite3_wasm_pstack_restore(unsigned char * p){
|
|||||||
** JS code from having to do so, and most uses of the pstack will
|
** JS code from having to do so, and most uses of the pstack will
|
||||||
** call for doing so).
|
** call for doing so).
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP void * sqlite3_wasm_pstack_alloc(int n){
|
SQLITE_WASM_EXPORT void * sqlite3_wasm_pstack_alloc(int n){
|
||||||
if( n<=0 ) return 0;
|
if( n<=0 ) return 0;
|
||||||
//if( n & 0x7 ) n += 8 - (n & 0x7) /* align to 8-byte boundary */;
|
//if( n & 0x7 ) n += 8 - (n & 0x7) /* align to 8-byte boundary */;
|
||||||
n = (n + 7) & ~7 /* align to 8-byte boundary */;
|
n = (n + 7) & ~7 /* align to 8-byte boundary */;
|
||||||
@ -298,7 +302,7 @@ SQLITE_WASM_KEEP void * sqlite3_wasm_pstack_alloc(int n){
|
|||||||
** Return the number of bytes left which can be
|
** Return the number of bytes left which can be
|
||||||
** sqlite3_wasm_pstack_alloc()'d.
|
** sqlite3_wasm_pstack_alloc()'d.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP int sqlite3_wasm_pstack_remaining(void){
|
SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_remaining(void){
|
||||||
assert(PStack.pPos >= PStack.pBegin);
|
assert(PStack.pPos >= PStack.pBegin);
|
||||||
assert(PStack.pPos <= PStack.pEnd);
|
assert(PStack.pPos <= PStack.pEnd);
|
||||||
return (int)(PStack.pPos - PStack.pBegin);
|
return (int)(PStack.pPos - PStack.pBegin);
|
||||||
@ -309,7 +313,7 @@ SQLITE_WASM_KEEP int sqlite3_wasm_pstack_remaining(void){
|
|||||||
** any space which is currently allocated. This value is a
|
** any space which is currently allocated. This value is a
|
||||||
** compile-time constant.
|
** compile-time constant.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP int sqlite3_wasm_pstack_quota(void){
|
SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_quota(void){
|
||||||
return (int)(PStack.pEnd - PStack.pBegin);
|
return (int)(PStack.pEnd - PStack.pBegin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,7 +331,7 @@ SQLITE_WASM_KEEP int sqlite3_wasm_pstack_quota(void){
|
|||||||
**
|
**
|
||||||
** Returns err_code.
|
** Returns err_code.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_error(sqlite3*db, int err_code, const char *zMsg){
|
int sqlite3_wasm_db_error(sqlite3*db, int err_code, const char *zMsg){
|
||||||
if( db!=0 ){
|
if( db!=0 ){
|
||||||
if( 0!=zMsg ){
|
if( 0!=zMsg ){
|
||||||
@ -349,7 +353,7 @@ struct WasmTestStruct {
|
|||||||
void (*xFunc)(void*);
|
void (*xFunc)(void*);
|
||||||
};
|
};
|
||||||
typedef struct WasmTestStruct WasmTestStruct;
|
typedef struct WasmTestStruct WasmTestStruct;
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
void sqlite3_wasm_test_struct(WasmTestStruct * s){
|
void sqlite3_wasm_test_struct(WasmTestStruct * s){
|
||||||
if(s){
|
if(s){
|
||||||
s->v4 *= 2;
|
s->v4 *= 2;
|
||||||
@ -377,7 +381,7 @@ void sqlite3_wasm_test_struct(WasmTestStruct * s){
|
|||||||
** buffer is not large enough for the generated JSON and needs to be
|
** buffer is not large enough for the generated JSON and needs to be
|
||||||
** increased. In debug builds that will trigger an assert().
|
** increased. In debug builds that will trigger an assert().
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
const char * sqlite3_wasm_enum_json(void){
|
const char * sqlite3_wasm_enum_json(void){
|
||||||
static char aBuffer[1024 * 20] = {0} /* where the JSON goes */;
|
static char aBuffer[1024 * 20] = {0} /* where the JSON goes */;
|
||||||
int n = 0, nChildren = 0, nStruct = 0
|
int n = 0, nChildren = 0, nStruct = 0
|
||||||
@ -1182,7 +1186,7 @@ const char * sqlite3_wasm_enum_json(void){
|
|||||||
** method, SQLITE_MISUSE is returned, else the result of the xDelete()
|
** method, SQLITE_MISUSE is returned, else the result of the xDelete()
|
||||||
** call is returned.
|
** call is returned.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){
|
int sqlite3_wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){
|
||||||
int rc = SQLITE_MISUSE /* ??? */;
|
int rc = SQLITE_MISUSE /* ??? */;
|
||||||
if( 0==pVfs && 0!=zName ) pVfs = sqlite3_vfs_find(0);
|
if( 0==pVfs && 0!=zName ) pVfs = sqlite3_vfs_find(0);
|
||||||
@ -1200,7 +1204,7 @@ int sqlite3_wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){
|
|||||||
** defaulting to "main" if zDbName is 0. Returns 0 if no db with the
|
** defaulting to "main" if zDbName is 0. Returns 0 if no db with the
|
||||||
** given name is open.
|
** given name is open.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
sqlite3_vfs * sqlite3_wasm_db_vfs(sqlite3 *pDb, const char *zDbName){
|
sqlite3_vfs * sqlite3_wasm_db_vfs(sqlite3 *pDb, const char *zDbName){
|
||||||
sqlite3_vfs * pVfs = 0;
|
sqlite3_vfs * pVfs = 0;
|
||||||
sqlite3_file_control(pDb, zDbName ? zDbName : "main",
|
sqlite3_file_control(pDb, zDbName ? zDbName : "main",
|
||||||
@ -1223,7 +1227,7 @@ sqlite3_vfs * sqlite3_wasm_db_vfs(sqlite3 *pDb, const char *zDbName){
|
|||||||
** Returns 0 on success, an SQLITE_xxx code on error. Returns
|
** Returns 0 on success, an SQLITE_xxx code on error. Returns
|
||||||
** SQLITE_MISUSE if pDb is NULL.
|
** SQLITE_MISUSE if pDb is NULL.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_reset(sqlite3 *pDb){
|
int sqlite3_wasm_db_reset(sqlite3 *pDb){
|
||||||
int rc = SQLITE_MISUSE;
|
int rc = SQLITE_MISUSE;
|
||||||
if( pDb ){
|
if( pDb ){
|
||||||
@ -1254,7 +1258,7 @@ int sqlite3_wasm_db_reset(sqlite3 *pDb){
|
|||||||
** sqlite3_wasm_db_serialize() is arguably the better way to achieve
|
** sqlite3_wasm_db_serialize() is arguably the better way to achieve
|
||||||
** this.
|
** this.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_export_chunked( sqlite3* pDb,
|
int sqlite3_wasm_db_export_chunked( sqlite3* pDb,
|
||||||
int (*xCallback)(unsigned const char *zOut, int n) ){
|
int (*xCallback)(unsigned const char *zOut, int n) ){
|
||||||
sqlite3_int64 nSize = 0;
|
sqlite3_int64 nSize = 0;
|
||||||
@ -1305,7 +1309,7 @@ int sqlite3_wasm_db_export_chunked( sqlite3* pDb,
|
|||||||
** If `*pOut` is not NULL, the caller is responsible for passing it to
|
** If `*pOut` is not NULL, the caller is responsible for passing it to
|
||||||
** sqlite3_free() to free it.
|
** sqlite3_free() to free it.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
|
int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
|
||||||
unsigned char **pOut,
|
unsigned char **pOut,
|
||||||
sqlite3_int64 *nOut, unsigned int mFlags ){
|
sqlite3_int64 *nOut, unsigned int mFlags ){
|
||||||
@ -1362,7 +1366,7 @@ int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
|
|||||||
** portability, so that the API can still work in builds where BigInt
|
** portability, so that the API can still work in builds where BigInt
|
||||||
** support is disabled or unavailable.
|
** support is disabled or unavailable.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
||||||
const char *zFilename,
|
const char *zFilename,
|
||||||
const unsigned char * pData,
|
const unsigned char * pData,
|
||||||
@ -1446,7 +1450,7 @@ int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
|||||||
** NUL-terminated pointer to that string. It is up to the caller to
|
** NUL-terminated pointer to that string. It is up to the caller to
|
||||||
** use sqlite3_wasm_pstack_restore() to free the returned pointer.
|
** use sqlite3_wasm_pstack_restore() to free the returned pointer.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
char * sqlite3_wasm_kvvfsMakeKeyOnPstack(const char *zClass,
|
char * sqlite3_wasm_kvvfsMakeKeyOnPstack(const char *zClass,
|
||||||
const char *zKeyIn){
|
const char *zKeyIn){
|
||||||
assert(sqlite3KvvfsMethods.nKeySize>24);
|
assert(sqlite3KvvfsMethods.nKeySize>24);
|
||||||
@ -1465,7 +1469,7 @@ char * sqlite3_wasm_kvvfsMakeKeyOnPstack(const char *zClass,
|
|||||||
** Returns the pointer to the singleton object which holds the kvvfs
|
** Returns the pointer to the singleton object which holds the kvvfs
|
||||||
** I/O methods and associated state.
|
** I/O methods and associated state.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
sqlite3_kvvfs_methods * sqlite3_wasm_kvvfs_methods(void){
|
sqlite3_kvvfs_methods * sqlite3_wasm_kvvfs_methods(void){
|
||||||
return &sqlite3KvvfsMethods;
|
return &sqlite3KvvfsMethods;
|
||||||
}
|
}
|
||||||
@ -1480,7 +1484,7 @@ sqlite3_kvvfs_methods * sqlite3_wasm_kvvfs_methods(void){
|
|||||||
** sqlite3_vtab_config(), or SQLITE_MISUSE if the 2nd arg is not a
|
** sqlite3_vtab_config(), or SQLITE_MISUSE if the 2nd arg is not a
|
||||||
** valid value.
|
** valid value.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_vtab_config(sqlite3 *pDb, int op, int arg){
|
int sqlite3_wasm_vtab_config(sqlite3 *pDb, int op, int arg){
|
||||||
switch(op){
|
switch(op){
|
||||||
case SQLITE_VTAB_DIRECTONLY:
|
case SQLITE_VTAB_DIRECTONLY:
|
||||||
@ -1500,7 +1504,7 @@ int sqlite3_wasm_vtab_config(sqlite3 *pDb, int op, int arg){
|
|||||||
** Wrapper for the variants of sqlite3_db_config() which take
|
** Wrapper for the variants of sqlite3_db_config() which take
|
||||||
** (int,int*) variadic args.
|
** (int,int*) variadic args.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
|
int sqlite3_wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
|
||||||
switch(op){
|
switch(op){
|
||||||
case SQLITE_DBCONFIG_ENABLE_FKEY:
|
case SQLITE_DBCONFIG_ENABLE_FKEY:
|
||||||
@ -1531,7 +1535,7 @@ int sqlite3_wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
|
|||||||
** Wrapper for the variants of sqlite3_db_config() which take
|
** Wrapper for the variants of sqlite3_db_config() which take
|
||||||
** (void*,int,int) variadic args.
|
** (void*,int,int) variadic args.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int arg3){
|
int sqlite3_wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int arg3){
|
||||||
switch(op){
|
switch(op){
|
||||||
case SQLITE_DBCONFIG_LOOKASIDE:
|
case SQLITE_DBCONFIG_LOOKASIDE:
|
||||||
@ -1547,7 +1551,7 @@ int sqlite3_wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int
|
|||||||
** Wrapper for the variants of sqlite3_db_config() which take
|
** Wrapper for the variants of sqlite3_db_config() which take
|
||||||
** (const char *) variadic args.
|
** (const char *) variadic args.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){
|
int sqlite3_wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){
|
||||||
switch(op){
|
switch(op){
|
||||||
case SQLITE_DBCONFIG_MAINDBNAME:
|
case SQLITE_DBCONFIG_MAINDBNAME:
|
||||||
@ -1564,7 +1568,7 @@ int sqlite3_wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){
|
|||||||
** Binding for combinations of sqlite3_config() arguments which take
|
** Binding for combinations of sqlite3_config() arguments which take
|
||||||
** a single integer argument.
|
** a single integer argument.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_config_i(int op, int arg){
|
int sqlite3_wasm_config_i(int op, int arg){
|
||||||
return sqlite3_config(op, arg);
|
return sqlite3_config(op, arg);
|
||||||
}
|
}
|
||||||
@ -1576,7 +1580,7 @@ int sqlite3_wasm_config_i(int op, int arg){
|
|||||||
** Binding for combinations of sqlite3_config() arguments which take
|
** Binding for combinations of sqlite3_config() arguments which take
|
||||||
** two int arguments.
|
** two int arguments.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_config_ii(int op, int arg1, int arg2){
|
int sqlite3_wasm_config_ii(int op, int arg1, int arg2){
|
||||||
return sqlite3_config(op, arg1, arg2);
|
return sqlite3_config(op, arg1, arg2);
|
||||||
}
|
}
|
||||||
@ -1588,7 +1592,7 @@ int sqlite3_wasm_config_ii(int op, int arg1, int arg2){
|
|||||||
** Binding for combinations of sqlite3_config() arguments which take
|
** Binding for combinations of sqlite3_config() arguments which take
|
||||||
** a single i64 argument.
|
** a single i64 argument.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_config_j(int op, sqlite3_int64 arg){
|
int sqlite3_wasm_config_j(int op, sqlite3_int64 arg){
|
||||||
return sqlite3_config(op, arg);
|
return sqlite3_config(op, arg);
|
||||||
}
|
}
|
||||||
@ -1617,7 +1621,7 @@ int sqlite3_wasm_config_j(int op, sqlite3_int64 arg){
|
|||||||
** Safari-specific quirk covered at
|
** Safari-specific quirk covered at
|
||||||
** https://sqlite.org/forum/info/e5b20e1feb37a19a.
|
** https://sqlite.org/forum/info/e5b20e1feb37a19a.
|
||||||
**/
|
**/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
void * sqlite3_wasm_ptr_to_sqlite3_free(void){
|
void * sqlite3_wasm_ptr_to_sqlite3_free(void){
|
||||||
return (void*)sqlite3_free;
|
return (void*)sqlite3_free;
|
||||||
}
|
}
|
||||||
@ -1647,7 +1651,7 @@ void * sqlite3_wasm_ptr_to_sqlite3_free(void){
|
|||||||
** the virtual FS fails. In builds compiled without SQLITE_ENABLE_WASMFS
|
** the virtual FS fails. In builds compiled without SQLITE_ENABLE_WASMFS
|
||||||
** defined, SQLITE_NOTFOUND is returned without side effects.
|
** defined, SQLITE_NOTFOUND is returned without side effects.
|
||||||
*/
|
*/
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
|
int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
|
||||||
static backend_t pOpfs = 0;
|
static backend_t pOpfs = 0;
|
||||||
if( !zMountPoint || !*zMountPoint ) zMountPoint = "/opfs";
|
if( !zMountPoint || !*zMountPoint ) zMountPoint = "/opfs";
|
||||||
@ -1667,7 +1671,7 @@ int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
|
|||||||
return pOpfs ? 0 : SQLITE_NOMEM;
|
return pOpfs ? 0 : SQLITE_NOMEM;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_init_wasmfs(const char *zUnused){
|
int sqlite3_wasm_init_wasmfs(const char *zUnused){
|
||||||
//emscripten_console_warn("WASMFS OPFS is not compiled in.");
|
//emscripten_console_warn("WASMFS OPFS is not compiled in.");
|
||||||
if(zUnused){/*unused*/}
|
if(zUnused){/*unused*/}
|
||||||
@ -1677,51 +1681,51 @@ int sqlite3_wasm_init_wasmfs(const char *zUnused){
|
|||||||
|
|
||||||
#if SQLITE_WASM_TESTS
|
#if SQLITE_WASM_TESTS
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int sqlite3_wasm_test_intptr(int * p){
|
int sqlite3_wasm_test_intptr(int * p){
|
||||||
return *p = *p * 2;
|
return *p = *p * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
void * sqlite3_wasm_test_voidptr(void * p){
|
void * sqlite3_wasm_test_voidptr(void * p){
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int64_t sqlite3_wasm_test_int64_max(void){
|
int64_t sqlite3_wasm_test_int64_max(void){
|
||||||
return (int64_t)0x7fffffffffffffff;
|
return (int64_t)0x7fffffffffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int64_t sqlite3_wasm_test_int64_min(void){
|
int64_t sqlite3_wasm_test_int64_min(void){
|
||||||
return ~sqlite3_wasm_test_int64_max();
|
return ~sqlite3_wasm_test_int64_max();
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int64_t sqlite3_wasm_test_int64_times2(int64_t x){
|
int64_t sqlite3_wasm_test_int64_times2(int64_t x){
|
||||||
return x * 2;
|
return x * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
void sqlite3_wasm_test_int64_minmax(int64_t * min, int64_t *max){
|
void sqlite3_wasm_test_int64_minmax(int64_t * min, int64_t *max){
|
||||||
*max = sqlite3_wasm_test_int64_max();
|
*max = sqlite3_wasm_test_int64_max();
|
||||||
*min = sqlite3_wasm_test_int64_min();
|
*min = sqlite3_wasm_test_int64_min();
|
||||||
/*printf("minmax: min=%lld, max=%lld\n", *min, *max);*/
|
/*printf("minmax: min=%lld, max=%lld\n", *min, *max);*/
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
int64_t sqlite3_wasm_test_int64ptr(int64_t * p){
|
int64_t sqlite3_wasm_test_int64ptr(int64_t * p){
|
||||||
/*printf("sqlite3_wasm_test_int64ptr( @%lld = 0x%llx )\n", (int64_t)p, *p);*/
|
/*printf("sqlite3_wasm_test_int64ptr( @%lld = 0x%llx )\n", (int64_t)p, *p);*/
|
||||||
return *p = *p * 2;
|
return *p = *p * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
void sqlite3_wasm_test_stack_overflow(int recurse){
|
void sqlite3_wasm_test_stack_overflow(int recurse){
|
||||||
if(recurse) sqlite3_wasm_test_stack_overflow(recurse);
|
if(recurse) sqlite3_wasm_test_stack_overflow(recurse);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For testing the 'string:dealloc' whwasmutil.xWrap() conversion. */
|
/* For testing the 'string:dealloc' whwasmutil.xWrap() conversion. */
|
||||||
SQLITE_WASM_KEEP
|
SQLITE_WASM_EXPORT
|
||||||
char * sqlite3_wasm_test_str_hello(int fail){
|
char * sqlite3_wasm_test_str_hello(int fail){
|
||||||
char * s = fail ? 0 : (char *)sqlite3_malloc(6);
|
char * s = fail ? 0 : (char *)sqlite3_malloc(6);
|
||||||
if(s){
|
if(s){
|
||||||
@ -1732,4 +1736,4 @@ char * sqlite3_wasm_test_str_hello(int fail){
|
|||||||
}
|
}
|
||||||
#endif /* SQLITE_WASM_TESTS */
|
#endif /* SQLITE_WASM_TESTS */
|
||||||
|
|
||||||
#undef SQLITE_WASM_KEEP
|
#undef SQLITE_WASM_EXPORT
|
||||||
|
22
ext/wasm/example_extra_init.c
Normal file
22
ext/wasm/example_extra_init.c
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
** If the canonical build process finds the file
|
||||||
|
** sqlite3_wasm_extra_init.c in the main wasm build directory, it
|
||||||
|
** arranges to include that file in the build of sqlite3.wasm and
|
||||||
|
** defines SQLITE_EXTRA_INIT=sqlite3_wasm_extra_init.
|
||||||
|
**
|
||||||
|
** sqlite3_wasm_extra_init() must be a function with this signature:
|
||||||
|
**
|
||||||
|
** int sqlite3_wasm_extra_init(const char *)
|
||||||
|
**
|
||||||
|
** and the sqlite3 library will call it with an argument of NULL one
|
||||||
|
** time during sqlite3_initialize(). If it returns non-0,
|
||||||
|
** initialization of the library will fail.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "sqlite3.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int sqlite3_wasm_extra_init(const char *z){
|
||||||
|
fprintf(stderr,"%s: %s()\n", __FILE__, __func__);
|
||||||
|
return 0;
|
||||||
|
}
|
@ -52,7 +52,7 @@ $(EXPORTED_FUNCTIONS.fiddle): $(fiddle.EXPORTED_FUNCTIONS.in) $(MAKEFILE.fiddle)
|
|||||||
|
|
||||||
fiddle-module.js := $(dir.fiddle)/fiddle-module.js
|
fiddle-module.js := $(dir.fiddle)/fiddle-module.js
|
||||||
fiddle-module.wasm := $(subst .js,.wasm,$(fiddle-module.js))
|
fiddle-module.wasm := $(subst .js,.wasm,$(fiddle-module.js))
|
||||||
fiddle.cses := $(dir.top)/shell.c $(sqlite3-wasm.c)
|
fiddle.cses := $(dir.top)/shell.c $(sqlite3-wasm.cs)
|
||||||
|
|
||||||
fiddle.SOAP.js := $(dir.fiddle)/$(notdir $(SOAP.js))
|
fiddle.SOAP.js := $(dir.fiddle)/$(notdir $(SOAP.js))
|
||||||
$(fiddle.SOAP.js): $(SOAP.js)
|
$(fiddle.SOAP.js): $(SOAP.js)
|
||||||
|
19
manifest
19
manifest
@ -1,5 +1,5 @@
|
|||||||
C When\sa\stable-valued\sfunction\sappears\sas\sthe\sright\stable\sof\sa\sRIGHT\sJOIN,\nthe\sargument\sconstraints\son\sthe\stable-valued\sfunction\sshould\sbe\sconsidered\npart\sof\sthe\sON\sclause\sof\sthe\sRIGHT\sJOIN.\s\sFix\sfor\sthe\sproblem\sreported\nby\s[forum:/forumpost/422e635f3beafbf6|forum\spost\s422e635f3beafbf6].\s\sTest\ncases\sin\sTH3.\s\sPossibly\srelated\sto\sthe\senhancement\sat\s[501609eddf2a46d5].
|
C Extend\swasm\sbuild\sto\senable\sinclusion\sof\sclient-custom\sC\scode,\sinitialized\svia\sthe\sSQLITE_EXTRA_INIT\smechanism,\sper\sdiscussion\sin\s[forum:1e1c04f3ed1bc96b|forum\spost\s1e1c04f3ed1bc96b].
|
||||||
D 2023-02-26T20:57:09.904
|
D 2023-02-27T07:12:28.112
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@ -467,7 +467,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
|
|||||||
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
|
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
|
||||||
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
|
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
|
||||||
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
|
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
|
||||||
F ext/wasm/GNUmakefile 5a8dc82f5384a3deaaee777ed7eefd3c8cbcd0efe797a66925537d2b975af305
|
F ext/wasm/GNUmakefile 122607cd0255134ae88bfdf6424f299d955b74bc8a6c48160c54c4ecbc7797b3
|
||||||
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
|
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
|
||||||
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
|
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
|
||||||
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api d6a5078f48a5301ed17b9a30331075d9b2506e1360c1f0dee0c7816c10acd9ab
|
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api d6a5078f48a5301ed17b9a30331075d9b2506e1360c1f0dee0c7816c10acd9ab
|
||||||
@ -488,7 +488,7 @@ F ext/wasm/api/sqlite3-opfs-async-proxy.js 7795b84b66a7a8dedc791340709b310bb497c
|
|||||||
F ext/wasm/api/sqlite3-v-helper.js 6f6c3e390a72e08b0a5b16a0d567d7af3c04d172831853a29d72a6f1dd40ff24
|
F ext/wasm/api/sqlite3-v-helper.js 6f6c3e390a72e08b0a5b16a0d567d7af3c04d172831853a29d72a6f1dd40ff24
|
||||||
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 0dfddd0fcd354817c3d5887decebb8a293cbb926c2639ba09b995a524f1085fb
|
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 0dfddd0fcd354817c3d5887decebb8a293cbb926c2639ba09b995a524f1085fb
|
||||||
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
||||||
F ext/wasm/api/sqlite3-wasm.c 76625a70937a8522d014ef686c32db5b53a3ee61850323f5c601d2ac39fe52fe
|
F ext/wasm/api/sqlite3-wasm.c 223d30c41d811cae8b9f1175fa68f2f1fb3cc056d16ad0def3b0ea5c65757a6c
|
||||||
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js c5ac33e39f21a3481812d7333ca6e18853640d423a01960ca8dbc6e7c5c3c21c
|
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js c5ac33e39f21a3481812d7333ca6e18853640d423a01960ca8dbc6e7c5c3c21c
|
||||||
F ext/wasm/api/sqlite3-worker1.c-pp.js 77b3835192469e9da23926ec8f78fb0b114a51d048dc54388709ac22b5c5f0a0
|
F ext/wasm/api/sqlite3-worker1.c-pp.js 77b3835192469e9da23926ec8f78fb0b114a51d048dc54388709ac22b5c5f0a0
|
||||||
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
||||||
@ -508,7 +508,8 @@ F ext/wasm/demo-worker1-promiser.js b99c550763fa792c204e9a7cceadd976004036d9fc3e
|
|||||||
F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
|
F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
|
||||||
F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa
|
F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa
|
||||||
F ext/wasm/dist.make f55f9c9e1980ea11a59964e59535c66175a17f004d1c2e274522c3366b3a084a
|
F ext/wasm/dist.make f55f9c9e1980ea11a59964e59535c66175a17f004d1c2e274522c3366b3a084a
|
||||||
F ext/wasm/fiddle.make dbe36b90b8907ae28ecb9c0e9fd8389dbdaecf117ea4fb2ea33864bdfa498a94
|
F ext/wasm/example_extra_init.c 32c6ce5211409400ee875634d0071a3e4060b6b1d12417624a7e60a7c9d83c40
|
||||||
|
F ext/wasm/fiddle.make 71b686d1f3355c0ce65cd76fb231e209dc30fbd2a3b0fd635bf26df904bffce4
|
||||||
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
||||||
F ext/wasm/fiddle/fiddle-worker.js 163d6139a93fab4bcb72064923df050d4e7c0ff0d8aa061ce8776a6e75da8a10
|
F ext/wasm/fiddle/fiddle-worker.js 163d6139a93fab4bcb72064923df050d4e7c0ff0d8aa061ce8776a6e75da8a10
|
||||||
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
|
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
|
||||||
@ -2046,8 +2047,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 21aec65e5e2a01e58dd0bb8c8b9b29b8414373b53353fc7ca80a152fdd27566b
|
P 46639f682975dac6efec4e230aca2c9b127b4fc77e0b465fad38ef4caa9b7a4c
|
||||||
R dd644aa05c12deae01f2f05d2c4bf4e4
|
R 2852837dfc2447b63257f54764575344
|
||||||
U drh
|
U stephan
|
||||||
Z 73efc57a25cea16beea22ea8fc7c8752
|
Z 644646fdf69d91f54f8f3e9a045a3c06
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
46639f682975dac6efec4e230aca2c9b127b4fc77e0b465fad38ef4caa9b7a4c
|
68a52cafff60f19c9c998133d04f192b1e8b23f78b8cee13807d76845ef5e13d
|
Reference in New Issue
Block a user