Index: third_party/openvr/src/src/vrcommon/strtools_public.h |
diff --git a/third_party/openvr/src/src/vrcommon/strtools_public.h b/third_party/openvr/src/src/vrcommon/strtools_public.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..01049cbac83929748f4cbb0b962341ca33ffef10 |
--- /dev/null |
+++ b/third_party/openvr/src/src/vrcommon/strtools_public.h |
@@ -0,0 +1,126 @@ |
+//========= Copyright Valve Corporation ============// |
+#pragma once |
+ |
+#include <string> |
+#include <stdint.h> |
+#include <sys/types.h> |
+ |
+/** returns true if the string has the prefix */ |
+bool StringHasPrefix( const std::string & sString, const std::string & sPrefix ); |
+bool StringHasPrefixCaseSensitive( const std::string & sString, const std::string & sPrefix ); |
+ |
+/** returns if the string has the suffix */ |
+bool StringHasSuffix( const std::string &sString, const std::string &sSuffix ); |
+bool StringHasSuffixCaseSensitive( const std::string &sString, const std::string &sSuffix ); |
+ |
+/** converts a UTF-16 string to a UTF-8 string */ |
+std::string UTF16to8(const wchar_t * in); |
+ |
+/** converts a UTF-8 string to a UTF-16 string */ |
+std::wstring UTF8to16(const char * in); |
+#define Utf16FromUtf8 UTF8to16 |
+ |
+/** safely copy a string into a buffer */ |
+void strcpy_safe( char *pchBuffer, size_t unBufferSizeBytes, const char *pchSource ); |
+template< size_t bufferSize > |
+void strcpy_safe( char (& buffer) [ bufferSize ], const char *pchSource ) |
+{ |
+ strcpy_safe( buffer, bufferSize, pchSource ); |
+} |
+ |
+ |
+/** converts a string to upper case */ |
+std::string StringToUpper( const std::string & sString ); |
+ |
+/** converts a string to lower case */ |
+std::string StringToLower( const std::string & sString ); |
+ |
+// we stricmp (from WIN) but it isn't POSIX - OSX/LINUX have strcasecmp so just inline bridge to it |
+#if defined( OSX ) || defined( LINUX ) |
+#include <strings.h> |
+inline int stricmp(const char *pStr1, const char *pStr2) { return strcasecmp(pStr1,pStr2); } |
+#define _stricmp stricmp |
+inline int strnicmp( const char *pStr1, const char *pStr2, size_t unBufferLen ) { return strncasecmp( pStr1,pStr2, unBufferLen ); } |
+#define _strnicmp strnicmp |
+ |
+#define _vsnprintf_s vsnprintf |
+ |
+#define _TRUNCATE ((size_t)-1) |
+ |
+#endif |
+ |
+#if defined( OSX ) |
+// behaviors ensure NULL-termination at least as well as _TRUNCATE does, but |
+// wcsncpy_s/strncpy_s can non-NULL-terminate, wcslcpy/strlcpy can not. |
+inline errno_t wcsncpy_s(wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count) |
+{ |
+ return wcslcpy(strDest, strSource, numberOfElements); |
+} |
+ |
+inline errno_t strncpy_s(char *strDest, size_t numberOfElements, const char *strSource, size_t count) |
+{ |
+ return strlcpy(strDest, strSource, numberOfElements); |
+} |
+ |
+#endif |
+ |
+#if defined( LINUX ) |
+// this implementation does not return whether or not the destination was |
+// truncated, but that is straightforward to fix if anybody actually needs the |
+// return code. |
+#include "string.h" |
+inline void wcsncpy_s(wchar_t *strDest, size_t numberOfElements, const wchar_t *strSource, size_t count) |
+{ |
+ wcsncpy(strDest, strSource, numberOfElements); |
+ strDest[numberOfElements-1] = '\0'; |
+} |
+ |
+inline void strncpy_s(char *strDest, size_t numberOfElements, const char *strSource, size_t count) |
+{ |
+ strncpy(strDest, strSource, numberOfElements); |
+ strDest[numberOfElements-1] = '\0'; |
+} |
+ |
+#endif |
+ |
+#if defined( _WIN32 ) && _MSC_VER < 1800 |
+inline uint64_t strtoull(const char *str, char **endptr, int base) { return _strtoui64( str, endptr, base ); } |
+#endif |
+ |
+/* Handles copying a std::string into a buffer as would be provided in an API */ |
+uint32_t ReturnStdString( const std::string & sValue, char *pchBuffer, uint32_t unBufferLen ); |
+ |
+/* Handles copying a buffer into an std::string and auto adds null terminator */ |
+void BufferToStdString( std::string & sDest, const char *pchBuffer, uint32_t unBufferLen ); |
+ |
+/** Returns a std::string from a uint64_t */ |
+std::string Uint64ToString( uint64_t ulValue ); |
+ |
+/** returns a uint64_t from a string */ |
+uint64_t StringToUint64( const std::string & sValue ); |
+ |
+//----------------------------------------------------------------------------- |
+// Purpose: Encodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. |
+// This version of the call isn't a strict RFC implementation, but uses + for space as is |
+// the standard in HTML form encoding, despite it not being part of the RFC. |
+// |
+// Dest buffer should be at least as large as source buffer to guarantee room for decode. |
+//----------------------------------------------------------------------------- |
+void V_URLEncode( char *pchDest, int nDestLen, const char *pchSource, int nSourceLen ); |
+ |
+//----------------------------------------------------------------------------- |
+// Purpose: Decodes a string (or binary data) from URL encoding format, see rfc1738 section 2.2. |
+// This version of the call isn't a strict RFC implementation, but uses + for space as is |
+// the standard in HTML form encoding, despite it not being part of the RFC. |
+// |
+// Dest buffer should be at least as large as source buffer to guarantee room for decode. |
+// Dest buffer being the same as the source buffer (decode in-place) is explicitly allowed. |
+//----------------------------------------------------------------------------- |
+size_t V_URLDecode( char *pchDecodeDest, int nDecodeDestLen, const char *pchEncodedSource, int nEncodedSourceLen ); |
+ |
+//----------------------------------------------------------------------------- |
+// Purpose: strip extension from a path |
+//----------------------------------------------------------------------------- |
+void V_StripExtension( std::string &in ); |
+ |
+ |