diff --git a/server/build/libenet.a b/server/build/libenet.a index ac0be3e0..348e3f6f 100644 Binary files a/server/build/libenet.a and b/server/build/libenet.a differ diff --git a/server/build/libinicpp.a b/server/build/libinicpp.a index ed2a6235..b2bf6cf0 100644 Binary files a/server/build/libinicpp.a and b/server/build/libinicpp.a differ diff --git a/server/core/CControllerState.h b/server/core/CControllerState.h index c55a82a3..36670ed7 100644 --- a/server/core/CControllerState.h +++ b/server/core/CControllerState.h @@ -1,3 +1,5 @@ +#include + #pragma once #ifndef _CCONTROLLERSTATE_H_ diff --git a/server/core/CNetwork.h b/server/core/CNetwork.h index edd5b400..fa4c81b4 100644 --- a/server/core/CNetwork.h +++ b/server/core/CNetwork.h @@ -33,4 +33,6 @@ class CNetwork }; +char* strncpy_linux(char* dest, unsigned long destSize, const char* src, unsigned long srcSize); + #endif \ No newline at end of file diff --git a/server/core/CPedManager.h b/server/core/CPedManager.h index 4b9414fd..269709e4 100644 --- a/server/core/CPedManager.h +++ b/server/core/CPedManager.h @@ -68,7 +68,7 @@ class CPedPackets for (int i = 0; i < 52; i++) { - if (_strnicmp(packet->specialModelName, CPedManager::ms_aszAllowedSpecialActors[i], strlen(CPedManager::ms_aszAllowedSpecialActors[i]))) + if (strncasecmp(packet->specialModelName, CPedManager::ms_aszAllowedSpecialActors[i], strlen(CPedManager::ms_aszAllowedSpecialActors[i]))) { isSpecialModelValid = true; break; @@ -83,8 +83,7 @@ class CPedPackets CNetwork::SendPacketToAll(CPacketsID::PED_SPAWN, packet, sizeof * packet, ENET_PACKET_FLAG_RELIABLE, peer); CPed* ped = new CPed(packet->pedid, player, packet->modelId, packet->pedType, packet->pos, packet->createdBy); - strncpy_s(ped->m_szSpecialModelName, packet->specialModelName, 7); - CPedManager::Add(ped); + strncpy_linux(ped->m_szSpecialModelName, sizeof(ped->m_szSpecialModelName), packet->specialModelName, 7); CPedManager::Add(ped); // send it back to the syncer of the ped so that he knows the id CPedPackets::PedConfirm pedConfirmPacket{}; diff --git a/server/src/CNetwork.cpp b/server/src/CNetwork.cpp index 4f257a44..13889b64 100644 --- a/server/src/CNetwork.cpp +++ b/server/src/CNetwork.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "../core/CPacketListener.h" #include "../core/CPacket.h" @@ -13,7 +14,7 @@ #include "../core/CVehicleManager.h" #include "../core/CPedManager.h" -#include "../shared/semver.h" +#include "../../shared/semver.h" std::unordered_map CNetwork::m_packetListeners; @@ -319,8 +320,7 @@ void CNetwork::HandlePlayerConnected(ENetEvent& event) packet.pos = i->m_vecPos; packet.pedType = i->m_nPedType; packet.createdBy = i->m_nCreatedBy; - strncpy_s(packet.specialModelName, i->m_szSpecialModelName, strlen(i->m_szSpecialModelName)); - CNetwork::SendPacket(event.peer, CPacketsID::PED_SPAWN, &packet, sizeof packet, ENET_PACKET_FLAG_RELIABLE); + strncpy_linux(packet.specialModelName, sizeof(packet.specialModelName), i->m_szSpecialModelName, strlen(i->m_szSpecialModelName)); CNetwork::SendPacket(event.peer, CPacketsID::PED_SPAWN, &packet, sizeof packet, ENET_PACKET_FLAG_RELIABLE); } if (CPlayerPackets::EnExSync::ms_pLastPlayerOwner) @@ -407,4 +407,16 @@ void CNetwork::AddListener(unsigned short id, void(*callback)(ENetPeer*, void*, { CPacketListener* listener = new CPacketListener(id, callback); m_packetListeners.insert({ id, listener }); -} \ No newline at end of file +} + +char* strncpy_linux(char* dest, size_t destsz, const char* src, size_t count) { + if (dest == nullptr || src == nullptr || destsz == 0) { + // Handle error conditions as needed (e.g., return nullptr, throw exception) + return nullptr; // Or throw an exception. + } + + size_t copy_len = std::min(count, destsz - 1); // Ensure we don't write past the buffer + std::memcpy(dest, src, copy_len); + dest[copy_len] = '\0'; // Null-terminate the destination string + return dest; +}