On 5 June 2017 at 01:07, Nikolay Sivov nsivov@codeweavers.com wrote:
+HRESULT d3drm_object_get_class_name(struct d3drm_object *object, DWORD *size, char *name) +{
- DWORD req_size;
- if (!size)
return E_INVALIDARG;
- req_size = strlen(object->classname) + 1;
- if (name && *size < req_size)
return E_INVALIDARG;
- *size = req_size;
- if (name)
strcpy(name, object->classname);
Note that you already know the string length, so just use memcpy(). (I.e., there's almost never a good reason to use strcpy().)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c index e1091be423..a0dfe6c7d2 100644 --- a/dlls/d3drm/tests/d3drm.c +++ b/dlls/d3drm/tests/d3drm.c @@ -52,6 +52,42 @@ static D3DRMMATRIX4D identity = { { 0.0f, 0.0f, 0.0f, 1.0f } };
+static void test_class_name(IDirect3DRMObject *object, const char *name) +{
- char cname[64] = {0};
- HRESULT hr;
- DWORD size;
- hr = IDirect3DRMObject_GetClassName(object, NULL, cname);
- ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
"Got unexpected hr %#x.\n"
- hr = IDirect3DRMViewport_GetClassName(object, NULL, NULL);
- ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
- size = 0;
- hr = IDirect3DRMObject_GetClassName(object, &size, NULL);
- ok(hr == D3DRM_OK, "Cannot get classname size (hr = %x)\n", hr);
- ok(size == strlen(name) + 1, "wrong size: %u\n", size);
- size = 1;
- hr = IDirect3DRMObject_GetClassName(object, &size, cname);
- ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
- ok(size == 1, "Got size %u.\n", size);
- size = sizeof(cname);
- hr = IDirect3DRMObject_GetClassName(object, &size, cname);
- ok(hr == D3DRM_OK, "Cannot get classname (hr = %x)\n", hr);
- ok(size == strlen(name) + 1, "wrong size: %u\n", size);
- ok(!strcmp(cname, name), "Expected cname to be "%s", but got "%s"\n", name, cname);
- size = strlen(name);
- strcpy(cname, "XXX");
- hr = IDirect3DRMObject_GetClassName(object, &size, cname);
- ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
- ok(size == strlen(name), "wrong size: %u\n", size);
- ok(!strcmp(cname, "XXX"), "Expected unchanged buffer, but got "%s"\n", cname);
+}
I would be happier if this printed the line number of the caller on failure, see e.g. check_interface_() in the d3d11 tests.