On 2016-06-29 02:38, hbelusca@svn.reactos.org wrote:
- if (!CharCount && (Result == ERROR_INSUFFICIENT_BUFFER))
- {
/* Reallocate the buffer with double size */dwSize *= 2;tmp = (PWSTR)HeapReAlloc(GetProcessHeap(), 0, lpTargetPath, dwSize * sizeof(WCHAR));
Oops, this fixes my previous concern, thanks.
The casts are still weird though.
if (!tmp){/* Memory problem, bail out */CharCount = 0;Result = ERROR_NOT_ENOUGH_MEMORY;}else{/* Retry again */lpTargetPath = tmp;goto Retry;}- }
- if (CharCount)
- {
if ( wcsncmp(lpTargetPath, L"\\??\\", 4) == 0 &&( (lpTargetPath[4] >= L'A' && lpTargetPath[4] <= L'Z') ||(lpTargetPath[4] >= L'a' && lpTargetPath[4] <= L'z') ) ){/* The drive exists and is SUBSTed */Result = ERROR_IS_SUBSTED;}+#if 0
else{/* The drive exists but is not SUBSTed */Result = ERROR_INVALID_DRIVE;}+#endif
- }
- if (!TargetPath)
- {
/* Free the local buffer */HeapFree(GetProcessHeap(), 0, lpTargetPath);- }
- else
- {
/* Update the user-given pointers */*TargetPath = lpTargetPath;*Size = dwSize;
If the HeapReAlloc above fails you might still get into this code path which is not advisable. It should probably always take the if-branch in that case.
- }
- return Result;
Thanks. -Thomas