SDL: Prefer SDL_zero()/SDL_zerop()

From 83fb7b6636d9ebfc45152abadefd4fc1fc42cffc Mon Sep 17 00:00:00 2001
From: Eddy Jansson <[EMAIL REDACTED]>
Date: Fri, 23 Jan 2026 19:42:06 +0100
Subject: [PATCH] Prefer SDL_zero()/SDL_zerop()

Replace uses of 'SDL_memset(E, 0, sizeof(E))' and similar
with the SDL_zero()/SDL_zerop() macros.
---
 src/SDL_guid.c                                 |  2 +-
 src/core/linux/SDL_ibus.c                      |  2 +-
 src/gpu/vulkan/SDL_gpu_vulkan.c                |  6 +++---
 src/haptic/darwin/SDL_syshaptic.c              |  2 +-
 src/haptic/hidapi/SDL_hidapihaptic_lg4ff.c     |  6 +++---
 src/haptic/windows/SDL_dinputhaptic.c          |  2 +-
 src/joystick/hidapi/SDL_hidapi_gip.c           |  2 +-
 src/joystick/hidapi/SDL_hidapi_switch.c        |  2 +-
 src/render/vitagxm/SDL_render_vita_gxm.c       |  2 +-
 src/render/vitagxm/SDL_render_vita_gxm_tools.c | 10 +++++-----
 src/render/vulkan/SDL_render_vulkan.c          |  4 ++--
 src/video/vita/SDL_vitaframebuffer.c           |  2 +-
 src/video/vita/SDL_vitavideo.c                 |  4 ++--
 src/video/wayland/SDL_waylanddatamanager.c     |  2 +-
 src/video/wayland/SDL_waylandevents.c          |  2 +-
 src/video/x11/SDL_x11events.c                  |  8 ++++----
 src/video/x11/SDL_x11window.c                  |  2 +-
 17 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/src/SDL_guid.c b/src/SDL_guid.c
index dd5bc43408daf..913206a560558 100644
--- a/src/SDL_guid.c
+++ b/src/SDL_guid.c
@@ -77,7 +77,7 @@ SDL_GUID SDL_StringToGUID(const char *pchGUID)
     // Make sure it's even
     len = (len) & ~0x1;
 
-    SDL_memset(&guid, 0x00, sizeof(guid));
+    SDL_zero(guid);
 
     p = (Uint8 *)&guid;
     for (i = 0; (i < len) && ((p - (Uint8 *)&guid) < maxoutputbytes); i += 2, p++) {
diff --git a/src/core/linux/SDL_ibus.c b/src/core/linux/SDL_ibus.c
index e018d1042777e..9e5e1e7fd53c6 100644
--- a/src/core/linux/SDL_ibus.c
+++ b/src/core/linux/SDL_ibus.c
@@ -637,7 +637,7 @@ void SDL_IBus_Quit(void)
 
     SDL_RemoveHintCallback(SDL_HINT_IME_IMPLEMENTED_UI, IBus_SetCapabilities, NULL);
 
-    SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect));
+    SDL_zero(ibus_cursor_rect);
 }
 
 static void IBus_SimpleMessage(const char *method)
