On 2016-06-29 02:38, hbelu...@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 _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev