Hans Leidekker : wbemprox: Support mixed dynamic and static table data.

Alexandre Julliard julliard at winehq.org
Tue Jun 19 15:36:26 CDT 2012


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

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Jun 19 10:21:12 2012 +0200

wbemprox: Support mixed dynamic and static table data.

---

 dlls/wbemprox/builtin.c          |    4 ++--
 dlls/wbemprox/query.c            |   21 +++++++++++----------
 dlls/wbemprox/wbemprox_private.h |    5 ++++-
 3 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index a85802f..8a6a74f 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -74,8 +74,8 @@ static const struct column col_compsys[] =
 };
 static const struct column col_process[] =
 {
-    { prop_captionW,     CIM_STRING },
-    { prop_descriptionW, CIM_STRING },
+    { prop_captionW,     CIM_STRING|COL_FLAG_DYNAMIC },
+    { prop_descriptionW, CIM_STRING|COL_FLAG_DYNAMIC },
     { prop_pprocessidW,  CIM_UINT32 },
     { prop_processidW,   CIM_UINT32 },
     { prop_threadcountW, CIM_UINT32 }
diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c
index 5ed4d07..9e03544 100644
--- a/dlls/wbemprox/query.c
+++ b/dlls/wbemprox/query.c
@@ -48,7 +48,7 @@ static UINT get_column_size( const struct table *table, UINT column )
 {
     if (table->columns[column].type & CIM_FLAG_ARRAY) return sizeof(void *);
 
-    switch (table->columns[column].type)
+    switch (table->columns[column].type & COL_TYPE_MASK)
     {
     case CIM_SINT16:
     case CIM_UINT16:
@@ -60,7 +60,7 @@ static UINT get_column_size( const struct table *table, UINT column )
     case CIM_STRING:
         return sizeof(WCHAR *);
     default:
-        ERR("unkown column type %u\n", table->columns[column].type);
+        ERR("unkown column type %u\n", table->columns[column].type & COL_TYPE_MASK);
         break;
     }
     return sizeof(INT32);
@@ -92,7 +92,7 @@ static HRESULT get_value( const struct table *table, UINT row, UINT column, INT_
         *val = (INT_PTR)*(const void **)ptr;
         return S_OK;
     }
-    switch (table->columns[column].type)
+    switch (table->columns[column].type & COL_TYPE_MASK)
     {
     case CIM_DATETIME:
     case CIM_STRING:
@@ -111,7 +111,7 @@ static HRESULT get_value( const struct table *table, UINT row, UINT column, INT_
         *val = *(const UINT32 *)ptr;
         break;
     default:
-        ERR("invalid column type %u\n", table->columns[column].type);
+        ERR("invalid column type %u\n", table->columns[column].type & COL_TYPE_MASK);
         *val = 0;
         break;
     }
@@ -136,7 +136,7 @@ HRESULT create_view( const struct property *proplist, const WCHAR *class,
 
 static void clear_table( struct table *table )
 {
-    UINT i, j;
+    UINT i, j, type;
 
     if (!table->fill || !table->data) return;
 
@@ -144,9 +144,10 @@ static void clear_table( struct table *table )
     {
         for (j = 0; j < table->num_cols; j++)
         {
-            if (table->columns[j].type == CIM_STRING   ||
-                table->columns[j].type == CIM_DATETIME ||
-                (table->columns[j].type & CIM_FLAG_ARRAY))
+            if (!(table->columns[j].type & COL_FLAG_DYNAMIC)) continue;
+
+            type = table->columns[j].type & COL_TYPE_MASK;
+            if (type == CIM_STRING || type == CIM_DATETIME || (type & CIM_FLAG_ARRAY))
             {
                 void *ptr;
                 if (get_value( table, i, j, (INT_PTR *)&ptr ) == S_OK) heap_free( ptr );
@@ -399,7 +400,7 @@ HRESULT get_propval( const struct view *view, UINT index, const WCHAR *name, VAR
     hr = get_value( view->table, row, column, &val );
     if (hr != S_OK) return hr;
 
-    switch (view->table->columns[column].type)
+    switch (view->table->columns[column].type & COL_TYPE_MASK)
     {
     case CIM_STRING:
     case CIM_DATETIME:
@@ -410,7 +411,7 @@ HRESULT get_propval( const struct view *view, UINT index, const WCHAR *name, VAR
         ERR("unhandled column type %u\n", view->table->columns[column].type);
         return WBEM_E_FAILED;
     }
-    if (type) *type = view->table->columns[column].type;
+    if (type) *type = view->table->columns[column].type & COL_TYPE_MASK;
     return S_OK;
 }
 
diff --git a/dlls/wbemprox/wbemprox_private.h b/dlls/wbemprox/wbemprox_private.h
index c7edbb0..30aecca 100644
--- a/dlls/wbemprox/wbemprox_private.h
+++ b/dlls/wbemprox/wbemprox_private.h
@@ -21,10 +21,13 @@
 
 #define SIZEOF(array) (sizeof(array)/sizeof((array)[0]))
 
+#define COL_TYPE_MASK    0x0000ffff
+#define COL_FLAG_DYNAMIC 0x00010000
+
 struct column
 {
     const WCHAR *name;
-    CIMTYPE_ENUMERATION type;
+    UINT type;
 };
 
 struct table




More information about the wine-cvs mailing list