Christian Costa : d3dxof: Move list type and list nb elements into the parse context.

Alexandre Julliard julliard at winehq.org
Mon Jun 3 16:06:32 CDT 2013


Module: wine
Branch: master
Commit: 7325b798b45c3ab1b9a984e87b4d82169fa43e17
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7325b798b45c3ab1b9a984e87b4d82169fa43e17

Author: Christian Costa <titan.costa at gmail.com>
Date:   Thu May 30 23:05:39 2013 +0200

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 7090141..c0bea3c 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 5bd3c71..7812fff 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 3ad9fa7..9335fdc 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;
 




More information about the wine-cvs mailing list