[4/5] schedsvc: Implement SchRpcRegisterTask.

Hans Leidekker hans at codeweavers.com
Wed Mar 5 03:33:27 CST 2014


On Wed, 2014-03-05 at 18:07 +0900, Dmitry Timoshkov wrote:
> +static HRESULT write_xml_utf8(const WCHAR *name, DWORD disposition, const WCHAR *xmlW)
> +{
> +    static const char bom_utf8[] = { 0xef,0xbb,0xbf };
> +    static const char comment[] = "<!-- Task definition created by Wine -->\n";
> +    HANDLE hfile;
> +    DWORD size;
> +    char *xml;
> +    HRESULT hr = S_OK;
> +
> +    hfile = CreateFileW(name, GENERIC_WRITE, 0, NULL, disposition, 0, 0);
> +    if (hfile == INVALID_HANDLE_VALUE)
> +    {
> +        if (GetLastError() == ERROR_FILE_EXISTS)
> +            return HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS);
> +
> +        return HRESULT_FROM_WIN32(GetLastError());
> +    }
> +
> +    size = WideCharToMultiByte(CP_UTF8, 0, xmlW, -1, NULL, 0, NULL, NULL);
> +    xml = heap_alloc(size);
> +    if (!xml)
> +    {
> +        CloseHandle(hfile);
> +        return E_OUTOFMEMORY;
> +    }
> +    WideCharToMultiByte(CP_UTF8, 0, xmlW, -1, xml, size, NULL, NULL);
> +
> +    if (!WriteFile(hfile, bom_utf8, strlen(bom_utf8), &size, NULL))

bom_utf8 is not null-terminated.





More information about the wine-devel mailing list