From d899baf95cb26ee1cfda2e8243a11630acd8e296 Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Tue, 16 Jun 2026 18:25:20 +0000 Subject: [PATCH] 0658 nwnss: fix CSA userspace message carrier casts --- src/nwnss/comn/common/cSA.c | 54 +++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/src/nwnss/comn/common/cSA.c b/src/nwnss/comn/common/cSA.c index a828f9c..2776d14 100644 --- a/src/nwnss/comn/common/cSA.c +++ b/src/nwnss/comn/common/cSA.c @@ -36,6 +36,10 @@ #include +#ifdef MARS_NWE_NWNSS_USERSPACE +#include +#endif + #include #include #include @@ -54,6 +58,14 @@ #include "csaLease.h" #include "xMsg.h" +#ifdef MARS_NWE_NWNSS_USERSPACE +/* cSA userspace status bridge: Msg_s.sys.where is a QUAD carrier here. */ +#undef SetErrnoFromStatus +#define SetErrnoFromStatus(_genMsg, _msg) \ + ((_genMsg)->errStatus = (_msg)->sys.status, \ + ((_genMsg)->errStatusSetter = (char *)(uintptr_t)((_msg)->sys.where))) +#endif + NINT XLSSArrayIndex; #if NSS_DEBUG IS_ENABLED /* Our xMsg_s must not be bigger than a Msg_s */ @@ -184,9 +196,12 @@ void CSA_VOL_GetBeastFromVolumeMsg( csaPacket->CGBM_beastLeaseID = beastLeaseID; csaPacket->CGBM_dataSeqNum = zlssBeast->csaBeast->CB_dataSeqNum; + NINT xlssPackedSize = (NINT)msg->sys.data[0].length; + status = CSA_VOL_GetBeastFromVolume(&genMsg, zlssBeast, - msg->sys.data[0].start, - &msg->sys.data[0].length); + (void *)(uintptr_t)msg->sys.data[0].start, + &xlssPackedSize); + msg->sys.data[0].length = (QUAD)xlssPackedSize; if (status != zOK) { CSA_BeastLeaseToss( &genMsg, (CsaVolumeDoor_s *)msg->sys.door, @@ -247,10 +262,11 @@ void CSA_VOL_LookupByNameInDirectoryMsg( csaPacket->CLBM_zid = CSA_VOL_LookupByNameInDirectory(&genMsg, (File_s *)directory, nameSpace, xlssPacket->XLBM_nameType, - (unicode_t *)msg->sys.data[0].start, /* name */ + (unicode_t *)(uintptr_t)msg->sys.data[0].start, /* name */ // cnt xlssPacket->XLBM_nameUniquifier, // cnt &nameUniquifier, - (msg->sys.numDataAreas == 2 ? msg->sys.data[1].start : NULL)); + (msg->sys.numDataAreas == 2 ? + (void *)(uintptr_t)msg->sys.data[1].start : NULL)); // cnt csaPacket->CLBM_nameUniquifier = nameUniquifier; @@ -381,7 +397,8 @@ void CSA_VOL_GetFileBlkMsg( csaPacket->CGFM_volBlk = buffer->volBlk; zASSERT(msg->sys.data[0].length == PAGE_SIZE); mapBufferPage(buffer); - memcpy(msg->sys.data[0].start, buffer->pBuf.data, msg->sys.data[0].length); + memcpy((void *)(uintptr_t)msg->sys.data[0].start, + buffer->pBuf.data, msg->sys.data[0].length); unmapBufferPage(buffer); CACHE_RELEASE(buffer); @@ -461,7 +478,8 @@ void CSA_VOL_AsyncReadFileBlkMsg( csaPacket->CARM_volBlk = buffer->volBlk; zASSERT(msg->sys.data[0].length == PAGE_SIZE); mapBufferPage(buffer); - memcpy(msg->sys.data[0].start, buffer->pBuf.data, msg->sys.data[0].length); + memcpy((void *)(uintptr_t)msg->sys.data[0].start, + buffer->pBuf.data, msg->sys.data[0].length); unmapBufferPage(buffer); CACHE_RELEASE(buffer); @@ -511,7 +529,7 @@ void CSA_VOL_GetExtentListMsg( status = CSA_VOL_GetExtentList(&genMsg, beast, xlssPacket->XGEM_startingBlk, msg->sys.data[0].length / sizeof(Blknum_t), - (Blknum_t *)msg->sys.data[0].start, + (Blknum_t *)(uintptr_t)msg->sys.data[0].start, &retNumExtents, &csaPacket->CGEM_retNextBlock); @@ -594,8 +612,8 @@ void CSA_VOL_GetPhysicalExtentMsg( } zMsg.sys.status = zOK; - zMsg.sys.owner = NULL; - zMsg.sys.door = NULL; + zMsg.sys.owner = 0; + zMsg.sys.door = 0; zMsg.sys.numDataAreas = 1; zMsg.sys.data[MAP_DATA].start = xMsg->sys.data[MAP_DATA].start; zMsg.sys.data[MAP_DATA].length = xMsg->sys.data[MAP_DATA].length; @@ -666,12 +684,12 @@ void CSA_VOL_DioReadUnitsMsg( } msg.sys.status = zOK; - msg.sys.owner = NULL; - msg.sys.door = NULL; + msg.sys.owner = 0; + msg.sys.door = 0; msg.sys.numDataAreas = 1; // msg.sys.data[DIO_DATA].start = csaPacket->CDRM_retData; msg.sys.data[DIO_DATA].length = xlssPacket->XDRM_length; - msg.sys.callback = NULL; + msg.sys.callback = 0; msg.body.id.sa = xlssPacket->XDRM_saID; msg.body.dio.unitOffset = xlssPacket->XDRM_startSector; @@ -787,10 +805,11 @@ void CSA_VOL_WildcardLookupMsg( csaPacket->CWLM_zid = CSA_VOL_WildcardLookup(&genMsg, (File_s *)directory, nameSpace, xlssPacket->XWLM_nameType, - (unicode_t *)msg->sys.data[0].start, /* pattern */ + (unicode_t *)(uintptr_t)msg->sys.data[0].start, /* pattern */ smap, // cnt &retNameUniquifier, - (msg->sys.numDataAreas == 2 ? msg->sys.data[1].start : NULL)); + (msg->sys.numDataAreas == 2 ? + (void *)(uintptr_t)msg->sys.data[1].start : NULL)); if (csaPacket->CWLM_zid == zINVALID_ZID) { @@ -894,7 +913,7 @@ void CSA_SearchMapCleanupMsg( SMapCleanupWork.SMCW_workScheduled = TRUE; FSMLITE_INIT(&SMapCleanupWork.SMCW_fsm, MSGNot("SmapCleanupWork"), 0); WORK_Schedule( &SMapCleanupWork.SMCW_fsm, - CSA_SearchMapCleanupMsgWork, NULL); + (voidfunc_t)CSA_SearchMapCleanupMsgWork, 0); } return; } @@ -939,7 +958,7 @@ void CSA_SearchMapCleanupAll( SMapCleanupWork.SMCW_workScheduled = TRUE; FSMLITE_INIT(&SMapCleanupWork.SMCW_fsm, MSGNot("SmapCleanupWork"), 0); WORK_Schedule( &SMapCleanupWork.SMCW_fsm, - CSA_SearchMapCleanupMsgWork, NULL); + (voidfunc_t)CSA_SearchMapCleanupMsgWork, 0); } PERIODIC_YIELD(); } @@ -1158,7 +1177,8 @@ void CSA_SendVolumeStatsCheck( sizeof(volInfo)) != 0) { COMN_USE_BEAST(&volume->VOLroot); - WORK_Schedule(&csaVolInfo->CVI_fsm, CSA_SendVolumeStats, (ADDR)volume); + WORK_Schedule(&csaVolInfo->CVI_fsm, + (voidfunc_t)CSA_SendVolumeStats, (ADDR)volume); } else {