diff --git a/src/Core.h b/src/Core.h index ec2968efa..8ff8b3e73 100644 --- a/src/Core.h +++ b/src/Core.h @@ -117,22 +117,26 @@ typedef cc_uint8 cc_bool; #endif #endif -#define CC_WIN_BACKEND_TERMINAL 0x01 -#define CC_WIN_BACKEND_SDL2 0x11 -#define CC_WIN_BACKEND_SDL3 0x12 -#define CC_WIN_BACKEND_X11 0x21 -#define CC_WIN_BACKEND_WIN32 0x31 -#define CC_WIN_BACKEND_COCOA 0x41 -#define CC_WIN_BACKEND_BEOS 0x51 -#define CC_WIN_BACKEND_ANDROID 0x61 +/* Lowest 4 bits are for backends in same group */ +/* Rest of the bits indicate the unique group type */ -#define CC_GFX_BACKEND_SOFTGPU 0x01 -#define CC_GFX_BACKEND_GL_MASK 0x10 -#define CC_GFX_BACKEND_GL1 0x11 -#define CC_GFX_BACKEND_GL2 0x12 -#define CC_GFX_BACKEND_D3D9 0x21 -#define CC_GFX_BACKEND_D3D11 0x31 -#define CC_GFX_BACKEND_VULKAN 0x41 +#define CC_WIN_BACKEND_TERMINAL 0x0001 +#define CC_WIN_BACKEND_SDL_MASK 0x0010 +#define CC_WIN_BACKEND_SDL2 0x0011 +#define CC_WIN_BACKEND_SDL3 0x0012 +#define CC_WIN_BACKEND_X11 0x0021 +#define CC_WIN_BACKEND_WIN32 0x0041 +#define CC_WIN_BACKEND_COCOA 0x0081 +#define CC_WIN_BACKEND_BEOS 0x0101 +#define CC_WIN_BACKEND_ANDROID 0x0201 + +#define CC_GFX_BACKEND_SOFTGPU 0x0001 +#define CC_GFX_BACKEND_GL_MASK 0x0010 +#define CC_GFX_BACKEND_GL1 0x0011 +#define CC_GFX_BACKEND_GL2 0x0012 +#define CC_GFX_BACKEND_D3D9 0x0021 +#define CC_GFX_BACKEND_D3D11 0x0041 +#define CC_GFX_BACKEND_VULKAN 0x0081 #define CC_BUILD_NETWORKING #define CC_BUILD_FREETYPE diff --git a/src/Platform_3DS.c b/src/Platform_3DS.c index eed2e6b43..09c27d6ec 100644 --- a/src/Platform_3DS.c +++ b/src/Platform_3DS.c @@ -311,8 +311,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a if (!cur->ai_addrlen) break; // TODO citra returns empty addresses past first one? does that happen on real hardware too? - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); } freeaddrinfo(result); diff --git a/src/Platform_Dreamcast.c b/src/Platform_Dreamcast.c index 0be9731ac..b2332a680 100644 --- a/src/Platform_Dreamcast.c +++ b/src/Platform_Dreamcast.c @@ -368,8 +368,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++) { - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); } freeaddrinfo(result); diff --git a/src/Platform_PS2.c b/src/Platform_PS2.c index 100271afd..6ac07c596 100644 --- a/src/Platform_PS2.c +++ b/src/Platform_PS2.c @@ -474,8 +474,7 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++) { - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); } freeaddrinfo(result); diff --git a/src/Platform_Posix.c b/src/Platform_Posix.c index e91e85588..bef209141 100644 --- a/src/Platform_Posix.c +++ b/src/Platform_Posix.c @@ -595,15 +595,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family != AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family == AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } freeaddrinfo(result); diff --git a/src/Platform_Switch.c b/src/Platform_Switch.c index 855ce7e55..ebe1cc3e1 100644 --- a/src/Platform_Switch.c +++ b/src/Platform_Switch.c @@ -384,15 +384,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family != AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family == AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } freeaddrinfo(result); diff --git a/src/Platform_WiiU.c b/src/Platform_WiiU.c index d11a7dae2..34b753ce2 100644 --- a/src/Platform_WiiU.c +++ b/src/Platform_WiiU.c @@ -331,15 +331,13 @@ static cc_result ParseHost(const char* host, int port, cc_sockaddr* addrs, int* for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family != AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family == AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } freeaddrinfo(result); diff --git a/src/Platform_Windows.c b/src/Platform_Windows.c index b947e501b..fe645f268 100644 --- a/src/Platform_Windows.c +++ b/src/Platform_Windows.c @@ -556,15 +556,13 @@ static cc_result ParseHostNew(char* host, int port, cc_sockaddr* addrs, int* num for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family != AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next) { if (cur->ai_family == AF_INET) continue; - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; i++; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); i++; } _freeaddrinfo(result); diff --git a/src/Platform_Xbox.c b/src/Platform_Xbox.c index 9b84b5548..77851e322 100644 --- a/src/Platform_Xbox.c +++ b/src/Platform_Xbox.c @@ -336,8 +336,7 @@ cc_result Socket_ParseAddress(const cc_string* address, int port, cc_sockaddr* a for (cur = result; cur && i < SOCKET_MAX_ADDRS; cur = cur->ai_next, i++) { - Mem_Copy(addrs[i].data, cur->ai_addr, cur->ai_addrlen); - addrs[i].size = cur->ai_addrlen; + SocketAddr_Set(&addrs[i], cur->ai_addr, cur->ai_addrlen); } lwip_freeaddrinfo(result); diff --git a/src/Queue.c b/src/Queue.c index 3c3b9cb5b..a363faf52 100644 --- a/src/Queue.c +++ b/src/Queue.c @@ -13,14 +13,16 @@ void Queue_Init(struct Queue* queue, cc_uint32 structSize) { queue->head = 0; queue->tail = 0; } + void Queue_Clear(struct Queue* queue) { if (!queue->entries) return; Mem_Free(queue->entries); Queue_Init(queue, queue->structSize); } + static void Queue_Resize(struct Queue* queue) { cc_uint8* entries; - int idx, capacity, headToEndSize, byteOffsetToHead; + int capacity, headToEndSize, byteOffsetToHead; if (queue->capacity >= (Int32_MaxValue / 4)) { Chat_AddRaw("&cToo many generic queue entries, clearing"); @@ -49,6 +51,7 @@ static void Queue_Resize(struct Queue* queue) { queue->head = 0; queue->tail = queue->count; } + /* Appends an entry to the end of the queue, resizing if necessary. */ void Queue_Enqueue(struct Queue* queue, void* item) { if (queue->count == queue->capacity) @@ -59,6 +62,7 @@ void Queue_Enqueue(struct Queue* queue, void* item) { queue->tail = (queue->tail + 1) & queue->mask; queue->count++; } + /* Retrieves the entry from the front of the queue. */ void* Queue_Dequeue(struct Queue* queue) { void* result = queue->entries + queue->head * queue->structSize; diff --git a/src/_PlatformBase.h b/src/_PlatformBase.h index d2b9e0b0a..da1939b2b 100644 --- a/src/_PlatformBase.h +++ b/src/_PlatformBase.h @@ -90,6 +90,13 @@ int Stopwatch_ElapsedMS(cc_uint64 beg, cc_uint64 end) { return (int)raw / 1000; } +static CC_INLINE void SocketAddr_Set(cc_sockaddr* addr, const void* src, unsigned srcLen) { + if (srcLen > CC_SOCKETADDR_MAXSIZE) Logger_Abort("Attempted to copy too large socket"); + + Mem_Copy(addr->data, src, srcLen); + addr->size = srcLen; +} + cc_result Socket_WriteAll(cc_socket socket, const cc_uint8* data, cc_uint32 count) { cc_uint32 sent; cc_result res;