[PATCH 6/11] apphelp: Implement SdbGetFirstChild.

Mislav Blazevic krofnica996 at gmail.com
Wed Jul 31 17:58:49 CDT 2013


---
 dlls/apphelp/apphelp.c    | 34 ++++++++++++++++++++++++++++++++++
 dlls/apphelp/apphelp.spec |  2 +-
 include/appcompatapi.h    |  1 +
 3 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/dlls/apphelp/apphelp.c b/dlls/apphelp/apphelp.c
index ce309d6..241e2b5 100644
--- a/dlls/apphelp/apphelp.c
+++ b/dlls/apphelp/apphelp.c
@@ -505,3 +505,37 @@ TAG WINAPI SdbGetTagFromTagID(PDB db, TAGID parent)

     return data;
 }
+
+/**************************************************************************
+ *        SdbGetFirstChild                [APPHELP.@]
+ *
+ * Searches shim database for a child of specified parent tag
+ *
+ * PARAMS
+ *  db       [I] Handle to the shim database
+ *  parent   [I] TAGID of parent
+ *
+ * RETURNS
+ *  Success: TAGID associated with child tag
+ *  Failure: TAGID_NULL
+ */
+TAGID WINAPI SdbGetFirstChild(PDB db, TAGID parent)
+{
+    TAG tag;
+
+    /* if we are at beginning of database */
+    if (parent == TAGID_NULL)
+    {
+        /* header only database: no tags */
+        if (db->size <= TAGID_ROOT)
+            return TAGID_NULL;
+        else return TAGID_ROOT;
+    }
+
+    /* only list tag can have children */
+    if (SdbGetTagFromTagID(db, parent) & TAG_TYPE_MASK != TAG_TYPE_LIST)
+        return TAGID_NULL;
+
+    /* first child is sizeof(TAG) + sizeof(DWORD) bytes after beginning */
+    return parent + 6;
+}
diff --git a/dlls/apphelp/apphelp.spec b/dlls/apphelp/apphelp.spec
index c68ac14..6a96a7d 100644
--- a/dlls/apphelp/apphelp.spec
+++ b/dlls/apphelp/apphelp.spec
@@ -62,7 +62,7 @@
 @ stub SdbGetFileImageType
 @ stub SdbGetFileImageTypeEx
 @ stub SdbGetFileInfo
-@ stub SdbGetFirstChild
+@ stdcall SdbGetFirstChild(ptr long)
 @ stub SdbGetIndex
 @ stub SdbGetItemFromItemRef
 @ stub SdbGetLayerName
diff --git a/include/appcompatapi.h b/include/appcompatapi.h
index d277628..185bd33 100644
--- a/include/appcompatapi.h
+++ b/include/appcompatapi.h
@@ -29,6 +29,7 @@ LPCWSTR WINAPI SdbTagToString(TAG);
 void WINAPI SdbCloseDatabase(PDB);
 PDB WINAPI SdbOpenDatabase(LPCWSTR, PATH_TYPE);
 TAG WINAPI SdbGetTagFromTagID(PDB, TAGID);
+TAGID WINAPI SdbGetFirstChild(PDB, TAGID);

 typedef enum _PATH_TYPE {
     DOS_PATH,
-- 
1.8.3.4



More information about the wine-patches mailing list