StringToGuid() changed not to require zero termination exactly at the end of the GUID string; plus it can now return the pointer to the end of the GUID found; akin of strtoi()

This commit is contained in:
Simon Rozman 2016-08-27 17:22:19 +02:00
parent 92f010b206
commit ea9a08e02a
2 changed files with 8 additions and 6 deletions

View File

@ -158,7 +158,7 @@ template<class _Elem, class _Traits, class _Ax> inline VOID GuidToStringW(_In_ L
/// \param[in ] lpszGuid String with GUID
/// \param[out] lpGuid GUID to store the result to
///
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid);
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid, _Out_ LPCSTR *lpszGuidEnd = NULL);
///
/// Parses string with GUID and stores it to GUID
@ -166,7 +166,7 @@ BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid);
/// \param[in ] lpszGuid String with GUID
/// \param[out] lpGuid GUID to store the result to
///
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid);
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid, _Out_ LPCWSTR *lpszGuidEnd = NULL);
#ifdef _UNICODE
#define StringToGuid StringToGuidW

View File

@ -25,7 +25,7 @@
// StringToGuidA
//////////////////////////////////////////////////////////////////////
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid)
BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid, _Out_ LPCSTR *lpszGuidEnd)
{
GUID g;
LPSTR lpszEnd;
@ -80,14 +80,15 @@ BOOL WINSTD_API StringToGuidA(_In_z_ LPCSTR lpszGuid, _Out_ LPGUID lpGuid)
if (*lpszGuid != '}') return FALSE;
lpszGuid++;
if (*lpszGuid != 0) return FALSE;
if (lpszGuidEnd)
*lpszGuidEnd = lpszGuid;
*lpGuid = g;
return TRUE;
}
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid)
BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid, _Out_ LPCWSTR *lpszGuidEnd)
{
GUID g;
LPWSTR lpszEnd;
@ -142,7 +143,8 @@ BOOL WINSTD_API StringToGuidW(_In_z_ LPCWSTR lpszGuid, _Out_ LPGUID lpGuid)
if (*lpszGuid != '}') return FALSE;
lpszGuid++;
if (*lpszGuid != 0) return FALSE;
if (lpszGuidEnd)
*lpszGuidEnd = lpszGuid;
*lpGuid = g;
return TRUE;