diff --git a/src/gpu/vulkan/SDL_gpu_vulkan.c b/src/gpu/vulkan/SDL_gpu_vulkan.c
index c395a87755323..e87b5eec9b198 100644
--- a/src/gpu/vulkan/SDL_gpu_vulkan.c
+++ b/src/gpu/vulkan/SDL_gpu_vulkan.c
@@ -11653,9 +11653,9 @@ static void VULKAN_INTERNAL_AddOptInVulkanOptions(SDL_PropertiesID props, Vulkan
             features->usesCustomVulkanOptions = true;
             features->desiredApiVersion = options->vulkan_api_version;
 
-            SDL_memset(&features->desiredVulkan11DeviceFeatures, 0, sizeof(VkPhysicalDeviceVulkan11Features));
-            SDL_memset(&features->desiredVulkan12DeviceFeatures, 0, sizeof(VkPhysicalDeviceVulkan12Features));
-            SDL_memset(&features->desiredVulkan13DeviceFeatures, 0, sizeof(VkPhysicalDeviceVulkan13Features));
+            SDL_zero(features->desiredVulkan11DeviceFeatures);
+            SDL_zero(features->desiredVulkan12DeviceFeatures);
+            SDL_zero(features->desiredVulkan13DeviceFeatures);
             features->desiredVulkan11DeviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
             features->desiredVulkan12DeviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
             features->desiredVulkan13DeviceFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
diff --git a/src/haptic/darwin/SDL_syshaptic.c b/src/haptic/darwin/SDL_syshaptic.c
index 21bcea04ed0ec..7f96f7b81ed12 100644
--- a/src/haptic/darwin/SDL_syshaptic.c
+++ b/src/haptic/darwin/SDL_syshaptic.c
@@ -1166,7 +1166,7 @@ bool SDL_SYS_HapticUpdateEffect(SDL_Haptic *haptic,
     FFEFFECT temp;
 
     // Get the effect.
-    SDL_memset(&temp, 0, sizeof(FFEFFECT));
+    SDL_zero(temp);
     if (!SDL_SYS_ToFFEFFECT(haptic, &temp, data)) {
         goto err_update;
     }
diff --git a/src/haptic/hidapi/SDL_hidapihaptic_lg4ff.c b/src/haptic/hidapi/SDL_hidapihaptic_lg4ff.c
index 5cc538656a771..cfe10dda9c979 100644
--- a/src/haptic/hidapi/SDL_hidapihaptic_lg4ff.c
+++ b/src/haptic/hidapi/SDL_hidapihaptic_lg4ff.c
@@ -694,9 +694,9 @@ static int lg4ff_init_slots(struct lg4ff_device *device)
         return -1;
     }
 
-    SDL_memset(&device->states, 0, sizeof(device->states));
-    SDL_memset(&device->slots, 0, sizeof(device->slots));
-    SDL_memset(&parameters, 0, sizeof(parameters));
+    SDL_zero(device->states);
+    SDL_zero(device->slots);
+    SDL_zero(parameters);
 
     device->slots[0].effect_type = SDL_HAPTIC_CONSTANT;
     device->slots[1].effect_type = SDL_HAPTIC_SPRING;
diff --git a/src/haptic/windows/SDL_dinputhaptic.c b/src/haptic/windows/SDL_dinputhaptic.c
index ed9345b9578e6..d60f31ccb186e 100644
--- a/src/haptic/windows/SDL_dinputhaptic.c
+++ b/src/haptic/windows/SDL_dinputhaptic.c
@@ -1050,7 +1050,7 @@ bool SDL_DINPUT_HapticUpdateEffect(SDL_Haptic *haptic, struct haptic_effect *eff
     DIEFFECT temp;
 
     // Get the effect.
-    SDL_memset(&temp, 0, sizeof(DIEFFECT));
+    SDL_zero(temp);
     if (!SDL_SYS_ToDIEFFECT(haptic, &temp, data)) {
         goto err_update;
     }
diff --git a/src/joystick/hidapi/SDL_hidapi_gip.c b/src/joystick/hidapi/SDL_hidapi_gip.c
index e8a4d0a003c4e..f1536d60d6ad3 100644
--- a/src/joystick/hidapi/SDL_hidapi_gip.c
+++ b/src/joystick/hidapi/SDL_hidapi_gip.c
@@ -809,7 +809,7 @@ static void GIP_MetadataFree(GIP_Metadata *metadata)
     SDL_free(metadata->device.hid_descriptor);
 
     SDL_free(metadata->message_metadata);
-    SDL_memset(metadata, 0, sizeof(*metadata));
+    SDL_zerop(metadata);
 }
 
 static bool GIP_ParseDeviceMetadata(GIP_Metadata *metadata, const Uint8 *bytes, int num_bytes, int *offset)
diff --git a/src/joystick/hidapi/SDL_hidapi_switch.c b/src/joystick/hidapi/SDL_hidapi_switch.c
index a444ca7c3fb67..69e74a852ccfb 100644
--- a/src/joystick/hidapi/SDL_hidapi_switch.c
+++ b/src/joystick/hidapi/SDL_hidapi_switch.c
@@ -450,7 +450,7 @@ static bool ReadProprietaryReply(SDL_DriverSwitch_Context *ctx, ESwitchProprieta
 
 static void ConstructSubcommand(SDL_DriverSwitch_Context *ctx, ESwitchSubcommandIDs ucCommandID, const Uint8 *pBuf, Uint8 ucLen, SwitchSubcommandOutputPacket_t *outPacket)
 {
-    SDL_memset(outPacket, 0, sizeof(*outPacket));
+    SDL_zerop(outPacket);
 
     outPacket->commonData.ucPacketType = k_eSwitchOutputReportIDs_RumbleAndSubcommand;
     outPacket->commonData.ucPacketNumber = ctx->m_nCommandNumber;
diff --git a/src/render/vitagxm/SDL_render_vita_gxm.c b/src/render/vitagxm/SDL_render_vita_gxm.c
index 2a590607ec2ef..7c4f2ebc8f95b 100644
--- a/src/render/vitagxm/SDL_render_vita_gxm.c
+++ b/src/render/vitagxm/SDL_render_vita_gxm.c
@@ -1140,7 +1140,7 @@ static bool VITA_GXM_RenderPresent(SDL_Renderer *renderer)
 
     data->displayData.address = data->displayBufferData[data->backBufferIndex];
 
-    SDL_memset(&updateParam, 0, sizeof(updateParam));
+    SDL_zero(updateParam);
 
     updateParam.renderTarget.colorFormat = VITA_GXM_COLOR_FORMAT;
     updateParam.renderTarget.surfaceType = SCE_GXM_COLOR_SURFACE_LINEAR;
diff --git a/src/render/vitagxm/SDL_render_vita_gxm_tools.c b/src/render/vitagxm/SDL_render_vita_gxm_tools.c
index 791b263bd5263..aaa0eb04256b1 100644
--- a/src/render/vitagxm/SDL_render_vita_gxm_tools.c
+++ b/src/render/vitagxm/SDL_render_vita_gxm_tools.c
@@ -138,7 +138,7 @@ static void display_callback(const void *callback_data)
     SceDisplayFrameBuf framebuf;
     const VITA_GXM_DisplayData *display_data = (const VITA_GXM_DisplayData *)callback_data;
 
-    SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf));
+    SDL_zero(framebuf);
     framebuf.size = sizeof(SceDisplayFrameBuf);
     framebuf.base = display_data->address;
     framebuf.pitch = VITA_GXM_SCREEN_STRIDE;
@@ -377,7 +377,7 @@ int gxm_init(SDL_Renderer *renderer)
     VITA_GXM_RenderData *data = (VITA_GXM_RenderData *)renderer->internal;
 
     SceGxmInitializeParams initializeParams;
-    SDL_memset(&initializeParams, 0, sizeof(SceGxmInitializeParams));
+    SDL_zero(initializeParams);
     initializeParams.flags = 0;
     initializeParams.displayQueueMaxPendingCount = VITA_GXM_PENDING_SWAPS;
     initializeParams.displayQueueCallback = display_callback;
@@ -438,7 +438,7 @@ int gxm_init(SDL_Renderer *renderer)
     }
 
     // set up parameters
