From cbbe655f274195348ceadf3251c5cc1f6338cdaf Mon Sep 17 00:00:00 2001
From: Nat Goodspeed <nat@lindenlab.com>
Date: Wed, 24 Oct 2018 16:26:05 -0400
Subject: [PATCH] DRTVWR-476: Eliminate snprintf_hack::snprintf(). Use MS
 snprintf().

https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-snprintf-snprintf-l-snwprintf-snwprintf-l?view=vs-2017
"Beginning with the UCRT in Visual Studio 2015 and Windows 10, snprintf is no
longer identical to _snprintf. The snprintf function behavior is now C99
standard compliant."

In other words, VS 2015 et ff. snprintf() now promises to nul-terminate the
buffer even in the overflow case, which is what snprintf_hack::snprintf() was
for.

This removal was motivated by ambiguous-call errors generated by VS 2017 for
library snprintf() vs. snprintf_hack::snprintf().
---
 indra/llcommon/llstring.cpp | 16 ----------------
 indra/llcommon/llstring.h   | 26 --------------------------
 2 files changed, 42 deletions(-)

diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 0174c411b4b..0290eea1430 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -657,22 +657,6 @@ std::string utf8str_removeCRLF(const std::string& utf8str)
 }
 
 #if LL_WINDOWS
-// documentation moved to header. Phoenix 2007-11-27
-namespace snprintf_hack
-{
-	int snprintf(char *str, size_t size, const char *format, ...)
-	{
-		va_list args;
-		va_start(args, format);
-
-		int num_written = _vsnprintf(str, size, format, args); /* Flawfinder: ignore */
-		va_end(args);
-		
-		str[size-1] = '\0'; // always null terminate
-		return num_written;
-	}
-}
-
 std::string ll_convert_wide_to_string(const wchar_t* in)
 {
 	return ll_convert_wide_to_string(in, CP_UTF8);
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index b619a9e48c5..6b1a1e0a032 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -706,32 +706,6 @@ LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str);
  */
 //@{
 
-/**
- * @brief Implementation the expected snprintf interface.
- *
- * If the size of the passed in buffer is not large enough to hold the string,
- * two bad things happen:
- * 1. resulting formatted string is NOT null terminated
- * 2. Depending on the platform, the return value could be a) the required
- *    size of the buffer to copy the entire formatted string or b) -1.
- *    On Windows with VS.Net 2003, it returns -1 e.g. 
- *
- * safe_snprintf always adds a NULL terminator so that the caller does not
- * need to check for return value or need to add the NULL terminator.
- * It does not, however change the return value - to let the caller know
- * that the passed in buffer size was not large enough to hold the
- * formatted string.
- *
- */
-
-// Deal with the differeneces on Windows
-namespace snprintf_hack
-{
-	LL_COMMON_API int snprintf(char *str, size_t size, const char *format, ...);
-}
-
-using snprintf_hack::snprintf;
-
 /**
  * @brief Convert a wide string to std::string
  *
-- 
GitLab