From 4fa92d233db090e0839479b3b80e78df1d322e65 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 1 Oct 2024 09:57:05 -0700
Subject: [PATCH] Include stdbool.h when using Visual Studio 2017+
Also cleaned up some incorrect return values from bool functions.
---
include/SDL3/SDL_stdinc.h | 1 +
src/core/windows/SDL_windows.c | 4 ++--
src/filesystem/windows/SDL_sysfsops.c | 7 +++----
src/haptic/SDL_haptic.c | 2 +-
src/haptic/windows/SDL_dinputhaptic.c | 9 +++++----
src/joystick/SDL_joystick.c | 2 +-
src/storage/steam/SDL_steamstorage.c | 2 +-
src/thread/windows/SDL_syscond_cv.c | 4 ++--
src/thread/windows/SDL_sysmutex.c | 2 +-
9 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/include/SDL3/SDL_stdinc.h b/include/SDL3/SDL_stdinc.h
index 36c4ca4d86b4e..63b8d3798e334 100644
--- a/include/SDL3/SDL_stdinc.h
+++ b/include/SDL3/SDL_stdinc.h
@@ -46,6 +46,7 @@
#ifndef __cplusplus
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
+ (defined(_MSC_VER) && (_MSC_VER >= 1910 /* Visual Studio 2017 */)) || \
defined(SDL_INCLUDE_STDBOOL_H)
#include <stdbool.h>
#elif !defined(__bool_true_false_are_defined) && !defined(bool)
diff --git a/src/core/windows/SDL_windows.c b/src/core/windows/SDL_windows.c
index 2bc52204fb868..c8a157c7a01fc 100644
--- a/src/core/windows/SDL_windows.c
+++ b/src/core/windows/SDL_windows.c
@@ -306,12 +306,12 @@ char *WIN_LookupAudioDeviceName(const WCHAR *name, const GUID *guid)
BOOL WIN_IsEqualGUID(const GUID *a, const GUID *b)
{
- return SDL_memcmp(a, b, sizeof(*a)) == 0;
+ return (SDL_memcmp(a, b, sizeof(*a)) == 0);
}
BOOL WIN_IsEqualIID(REFIID a, REFIID b)
{
- return SDL_memcmp(a, b, sizeof(*a)) == 0;
+ return (SDL_memcmp(a, b, sizeof(*a)) == 0);
}
void WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect)
diff --git a/src/filesystem/windows/SDL_sysfsops.c b/src/filesystem/windows/SDL_sysfsops.c
index a8f3759ee60d1..f61f93952101b 100644
--- a/src/filesystem/windows/SDL_sysfsops.c
+++ b/src/filesystem/windows/SDL_sysfsops.c
@@ -45,7 +45,7 @@ bool SDL_SYS_EnumerateDirectory(const char *path, const char *dirname, SDL_Enume
const size_t patternlen = SDL_strlen(path) + 3;
char *pattern = (char *) SDL_malloc(patternlen);
if (!pattern) {
- return -1;
+ return false;
}
// you need a wildcard to enumerate through FindFirstFileEx(), but the wildcard is only checked in the
@@ -56,15 +56,14 @@ bool SDL_SYS_EnumerateDirectory(const char *path, const char *dirname, SDL_Enume
WCHAR *wpattern = WIN_UTF8ToStringW(pattern);
SDL_free(pattern);
if (!wpattern) {
- return -1;
+ return false;
}
WIN32_FIND_DATAW entw;
HANDLE dir = FindFirstFileExW(wpattern, FindExInfoStandard, &entw, FindExSearchNameMatch, NULL, 0);
SDL_free(wpattern);
if (dir == INVALID_HANDLE_VALUE) {
- WIN_SetError("Failed to enumerate directory");
- return -1;
+ return WIN_SetError("Failed to enumerate directory");
}
do {
diff --git a/src/haptic/SDL_haptic.c b/src/haptic/SDL_haptic.c
index 8bc0ae860a452..7ca78cbc77f6f 100644
--- a/src/haptic/SDL_haptic.c
+++ b/src/haptic/SDL_haptic.c
@@ -518,7 +518,7 @@ bool SDL_GetHapticEffectStatus(SDL_Haptic *haptic, int effect)
SDL_ClearError();
- return SDL_SYS_HapticGetEffectStatus(haptic, &haptic->effects[effect]);
+ return (SDL_SYS_HapticGetEffectStatus(haptic, &haptic->effects[effect]) > 0);
}
bool SDL_SetHapticGain(SDL_Haptic *haptic, int gain)
diff --git a/src/haptic/windows/SDL_dinputhaptic.c b/src/haptic/windows/SDL_dinputhaptic.c
index 30c7838e22a79..d22ebff195aea 100644
--- a/src/haptic/windows/SDL_dinputhaptic.c
+++ b/src/haptic/windows/SDL_dinputhaptic.c
@@ -455,7 +455,7 @@ bool SDL_DINPUT_JoystickSameHaptic(SDL_Haptic *haptic, SDL_Joystick *joystick)
return false;
}
- return WIN_IsEqualGUID(&hap_instance.guidInstance, &joy_instance.guidInstance);
+ return (WIN_IsEqualGUID(&hap_instance.guidInstance, &joy_instance.guidInstance) == TRUE);
}
bool SDL_DINPUT_HapticOpenFromJoystick(SDL_Haptic *haptic, SDL_Joystick *joystick)
@@ -1052,13 +1052,14 @@ int SDL_DINPUT_HapticGetEffectStatus(SDL_Haptic *haptic, struct haptic_effect *e
ret = IDirectInputEffect_GetEffectStatus(effect->hweffect->ref, &status);
if (FAILED(ret)) {
- return DI_SetError("Getting effect status", ret);
+ DI_SetError("Getting effect status", ret);
+ return -1;
}
if (status == 0) {
- return false;
+ return 0;
}
- return true;
+ return 1;
}
bool SDL_DINPUT_HapticSetGain(SDL_Haptic *haptic, int gain)
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
index 53afe15610a24..fcc6565ec11ce 100644
--- a/src/joystick/SDL_joystick.c
+++ b/src/joystick/SDL_joystick.c
@@ -1505,7 +1505,7 @@ bool SDL_GetJoystickBall(SDL_Joystick *joystick, int ball, int *dx, int *dy)
SDL_LockJoysticks();
{
- CHECK_JOYSTICK_MAGIC(joystick, -1);
+ CHECK_JOYSTICK_MAGIC(joystick, false);
if (ball < joystick->nballs) {
if (dx) {
diff --git a/src/storage/steam/SDL_steamstorage.c b/src/storage/steam/SDL_steamstorage.c
index ca0188ee73180..743d50f20a3f5 100644
--- a/src/storage/steam/SDL_steamstorage.c
+++ b/src/storage/steam/SDL_steamstorage.c
@@ -95,7 +95,7 @@ static bool STEAM_ReadStorageFile(void *userdata, const char *path, void *destin
static bool STEAM_WriteStorageFile(void *userdata, const char *path, const void *source, Uint64 length)
{
- int result = false;
+ bool result = false;
STEAM_RemoteStorage *steam = (STEAM_RemoteStorage*) userdata;
void *steamremotestorage = steam->SteamAPI_SteamRemoteStorage_v016();
if (steamremotestorage == NULL) {
diff --git a/src/thread/windows/SDL_syscond_cv.c b/src/thread/windows/SDL_syscond_cv.c
index c408bc782313e..ba959c2b58d6a 100644
--- a/src/thread/windows/SDL_syscond_cv.c
+++ b/src/thread/windows/SDL_syscond_cv.c
@@ -119,7 +119,7 @@ static bool SDL_WaitConditionTimeoutNS_cv(SDL_Condition *_cond, SDL_Mutex *_mute
mutex->count = 0;
mutex->owner = 0;
- result = pSleepConditionVariableSRW(&cond->cond, &mutex->srw, timeout, 0);
+ result = (pSleepConditionVariableSRW(&cond->cond, &mutex->srw, timeout, 0) == TRUE);
// The mutex is owned by us again, regardless of status of the wait
SDL_assert(mutex->count == 0 && mutex->owner == 0);
@@ -130,7 +130,7 @@ static bool SDL_WaitConditionTimeoutNS_cv(SDL_Condition *_cond, SDL_Mutex *_mute
SDL_assert(SDL_mutex_impl_active.Type == SDL_MUTEX_CS);
- result = pSleepConditionVariableCS(&cond->cond, &mutex->cs, timeout);
+ result = (pSleepConditionVariableCS(&cond->cond, &mutex->cs, timeout) == TRUE);
}
return result;
diff --git a/src/thread/windows/SDL_sysmutex.c b/src/thread/windows/SDL_sysmutex.c
index da6542507074d..bd82322d225e1 100644
--- a/src/thread/windows/SDL_sysmutex.c
+++ b/src/thread/windows/SDL_sysmutex.c
@@ -157,7 +157,7 @@ static void SDL_LockMutex_cs(SDL_Mutex *mutex_) SDL_NO_THREAD_SAFETY_ANALYSIS /
static bool SDL_TryLockMutex_cs(SDL_Mutex *mutex_)
{
SDL_mutex_cs *mutex = (SDL_mutex_cs *)mutex_;
- return TryEnterCriticalSection(&mutex->cs);
+ return (TryEnterCriticalSection(&mutex->cs) == TRUE);
}
static void SDL_UnlockMutex_cs(SDL_Mutex *mutex_) SDL_NO_THREAD_SAFETY_ANALYSIS // clang doesn't know about NULL mutexes