Christian Costa : d3dxof: Fix string handling in binary mode + tests.
Alexandre Julliard
julliard at winehq.org
Wed Jun 12 15:37:24 CDT 2013
Module: wine
Branch: master
Commit: 71986eb109bb3ff45d374d15174afbe442830873
URL: http://source.winehq.org/git/wine.git/?a=commit;h=71986eb109bb3ff45d374d15174afbe442830873
Author: Christian Costa <titan.costa at gmail.com>
Date: Tue Jun 11 22:08:59 2013 +0200
d3dxof: Fix string handling in binary mode + tests.
---
dlls/d3dxof/parsing.c | 5 -----
dlls/d3dxof/tests/d3dxof.c | 23 +++++++++++++++++++++++
2 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/dlls/d3dxof/parsing.c b/dlls/d3dxof/parsing.c
index 69fb992..fc7250c 100644
--- a/dlls/d3dxof/parsing.c
+++ b/dlls/d3dxof/parsing.c
@@ -811,7 +811,6 @@ static WORD parse_TOKEN(parse_buffer * buf)
case TOKEN_STRING:
{
DWORD count;
- WORD tmp_token;
char *string = (char*)buf->value;
if (!read_bytes(buf, &count, 4))
@@ -819,10 +818,6 @@ static WORD parse_TOKEN(parse_buffer * buf)
if (!read_bytes(buf, string, count))
return TOKEN_ERROR;
string[count] = 0;
- if (!read_bytes(buf, &tmp_token, 2))
- return TOKEN_ERROR;
- if ((tmp_token != TOKEN_COMMA) && (tmp_token != TOKEN_SEMICOLON))
- ERR("No comma or semicolon (got %d)\n", tmp_token);
TRACE("string = %s\n", string);
token = TOKEN_LPSTR;
diff --git a/dlls/d3dxof/tests/d3dxof.c b/dlls/d3dxof/tests/d3dxof.c
index 3a92ce9..ede23f8 100644
--- a/dlls/d3dxof/tests/d3dxof.c
+++ b/dlls/d3dxof/tests/d3dxof.c
@@ -30,6 +30,7 @@
#define I4(x) x,0,0,0
#define TOKEN_NAME I2(1)
+#define TOKEN_STRING I2(2)
#define TOKEN_INTEGER I2(3)
#define TOKEN_INTEGER_LIST I2(6)
#define TOKEN_OBRACE I2(10)
@@ -328,6 +329,13 @@ static char object_syntax_string_with_separator[] =
"\"foo;bar\";\n"
"}\n";
+static char object_syntax_string_bin[] = {
+'x','o','f',' ','0','3','0','2','b','i','n',' ','0','0','6','4',
+TOKEN_NAME, /* size */ I4(8), /* name */ 'F','i','l','e','n','a','m','e', TOKEN_OBRACE,
+TOKEN_STRING, /* size */ I4(6), /* string */ 'f','o','o','b','a','r', TOKEN_SEMICOLON,
+TOKEN_CBRACE
+};
+
static char templates_complex_object[] =
"xof 0302txt 0064\n"
"template Vector\n"
@@ -850,6 +858,21 @@ static void test_syntax(void)
IDirectXFileData_Release(lpdxfd);
IDirectXFileEnumObject_Release(lpdxfeo);
+ /* Test string in binary mode */
+ dxflm.lpMemory = &object_syntax_string_bin;
+ dxflm.dSize = sizeof(object_syntax_string_bin);
+ hr = IDirectXFile_CreateEnumObject(lpDirectXFile, &dxflm, DXFILELOAD_FROMMEMORY, &lpdxfeo);
+ ok(hr == DXFILE_OK, "IDirectXFile_CreateEnumObject: %x\n", hr);
+ hr = IDirectXFileEnumObject_GetNextDataObject(lpdxfeo, &lpdxfd);
+ ok(hr == DXFILE_OK, "IDirectXFileEnumObject_GetNextDataObject: %x\n", hr);
+ hr = IDirectXFileData_GetData(lpdxfd, NULL, &size, (void**)&string);
+ ok(hr == DXFILE_OK, "IDirectXFileData_GetData: %x\n", hr);
+ ok(size == sizeof(char*), "Got wrong data size %d\n", size);
+ ok(!strcmp(*string, "foobar"), "Got string %s, expected foobar\n", *string);
+ if (hr == DXFILE_OK)
+ IDirectXFileData_Release(lpdxfd);
+ IDirectXFileEnumObject_Release(lpdxfeo);
+
IDirectXFile_Release(lpDirectXFile);
}
More information about the wine-cvs
mailing list