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

Reply via email to