Internals: using ImToUpper() since std one does too many things.
As a bonus side-effect may remove reliance on ctype.h (will see if CI complains)
diff --git a/imgui.cpp b/imgui.cpp
index c9db7e7..5e19e5a 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -860,7 +860,6 @@
#include "imgui_internal.h"
// System includes
-#include <ctype.h> // toupper
#include <stdio.h> // vsnprintf, sscanf, printf
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
@@ -1613,14 +1612,14 @@
int ImStricmp(const char* str1, const char* str2)
{
int d;
- while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; }
+ while ((d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; }
return d;
}
int ImStrnicmp(const char* str1, const char* str2, size_t count)
{
int d = 0;
- while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
+ while (count > 0 && (d = ImToUpper(*str2) - ImToUpper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
return d;
}
@@ -1687,14 +1686,14 @@
if (!needle_end)
needle_end = needle + strlen(needle);
- const char un0 = (char)toupper(*needle);
+ const char un0 = (char)ImToUpper(*needle);
while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
{
- if (toupper(*haystack) == un0)
+ if (ImToUpper(*haystack) == un0)
{
const char* b = needle + 1;
for (const char* a = haystack + 1; b < needle_end; a++, b++)
- if (toupper(*a) != toupper(*b))
+ if (ImToUpper(*a) != ImToUpper(*b))
break;
if (b == needle_end)
return haystack;
diff --git a/imgui_internal.h b/imgui_internal.h
index 305ce6c..65698bb 100644
--- a/imgui_internal.h
+++ b/imgui_internal.h
@@ -335,6 +335,7 @@
IMGUI_API void ImStrTrimBlanks(char* str);
IMGUI_API const char* ImStrSkipBlank(const char* str);
IM_MSVC_RUNTIME_CHECKS_OFF
+static inline char ImToUpper(char c) { return (c >= 'a' && c <= 'z') ? c &= ~32 : c; }
static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
IM_MSVC_RUNTIME_CHECKS_RESTORE
diff --git a/imgui_widgets.cpp b/imgui_widgets.cpp
index 8ab2b6f..8d0640a 100644
--- a/imgui_widgets.cpp
+++ b/imgui_widgets.cpp
@@ -41,7 +41,6 @@
#include "imgui_internal.h"
// System includes
-#include <ctype.h> // toupper
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h> // intptr_t
#else