From 7325b798b45c3ab1b9a984e87b4d82169fa43e17 Mon Sep 17 00:00:00 2001 From: Christian Costa Date: Thu, 30 May 2013 23:05:39 +0200 Subject: [PATCH] d3dxof: Move list type and list nb elements into the parse context. --- dlls/d3dxof/d3dxof.c | 3 +-- dlls/d3dxof/d3dxof_private.h | 2 ++ dlls/d3dxof/parsing.c | 23 ++++++++++------------- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c index 709014174b8..c0bea3c87bb 100644 --- a/dlls/d3dxof/d3dxof.c +++ b/dlls/d3dxof/d3dxof.c @@ -291,10 +291,9 @@ static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates(IDirectXFile* iface, LP HRESULT hr; LPBYTE decomp_buffer = NULL; + ZeroMemory(&buf, sizeof(buf)); buf.buffer = pvData; buf.rem_bytes = cbSize; - buf.txt = FALSE; - buf.token_present = FALSE; buf.pdxf = This; TRACE("(%p/%p)->(%p,%d)\n", This, iface, pvData, cbSize); diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h index 5bd3c718a21..7812fffbe22 100644 --- a/dlls/d3dxof/d3dxof_private.h +++ b/dlls/d3dxof/d3dxof_private.h @@ -125,6 +125,8 @@ typedef struct { WORD current_token; BOOL token_present; BOOL txt; + DWORD list_nb_elements; + BOOL list_type_float; ULONG cur_pos_data; LPBYTE cur_pstrings; BYTE value[100]; diff --git a/dlls/d3dxof/parsing.c b/dlls/d3dxof/parsing.c index 3ad9fa7882b..9335fdccc2c 100644 --- a/dlls/d3dxof/parsing.c +++ b/dlls/d3dxof/parsing.c @@ -717,10 +717,7 @@ static WORD parse_TOKEN(parse_buffer * buf) } else { - static int nb_elem; - static int is_float; - - if (!nb_elem) + if (!buf->list_nb_elements) { if (!read_bytes(buf, &token, 2)) return TOKEN_NONE; @@ -728,26 +725,26 @@ static WORD parse_TOKEN(parse_buffer * buf) /* Convert integer and float list into separate elements */ if (token == TOKEN_INTEGER_LIST) { - if (!read_bytes(buf, &nb_elem, 4)) + if (!read_bytes(buf, &buf->list_nb_elements, 4)) return TOKEN_ERROR; token = TOKEN_INTEGER; - is_float = FALSE; - TRACE("Integer list (TOKEN_INTEGER_LIST) of size %d\n", nb_elem); + buf->list_type_float = FALSE; + TRACE("Integer list (TOKEN_INTEGER_LIST) of size %d\n", buf->list_nb_elements); } else if (token == TOKEN_FLOAT_LIST) { - if (!read_bytes(buf, &nb_elem, 4)) + if (!read_bytes(buf, &buf->list_nb_elements, 4)) return TOKEN_ERROR; token = TOKEN_FLOAT; - is_float = TRUE; - TRACE("Float list (TOKEN_FLOAT_LIST) of size %d\n", nb_elem); + buf->list_type_float = TRUE; + TRACE("Float list (TOKEN_FLOAT_LIST) of size %d\n", buf->list_nb_elements); } } - if (nb_elem) + if (buf->list_nb_elements) { - token = is_float ? TOKEN_FLOAT : TOKEN_INTEGER; - nb_elem--; + token = buf->list_type_float ? TOKEN_FLOAT : TOKEN_INTEGER; + buf->list_nb_elements--; { DWORD integer;