-    SDL_memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams));
+    SDL_zero(renderTargetParams);
     renderTargetParams.flags = 0;
     renderTargetParams.width = VITA_GXM_SCREEN_WIDTH;
     renderTargetParams.height = VITA_GXM_SCREEN_HEIGHT;
@@ -555,7 +555,7 @@ int gxm_init(SDL_Renderer *renderer)
         &patcherFragmentUsseOffset);
 
     // create a shader patcher
-    SDL_memset(&patcherParams, 0, sizeof(SceGxmShaderPatcherParams));
+    SDL_zero(patcherParams);
     patcherParams.userData = NULL;
     patcherParams.hostAllocCallback = &patcher_host_alloc;
     patcherParams.hostFreeCallback = &patcher_host_free;
@@ -1097,7 +1097,7 @@ gxm_texture *create_gxm_texture(VITA_GXM_RenderData *data, unsigned int w, unsig
 
             // set up parameters
             SceGxmRenderTargetParams renderTargetParams;
-            SDL_memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams));
+            SDL_zero(renderTargetParams);
             renderTargetParams.flags = 0;
             renderTargetParams.width = w;
             renderTargetParams.height = h;
diff --git a/src/render/vulkan/SDL_render_vulkan.c b/src/render/vulkan/SDL_render_vulkan.c
index c20eecd8e651c..4f04c8467b6f0 100644
--- a/src/render/vulkan/SDL_render_vulkan.c
+++ b/src/render/vulkan/SDL_render_vulkan.c
@@ -1231,7 +1231,7 @@ static VULKAN_PipelineState *VULKAN_CreatePipelineState(SDL_Renderer *renderer,
     // Shaders
     const char *name = "main";
     for (uint32_t i = 0; i < 2; i++) {
-        SDL_memset(&shaderStageCreateInfo[i], 0, sizeof(shaderStageCreateInfo[i]));
+        SDL_zero(shaderStageCreateInfo[i]);
         shaderStageCreateInfo[i].sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
         shaderStageCreateInfo[i].module = (i == 0) ? rendererData->vertexShaderModules[shader] : rendererData->fragmentShaderModules[shader];
         shaderStageCreateInfo[i].stage = (i == 0) ? VK_SHADER_STAGE_VERTEX_BIT : VK_SHADER_STAGE_FRAGMENT_BIT;
@@ -4034,7 +4034,7 @@ static bool VULKAN_RunCommandQueue(SDL_Renderer *renderer, SDL_RenderCommand *cm
     VULKAN_RenderData *rendererData = (VULKAN_RenderData *)renderer->internal;
     VkSurfaceTransformFlagBitsKHR currentRotation = VULKAN_GetRotationForCurrentRenderTarget(rendererData);
     VULKAN_DrawStateCache stateCache;
-    SDL_memset(&stateCache, 0, sizeof(stateCache));
+    SDL_zero(stateCache);
 
     if (!rendererData->device) {
         return SDL_SetError("Device lost and couldn't be recovered");
diff --git a/src/video/vita/SDL_vitaframebuffer.c b/src/video/vita/SDL_vitaframebuffer.c
index 6c5b009dd81c5..c7c647e1ef280 100644
--- a/src/video/vita/SDL_vitaframebuffer.c
+++ b/src/video/vita/SDL_vitaframebuffer.c
@@ -79,7 +79,7 @@ bool VITA_CreateWindowFramebuffer(SDL_VideoDevice *_this, SDL_Window *window, SD
     // SDL_memset the buffer to black
     SDL_memset(data->buffer, 0x0, SCREEN_W * SCREEN_H * 4);
 
-    SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf));
+    SDL_zero(framebuf);
     framebuf.size = sizeof(SceDisplayFrameBuf);
     framebuf.base = data->buffer;
     framebuf.pitch = SCREEN_W;
diff --git a/src/video/vita/SDL_vitavideo.c b/src/video/vita/SDL_vitavideo.c
index c0cf866895274..4efaaed6c1e07 100644
--- a/src/video/vita/SDL_vitavideo.c
+++ b/src/video/vita/SDL_vitavideo.c
@@ -387,7 +387,7 @@ void VITA_ImeEventHandler(void *arg, const SceImeEventData *e)
             } else {
                 SDL_SendKeyboardText((const char *)utf8_buffer);
             }
-            SDL_memset(&caret_rev, 0, sizeof(SceImeCaret));
+            SDL_zero(caret_rev);
             SDL_memset(libime_out, 0, ((SCE_IME_MAX_PREEDIT_LENGTH + SCE_IME_MAX_TEXT_LENGTH + 1) * sizeof(SceWChar16)));
             caret_rev.index = 1;
             sceImeSetCaret(&caret_rev);
@@ -553,7 +553,7 @@ void VITA_PumpEvents(SDL_VideoDevice *_this)
             uint8_t utf8_buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
 
             SceImeDialogResult result;
-            SDL_memset(&result, 0, sizeof(SceImeDialogResult));
+            SDL_zero(result);
             sceImeDialogGetResult(&result);
 
             // Convert UTF16 to UTF8
diff --git a/src/video/wayland/SDL_waylanddatamanager.c b/src/video/wayland/SDL_waylanddatamanager.c
index 63b6b359d3a99..e4a040a817262 100644
--- a/src/video/wayland/SDL_waylanddatamanager.c
+++ b/src/video/wayland/SDL_waylanddatamanager.c
@@ -64,7 +64,7 @@ static int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct times
             if (sigismember(set, signo) && sigismember(&pending, signo)) {
                 if (!sigwait(set, &signo)) {
                     if (info) {
-                        SDL_memset(info, 0, sizeof *info);
+                        SDL_zerop(info);
                         info->si_signo = signo;
                     }
                     return signo;
diff --git a/src/video/wayland/SDL_waylandevents.c b/src/video/wayland/SDL_waylandevents.c
index 436266ea4fd35..f9908b3b8bca0 100644
--- a/src/video/wayland/SDL_waylandevents.c
+++ b/src/video/wayland/SDL_waylandevents.c
@@ -2522,7 +2522,7 @@ static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, enum w
 
     if ((capabilities & WL_SEAT_CAPABILITY_POINTER) && !seat->pointer.wl_pointer) {
         seat->pointer.wl_pointer = wl_seat_get_pointer(wl_seat);
-        SDL_memset(&seat->pointer.pending_frame.axis, 0, sizeof(seat->pointer.pending_frame.axis));
+        SDL_zero(seat->pointer.pending_frame.axis);
 
         Wayland_SeatCreateCursorShape(seat);
 
diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c
index cea241edde760..7b0f1f5e6a583 100644
--- a/src/video/x11/SDL_x11events.c
+++ b/src/video/x11/SDL_x11events.c
@@ -1731,7 +1731,7 @@ static void X11_DispatchEvent(SDL_VideoDevice *_this, XEvent *xevent)
             }
 
             // reply with status
-            SDL_memset(&m, 0, sizeof(XClientMessageEvent));
+            SDL_zero(m);
             m.type = ClientMessage;
             m.display = xevent->xclient.display;
             m.window = xevent->xclient.data.l[0];
@@ -1748,7 +1748,7 @@ static void X11_DispatchEvent(SDL_VideoDevice *_this, XEvent *xevent)
         } else if (xevent->xclient.message_type == videodata->atoms.XdndDrop) {
             if (data->xdnd_req == None) {
                 // say again - not interested!
-                SDL_memset(&m, 0, sizeof(XClientMessageEvent));
+                SDL_zero(m);
                 m.type = ClientMessage;
                 m.display = xevent->xclient.display;
                 m.window = xevent->xclient.data.l[0];
@@ -2175,7 +2175,7 @@ static void X11_DispatchEvent(SDL_VideoDevice *_this, XEvent *xevent)
             X11_XFree(p.data);
 
             // send reply
-            SDL_memset(&m, 0, sizeof(XClientMessageEvent));
+            SDL_zero(m);
             m.type = ClientMessage;
             m.display = display;
             m.window = data->xdnd_source;
@@ -2243,7 +2243,7 @@ void X11_SendWakeupEvent(SDL_VideoDevice *_this, SDL_Window *window)
     Window xwindow = window->internal->xwindow;
     XClientMessageEvent event;
 
-    SDL_memset(&event, 0, sizeof(XClientMessageEvent));
+    SDL_zero(event);
     event.type = ClientMessage;
     event.display = req_display;
     event.send_event = True;
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index ed9026280cbd5..4a68287cc289c 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -354,7 +354,7 @@ SDL_WindowFlags X11_GetNetWMState(SDL_VideoDevice *_this, SDL_Window *window, Wi
          */
         {
             XWindowAttributes attr;
-            SDL_memset(&attr, 0, sizeof(attr));
+            SDL_zero(attr);
             X11_XGetWindowAttributes(videodata->display, xwindow, &attr);
             if (attr.map_state == IsUnmapped) {
                 flags |= SDL_WINDOW_HIDDEN;