diff --git a/xwords4/android/jni/utilwrapper.c b/xwords4/android/jni/utilwrapper.c index e974c33ac..17f57fac0 100644 --- a/xwords4/android/jni/utilwrapper.c +++ b/xwords4/android/jni/utilwrapper.c @@ -494,16 +494,6 @@ and_dutil_storePtr( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, DUTIL_CBK_TAIL(); } -static void -and_dutil_storeStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, - XWStreamCtxt* stream ) -{ - const void* ptr = stream_getPtr( stream ); - XP_U16 len = stream_getSize( stream ); - - and_dutil_storePtr( duc, xwe, key, ptr, len ); -} - static jbyteArray loadToByteArray( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, const XP_UCHAR* keySuffix ) @@ -538,21 +528,6 @@ and_dutil_loadPtr( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, *lenp = len; } -static void -and_dutil_loadStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, - const XP_UCHAR* keySuffix, XWStreamCtxt* stream ) -{ - JNIEnv* env = xwe; - jbyteArray jvalue = loadToByteArray( duc, xwe, key, keySuffix ); - if ( jvalue != NULL ) { - jbyte* jelems = (*env)->GetByteArrayElements( env, jvalue, NULL ); - jsize len = (*env)->GetArrayLength( env, jvalue ); - stream_putBytes( stream, jelems, len ); - (*env)->ReleaseByteArrayElements( env, jvalue, jelems, 0 ); - deleteLocalRef( env, jvalue ); - } -} - static void and_util_notifyIllegalWords( XW_UtilCtxt* uc, XWEnv xwe, BadWordInfo* bwi, XP_U16 turn, XP_Bool turnLost ) @@ -1022,8 +997,6 @@ makeDUtil( MPFORMAL JNIEnv* env, SET_DPROC(getCurSeconds); SET_DPROC(getUserString); SET_DPROC(getUserQuantityString); - SET_DPROC(storeStream); - SET_DPROC(loadStream); SET_DPROC(storePtr); SET_DPROC(loadPtr); # ifdef XWFEATURE_DEVID diff --git a/xwords4/common/dutil.c b/xwords4/common/dutil.c index fba8ba5b9..98391c0df 100644 --- a/xwords4/common/dutil.c +++ b/xwords4/common/dutil.c @@ -22,6 +22,36 @@ #include "mempool.h" #include "comtypes.h" #include "dutil.h" +#include "xwstream.h" + +static void +super_dutil_storeStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, + XWStreamCtxt* data ) +{ + const void* ptr = stream_getPtr( data ); + XP_U16 len = stream_getSize( data ); + dutil_storePtr( duc, xwe, key, ptr, len ); +} + +static void +super_dutil_loadStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, + // PENDING() remove this after a few months. + const XP_UCHAR* fallbackKey, + XWStreamCtxt* inOut ) +{ + /* get the size */ + XP_U16 len = 0; + dutil_loadPtr( duc, xwe, key, fallbackKey, NULL, &len ); + + /* load if it exists */ + if ( 0 < len ) { + void* buf = XP_MALLOC( duc->mpool, len ); + dutil_loadPtr( duc, xwe, key, fallbackKey, buf, &len ); + + stream_putBytes( inOut, buf, len ); + XP_FREEP( duc->mpool, &buf ); + } +} void dutil_super_init( MPFORMAL XW_DUtilCtxt* dutil ) @@ -31,4 +61,7 @@ dutil_super_init( MPFORMAL XW_DUtilCtxt* dutil ) #endif MPASSIGN( dutil->mpool, mpool ); + + SET_VTABLE_ENTRY( &dutil->vtable, dutil_loadStream, super ); + SET_VTABLE_ENTRY( &dutil->vtable, dutil_storeStream, super ); } diff --git a/xwords4/linux/lindutil.c b/xwords4/linux/lindutil.c index 7f49202b5..24c2de6d0 100644 --- a/xwords4/linux/lindutil.c +++ b/xwords4/linux/lindutil.c @@ -35,10 +35,6 @@ static const XP_UCHAR* linux_dutil_getUserString( XW_DUtilCtxt* duc, XWEnv xwe, static const XP_UCHAR* linux_dutil_getUserQuantityString( XW_DUtilCtxt* duc, XWEnv xwe, XP_U16 code, XP_U16 quantity ); -static void linux_dutil_storeStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, - XWStreamCtxt* data ); -static void linux_dutil_loadStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, - const XP_UCHAR* keySuffix, XWStreamCtxt* inOut ); static void linux_dutil_storePtr( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, const void* data, XP_U16 len ); static void linux_dutil_loadPtr( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, @@ -145,8 +141,6 @@ dutils_init( MPFORMAL VTableMgr* vtMgr, void* closure ) SET_PROC(getCurSeconds); SET_PROC(getUserString); SET_PROC(getUserQuantityString); - SET_PROC(storeStream); - SET_PROC(loadStream); SET_PROC(storePtr); SET_PROC(loadPtr); @@ -283,31 +277,6 @@ linux_dutil_getUserQuantityString( XW_DUtilCtxt* duc, XWEnv xwe, XP_U16 code, return linux_dutil_getUserString( duc, xwe, code ); } -static void -linux_dutil_storeStream( XW_DUtilCtxt* duc, XWEnv xwe, - const XP_UCHAR* key, XWStreamCtxt* stream ) -{ - const void* ptr = stream_getPtr( stream ); - XP_U16 len = stream_getSize( stream ); - linux_dutil_storePtr( duc, xwe, key, ptr, len ); -} - -static void -linux_dutil_loadStream( XW_DUtilCtxt* duc, XWEnv xwe, const XP_UCHAR* key, - const XP_UCHAR* keySuffix, XWStreamCtxt* stream ) -{ - XP_U16 len = 0; - linux_dutil_loadPtr( duc, xwe, key, keySuffix, NULL, &len ); - if ( 0 < len ) { - XP_U8 buf[len]; - linux_dutil_loadPtr( duc, xwe, key, keySuffix, buf, &len ); - - stream_putBytes( stream, buf, len ); - } - - XP_LOGF( "%s(key=%s) => len: %d", __func__, key, stream_getSize(stream) ); -} - static void linux_dutil_storePtr( XW_DUtilCtxt* duc, XWEnv XP_UNUSED(xwe), const XP_UCHAR* key, const void* data, const XP_U16 len )