Commit 21525261 authored by Christian Costa's avatar Christian Costa Committed by Alexandre Julliard

d3dxof: Fix IDirectXFileDataImpl_GetName and IDirectXFileDataReferenceImpl_GetName + tests.

parent 635f76b0
...@@ -587,6 +587,9 @@ static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData* iface, LPST ...@@ -587,6 +587,9 @@ static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData* iface, LPST
if (*pdwBufLen < len) if (*pdwBufLen < len)
return DXFILEERR_BADVALUE; return DXFILEERR_BADVALUE;
CopyMemory(pstrNameBuf, This->pobj->name, len); CopyMemory(pstrNameBuf, This->pobj->name, len);
/* Even if we return a size of 0, an empty string with a null byte must be returned */
if (*pdwBufLen && !len)
pstrNameBuf[0] = 0;
} }
*pdwBufLen = len; *pdwBufLen = len;
...@@ -851,6 +854,9 @@ static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataRefe ...@@ -851,6 +854,9 @@ static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataRefe
if (*pdwBufLen < len) if (*pdwBufLen < len)
return DXFILEERR_BADVALUE; return DXFILEERR_BADVALUE;
CopyMemory(pstrNameBuf, This->ptarget->name, len); CopyMemory(pstrNameBuf, This->ptarget->name, len);
/* Even if we return a size of 0, an empty string with a null byte must be returned */
if (*pdwBufLen && !len)
pstrNameBuf[0] = 0;
} }
*pdwBufLen = len; *pdwBufLen = len;
......
...@@ -546,10 +546,18 @@ static void test_getname(void) ...@@ -546,10 +546,18 @@ static void test_getname(void)
hr = IDirectXFileData_GetName(lpdxfd, NULL, &length); hr = IDirectXFileData_GetName(lpdxfd, NULL, &length);
ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr); ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr);
ok(length == 0, "Returned length should be 0 instead of %u\n", length); ok(length == 0, "Returned length should be 0 instead of %u\n", length);
length = 0;
name[0] = 0x7f;
hr = IDirectXFileData_GetName(lpdxfd, name, &length);
ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr);
ok(length == 0, "Returned length should be 0 instead of %u\n", length);
ok(name[0] == 0x7f, "First character is %#x instead of 0x7f\n", name[0]);
length = sizeof(name); length = sizeof(name);
name[0] = 0x7f;
hr = IDirectXFileData_GetName(lpdxfd, name, &length); hr = IDirectXFileData_GetName(lpdxfd, name, &length);
ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr); ok(hr == DXFILE_OK, "IDirectXFileData_GetName: %x\n", hr);
ok(length == 0, "Returned length should be 0 instead of %u\n", length); ok(length == 0, "Returned length should be 0 instead of %u\n", length);
ok(name[0] == 0, "First character is %#x instead of 0x00\n", name[0]);
ref = IDirectXFileEnumObject_Release(lpdxfeo); ref = IDirectXFileEnumObject_Release(lpdxfeo);
ok(ref == 0, "Got refcount %d, expected 0\n", ref); ok(ref == 0, "Got refcount %d, expected 0\n", ref);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment