Jacek Caban : ntdll: Add parsing of dependencies in manifests.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jul 20 06:02:06 CDT 2007


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jul 19 17:50:45 2007 +0200

ntdll: Add parsing of dependencies in manifests.

---

 dlls/ntdll/actctx.c |   71 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/dlls/ntdll/actctx.c b/dlls/ntdll/actctx.c
index d46f77c..f785ae7 100644
--- a/dlls/ntdll/actctx.c
+++ b/dlls/ntdll/actctx.c
@@ -128,6 +128,8 @@ struct actctx_loader
 
 #define ASSEMBLY_ELEM                   "assembly"
 #define ASSEMBLYIDENTITY_ELEM           "assemblyIdentity"
+#define DEPENDENCY_ELEM                 "dependency"
+#define DEPENDENTASSEMBLY_ELEM          "dependentAssembly"
 
 #define ELEM_END(elem) "/" elem
 
@@ -493,6 +495,71 @@ static BOOL parse_assembly_identity_elem(xmlbuf_t* xmlbuf, ACTIVATION_CONTEXT* a
     return parse_expect_elem(xmlbuf, ELEM_END(ASSEMBLYIDENTITY_ELEM)) && parse_end_element(xmlbuf);
 }
 
+static BOOL parse_dependent_assembly_elem(xmlbuf_t* xmlbuf,
+                                          struct actctx_loader* acl)
+{
+    struct assembly_identity    ai;
+    xmlstr_t                    elem;
+    BOOL                        end = FALSE, ret = TRUE;
+
+    TRACE("\n");
+
+    if (!parse_expect_no_attr(xmlbuf, &end) || end) return end;
+
+    if (!parse_expect_elem(xmlbuf, ASSEMBLYIDENTITY_ELEM) ||
+        !parse_assembly_identity_elem(xmlbuf, acl->actctx, &ai))
+        return FALSE;
+
+    /* store the newly found identity for later loading */
+    if (!add_dependent_assembly_id(acl, &ai)) return FALSE;
+
+    while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
+    {
+        if (xmlstr_cmp(&elem, ELEM_END(DEPENDENTASSEMBLY_ELEM)))
+        {
+            ret = parse_end_element(xmlbuf);
+            break;
+        }
+        else
+        {
+            WARN("wrong elem %s\n", debugstr_xmlstr(&elem));
+            ret = FALSE;
+        }
+    }
+
+    return ret;
+}
+
+static BOOL parse_dependency_elem(xmlbuf_t* xmlbuf, struct actctx_loader* acl)
+{
+    xmlstr_t elem;
+    BOOL end = FALSE, ret = TRUE;
+
+    TRACE("\n");
+
+    if (!parse_expect_no_attr(xmlbuf, &end) || end) return end;
+
+    while (ret && (ret = next_xml_elem(xmlbuf, &elem)))
+    {
+        if (xmlstr_cmp(&elem, ELEM_END(DEPENDENCY_ELEM)))
+        {
+            ret = parse_end_element(xmlbuf);
+            break;
+        }
+        else if (xmlstr_cmp(&elem, DEPENDENTASSEMBLY_ELEM))
+        {
+            ret = parse_dependent_assembly_elem(xmlbuf, acl);
+        }
+        else
+        {
+            WARN("wrong element %s\n", debugstr_xmlstr(&elem));
+            ret = FALSE;
+        }
+    }
+
+    return ret;
+}
+
 static BOOL parse_assembly_elem(xmlbuf_t* xmlbuf, struct actctx_loader* acl,
                                 struct assembly* assembly,
                                 struct assembly_identity* expected_ai)
@@ -562,6 +629,10 @@ static BOOL parse_assembly_elem(xmlbuf_t* xmlbuf, struct actctx_loader* acl,
             ret = parse_end_element(xmlbuf);
             break;
         }
+        else if (xmlstr_cmp(&elem, DEPENDENCY_ELEM))
+        {
+            ret = parse_dependency_elem(xmlbuf, acl);
+        }
         else
         {
             WARN("wrong element %s\n", debugstr_xmlstr(&elem));




More information about the wine-cvs mailing list