Author: akhaldi
Date: Fri Nov 28 19:20:39 2014
New Revision: 65511
URL: 
http://svn.reactos.org/svn/reactos?rev=65511&view=rev
Log:
[RTL] Import Wine commit f87767b by Piotr Caban: Handle
ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID flag when opening manifest in
RtlCreateActivationContext.
Modified:
    trunk/reactos/lib/rtl/actctx.c
Modified: trunk/reactos/lib/rtl/actctx.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/actctx.c?rev=65511…
==============================================================================
--- trunk/reactos/lib/rtl/actctx.c      [iso-8859-1] (original)
+++ trunk/reactos/lib/rtl/actctx.c      [iso-8859-1] Fri Nov 28 19:20:39 2014
@@ -4645,7 +4645,30 @@
     if (pActCtx->lpSource && !((pActCtx->dwFlags &
ACTCTX_FLAG_RESOURCE_NAME_VALID) &&
                                (pActCtx->dwFlags & ACTCTX_FLAG_HMODULE_VALID)))
     {
-        if (!RtlDosPathNameToNtPathName_U(pActCtx->lpSource, &nameW, NULL, NULL))
+        WCHAR *source = NULL;
+        BOOLEAN ret;
+
+        if (pActCtx->dwFlags & ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID &&
+            RtlDetermineDosPathNameType_U(pActCtx->lpSource) == RtlPathTypeRelative)
+        {
+            DWORD dir_len, source_len;
+
+            dir_len = strlenW(pActCtx->lpAssemblyDirectory);
+            source_len = strlenW(pActCtx->lpSource);
+            if (!(source = RtlAllocateHeap( RtlGetProcessHeap(), 0,
(dir_len+source_len+2)*sizeof(WCHAR))))
+            {
+                status = STATUS_NO_MEMORY;
+                goto error;
+            }
+
+            memcpy(source, pActCtx->lpAssemblyDirectory, dir_len*sizeof(WCHAR));
+            source[dir_len] = '\\';
+            memcpy(source+dir_len+1, pActCtx->lpSource, (source_len+1)*sizeof(WCHAR));
+        }
+
+        ret = RtlDosPathNameToNtPathName_U(source ? source : pActCtx->lpSource,
&nameW, NULL, NULL);
+        if (source) RtlFreeHeap( RtlGetProcessHeap(), 0, source );
+        if (!ret)
         {
             status = STATUS_NO_SUCH_FILE;
             goto error;