diff --git a/xwords4/android/jni/andutils.c b/xwords4/android/jni/andutils.c index ce2f8a329..2d9235581 100644 --- a/xwords4/android/jni/andutils.c +++ b/xwords4/android/jni/andutils.c @@ -847,8 +847,9 @@ deleteLocalRefs( JNIEnv* env, ... ) jobject jnext = va_arg( ap, jobject ); if ( DELETE_NO_REF == jnext ) { break; + } else if ( !!jnext ) { + deleteLocalRef( env, jnext ); } - deleteLocalRef( env, jnext ); } va_end( ap ); } diff --git a/xwords4/android/jni/utilwrapper.c b/xwords4/android/jni/utilwrapper.c index 6e5b8a215..816ca6424 100644 --- a/xwords4/android/jni/utilwrapper.c +++ b/xwords4/android/jni/utilwrapper.c @@ -575,17 +575,14 @@ and_util_notifyIllegalWords( XW_UtilCtxt* uc, XWEnv xwe, BadWordInfo* bwi, #ifdef XWFEATURE_CHAT static void -and_util_showChat( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* msg, XP_S16 from, XP_U32 timestamp ) +and_util_showChat( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* msg, + const XP_UCHAR* from, XP_U32 timestamp ) { UTIL_CBK_HEADER( "showChat", "(Ljava/lang/String;ILjava/lang/String;I)V" ); - jstring jname = NULL; - if ( 0 <= from ) { - LocalPlayer* lp = &uc->gameInfo->players[from]; - XP_ASSERT( !lp->isLocal ); - jname = (*env)->NewStringUTF( env, lp->name ); - } + jstring jname = !!from ? (*env)->NewStringUTF( env, from ) : NULL; jstring jmsg = (*env)->NewStringUTF( env, msg ); + (*env)->CallVoidMethod( env, util->jutil, mid, jmsg, from, jname, timestamp ); deleteLocalRefs( env, jmsg, jname, DELETE_NO_REF ); UTIL_CBK_TAIL(); diff --git a/xwords4/common/server.c b/xwords4/common/server.c index 66f696c0d..27d8569cb 100644 --- a/xwords4/common/server.c +++ b/xwords4/common/server.c @@ -1106,7 +1106,9 @@ receiveChat( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* incoming ) XP_S16 from = -1; if ( 1 <= stream_getSize( incoming ) ) { from = stream_getU8( incoming ); - XP_ASSERT( !server->vol.gi->players[from].isLocal ); + if ( server->vol.gi->players[from].isLocal ) { + from = -1; + } } XP_U32 timestamp = sizeof(timestamp) <= stream_getSize( incoming ) @@ -1116,7 +1118,11 @@ receiveChat( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* incoming ) sendChatToClientsExcept( server, xwe, sourceClientIndex, msg, from, timestamp ); } - util_showChat( server->vol.util, xwe, msg, from, timestamp ); + const XP_UCHAR* sender = NULL; + if ( 0 <= from ) { + sender = server->vol.gi->players[from].name; + } + util_showChat( server->vol.util, xwe, msg, sender, timestamp ); XP_FREE( server->mpool, msg ); return XP_TRUE; } diff --git a/xwords4/common/util.h b/xwords4/common/util.h index 67db09364..3a5555ada 100644 --- a/xwords4/common/util.h +++ b/xwords4/common/util.h @@ -186,7 +186,7 @@ typedef struct UtilVtable { #ifdef XWFEATURE_CHAT void (*m_util_showChat)( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* const msg, - XP_S16 from, XP_U32 timestamp ); + const XP_UCHAR* from, XP_U32 timestamp ); #endif #ifdef SHOW_PROGRESS diff --git a/xwords4/linux/cursesboard.c b/xwords4/linux/cursesboard.c index 4aed2d70d..d863bb9d1 100644 --- a/xwords4/linux/cursesboard.c +++ b/xwords4/linux/cursesboard.c @@ -1251,17 +1251,13 @@ curses_util_informWordsBlocked( XW_UtilCtxt* XP_UNUSED(uc), XWEnv XP_UNUSED(xwe) static void curses_util_showChat( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe), const XP_UCHAR* const XP_UNUSED_DBG(msg), - XP_S16 XP_UNUSED_DBG(from), XP_U32 XP_UNUSED(timestamp) ) + const XP_UCHAR* const XP_UNUSED_DBG(from), + XP_U32 XP_UNUSED(timestamp) ) { CursesBoardGlobals* globals = (CursesBoardGlobals*)uc->closure; globals->nChatsSent = 0; # ifdef DEBUG - const XP_UCHAR* name = ""; - if ( 0 <= from ) { - CommonGlobals* cGlobals = &globals->cGlobals; - name = cGlobals->gi->players[from].name; - } - XP_LOGFF( "got \"%s\" from %s", msg, name ); + XP_LOGFF( "got \"%s\" from %s", msg, from ); # endif } #endif diff --git a/xwords4/linux/gtkboard.c b/xwords4/linux/gtkboard.c index f81b7935a..84fa7c3eb 100644 --- a/xwords4/linux/gtkboard.c +++ b/xwords4/linux/gtkboard.c @@ -1944,19 +1944,15 @@ gtk_util_getMQTTIDsFor( XW_UtilCtxt* uc, XWEnv xwe, XP_U16 nRelayIDs, #ifdef XWFEATURE_CHAT static void gtk_util_showChat( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe), - const XP_UCHAR* const msg, XP_S16 from, - XP_U32 tsSecs ) + const XP_UCHAR* const msg, + const XP_UCHAR* const from, XP_U32 tsSecs ) { GtkGameGlobals* globals = (GtkGameGlobals*)uc->closure; XP_UCHAR buf[1024]; - XP_UCHAR* name = ""; - if ( 0 <= from ) { - name = globals->cGlobals.gi->players[from].name; - } GDateTime* dt = g_date_time_new_from_unix_utc( tsSecs ); gchar* tsStr = g_date_time_format( dt, "%T" ); - XP_SNPRINTF( buf, VSIZE(buf), "Quoth %s at %s: \"%s\"", name, tsStr, msg ); + XP_SNPRINTF( buf, VSIZE(buf), "Quoth %s at %s: \"%s\"", from, tsStr, msg ); g_free( tsStr ); g_date_time_unref (dt);