fix type conversion safety and consistency issues across all sglog formatters

This commit is contained in:
Mamadou Babaei
2025-06-04 02:23:58 +02:00
parent 2981ab4670
commit 4db754109a
2 changed files with 70 additions and 92 deletions
+2
View File
@@ -21,6 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Fixed
- Resolved GNU/Linux build issues for Unreal Engine `5.5` and `5.6` caused by incorrect linkage to GNU/GCC's `libstdc++` instead of LLVM/Clang's `libc++`.
- Fix `SGLog` build issues on GNU/Linux with UE `5.6`.
- Fix type conversion safety and consistency issues across all `SGLog` formatters.
### Removed
+67 -91
View File
@@ -96,7 +96,7 @@ struct TFSGLogString<const bool>
{
static void Format(const bool Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), (Value ? TEXT("True") : TEXT("False")));
OutString = Value ? TEXT("True") : TEXT("False");
}
};
@@ -105,7 +105,7 @@ struct TFSGLogString<bool>
{
static void Format(const bool Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), (Value ? TEXT("True") : TEXT("False")));
OutString = Value ? TEXT("True") : TEXT("False");
}
};
@@ -114,7 +114,7 @@ struct TFSGLogString<const char[L]>
{
static void Format(const char* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(UTF8_TO_TCHAR(Value));
}
};
@@ -123,7 +123,7 @@ struct TFSGLogString<char[L]>
{
static void Format(const char* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(UTF8_TO_TCHAR(Value));
}
};
@@ -132,7 +132,7 @@ struct TFSGLogString<const char*>
{
static void Format(const char* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(UTF8_TO_TCHAR(Value));
}
};
@@ -141,61 +141,52 @@ struct TFSGLogString<char*>
{
static void Format(const char* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(UTF8_TO_TCHAR(Value));
}
};
#if ! PLATFORM_ANDROID && PLATFORM_LINUX
template< std::size_t L>
template<std::size_t L>
struct TFSGLogString<const char16_t[L]>
{
static void Format(const char16_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
template< std::size_t L>
template<std::size_t L>
struct TFSGLogString<char16_t[L]>
{
static void Format(const char16_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
template <>
template<>
struct TFSGLogString<const char16_t*>
{
static void Format(const char16_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
template <>
template<>
struct TFSGLogString<char16_t*>
{
static void Format(const char16_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
#endif /* ! PLATFORM_ANDROID && PLATFORM_LINUX */
template<>
struct TFSGLogString<const double>
{
static void Format(const double Value, FString& OutString)
{
char Buffer[100];
std::snprintf(Buffer, sizeof(Buffer), "%f", Value);
std::string String(Buffer);
OutString = FString(StringCast<WIDECHAR>(String.c_str()).Get());
OutString = LexToString(Value);
}
};
@@ -204,12 +195,7 @@ struct TFSGLogString<double>
{
static void Format(const double Value, FString& OutString)
{
char Buffer[100];
std::snprintf(Buffer, sizeof(Buffer), "%f", Value);
std::string String(Buffer);
OutString = FString(StringCast<WIDECHAR>(String.c_str()).Get());
OutString = LexToString(Value);
}
};
@@ -218,7 +204,7 @@ struct TFSGLogString<const float>
{
static void Format(const float Value, FString& OutString)
{
OutString = FString::SanitizeFloat(StaticCast<double>(Value), 1);
OutString = LexToString(Value);
}
};
@@ -227,7 +213,7 @@ struct TFSGLogString<float>
{
static void Format(const float Value, FString& OutString)
{
OutString = FString::SanitizeFloat(StaticCast<double>(Value), 1);
OutString = LexToString(Value);
}
};
@@ -236,7 +222,7 @@ struct TFSGLogString<const FName>
{
static void Format(const FName& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -245,7 +231,7 @@ struct TFSGLogString<FName>
{
static void Format(const FName& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -254,7 +240,7 @@ struct TFSGLogString<const FQuat>
{
static void Format(const FQuat& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -263,7 +249,7 @@ struct TFSGLogString<FQuat>
{
static void Format(const FQuat& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -272,7 +258,7 @@ struct TFSGLogString<const FRotator>
{
static void Format(const FRotator& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -281,7 +267,7 @@ struct TFSGLogString<FRotator>
{
static void Format(const FRotator& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -308,7 +294,7 @@ struct TFSGLogString<const FTransform>
{
static void Format(const FTransform& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -317,7 +303,7 @@ struct TFSGLogString<FTransform>
{
static void Format(const FTransform& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -326,7 +312,7 @@ struct TFSGLogString<const FVector>
{
static void Format(const FVector& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -335,7 +321,7 @@ struct TFSGLogString<FVector>
{
static void Format(const FVector& Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%s"), Value.ToString().GetCharArray().GetData());
OutString = Value.ToString();
}
};
@@ -344,7 +330,7 @@ struct TFSGLogString<const int8>
{
static void Format(const int8 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -353,7 +339,7 @@ struct TFSGLogString<int8>
{
static void Format(const int8 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -362,7 +348,7 @@ struct TFSGLogString<const int16>
{
static void Format(const int16 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -371,7 +357,7 @@ struct TFSGLogString<int16>
{
static void Format(const int16 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -380,7 +366,7 @@ struct TFSGLogString<const int32>
{
static void Format(const int32 Value, FString& OutString)
{
OutString = FString::FromInt(Value);
OutString = LexToString(Value);
}
};
@@ -389,7 +375,7 @@ struct TFSGLogString<int32>
{
static void Format(const int32 Value, FString& OutString)
{
OutString = FString::FromInt(Value);
OutString = LexToString(Value);
}
};
@@ -398,7 +384,7 @@ struct TFSGLogString<const int64>
{
static void Format(const int64 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -407,7 +393,7 @@ struct TFSGLogString<int64>
{
static void Format(const int64 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -416,12 +402,9 @@ struct TFSGLogString<const long double>
{
static void Format(const long double Value, FString& OutString)
{
char Buffer[100];
char Buffer[128];
std::snprintf(Buffer, sizeof(Buffer), "%Lf", Value);
std::string String(Buffer);
OutString = FString(StringCast<WIDECHAR>(String.c_str()).Get());
OutString = FString(UTF8_TO_TCHAR(Buffer));
}
};
@@ -430,106 +413,99 @@ struct TFSGLogString<long double>
{
static void Format(const long double Value, FString& OutString)
{
char Buffer[100];
char Buffer[128];
std::snprintf(Buffer, sizeof(Buffer), "%Lf", Value);
std::string String(Buffer);
OutString = FString(StringCast<WIDECHAR>(String.c_str()).Get());
OutString = FString(UTF8_TO_TCHAR(Buffer));
}
};
#if ! PLATFORM_ANDROID && PLATFORM_LINUX
template<>
struct TFSGLogString<const std::size_t>
{
static void Format(const std::size_t Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
#endif /* ! PLATFORM_ANDROID && PLATFORM_LINUX */
#if ! PLATFORM_ANDROID && PLATFORM_LINUX
template <>
template<>
struct TFSGLogString<std::size_t>
{
static void Format(const std::size_t Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
#endif /* ! PLATFORM_ANDROID && PLATFORM_LINUX */
template<>
struct TFSGLogString<const uint8>
{
static void Format(const int8 Value, FString& OutString)
static void Format(const uint8 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<uint8>
{
static void Format(const int8 Value, FString& OutString)
static void Format(const uint8 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<const uint16>
{
static void Format(const int16 Value, FString& OutString)
static void Format(const uint16 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<uint16>
{
static void Format(const int16 Value, FString& OutString)
static void Format(const uint16 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<const uint32>
{
static void Format(const int32 Value, FString& OutString)
static void Format(const uint32 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<uint32>
{
static void Format(const int32 Value, FString& OutString)
static void Format(const uint32 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<const uint64>
{
static void Format(const int64 Value, FString& OutString)
static void Format(const uint64 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
template<>
struct TFSGLogString<uint64>
{
static void Format(const int64 Value, FString& OutString)
static void Format(const uint64 Value, FString& OutString)
{
OutString = FString::Printf(TEXT("%d"), Value);
OutString = LexToString(Value);
}
};
@@ -538,7 +514,7 @@ struct TFSGLogString<const std::string>
{
static void Format(const std::string& Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value.c_str()).Get());
OutString = FString(UTF8_TO_TCHAR(Value.c_str()));
}
};
@@ -547,7 +523,7 @@ struct TFSGLogString<std::string>
{
static void Format(const std::string& Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value.c_str()).Get());
OutString = FString(UTF8_TO_TCHAR(Value.c_str()));
}
};
@@ -556,7 +532,7 @@ struct TFSGLogString<const wchar_t[L]>
{
static void Format(const wchar_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
@@ -565,7 +541,7 @@ struct TFSGLogString<wchar_t[L]>
{
static void Format(const wchar_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
@@ -574,7 +550,7 @@ struct TFSGLogString<const wchar_t*>
{
static void Format(const wchar_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
@@ -583,7 +559,7 @@ struct TFSGLogString<wchar_t*>
{
static void Format(const wchar_t* Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value).Get());
OutString = FString(StringCast<TCHAR>(Value).Get());
}
};
@@ -592,7 +568,7 @@ struct TFSGLogString<const std::wstring>
{
static void Format(const std::wstring& Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value.c_str()).Get());
OutString = FString(StringCast<TCHAR>(Value.data(), Value.size()).Get(), Value.size());
}
};
@@ -601,7 +577,7 @@ struct TFSGLogString<std::wstring>
{
static void Format(const std::wstring& Value, FString& OutString)
{
OutString = FString(StringCast<WIDECHAR>(Value.c_str()).Get());
OutString = FString(StringCast<TCHAR>(Value.data(), Value.size()).Get(), Value.size());
}
};