[programs/winetest] Extend PATH if we have dll's that only come with .NET

Nicolas Le Cam niko.lecam at gmail.com
Tue Feb 24 07:23:52 CST 2009


2009/2/24 Paul Vriens <paul.vriens.wine at gmail.com>:
> Hi,
>
> This makes sure that if we have a dll that's only provided via .NET it can
> still
> be found. Now both our extraction (and the generation of the subtest list)
> and
> the real test will find the dll.
>
> The downside (and hence this is a bit hackish) is that we extend the PATH
> for
> every test. For now it's only gdiplus that needs this btw as that dll can
> also
> exist without .NET (if I'm correct) and these tests directly import gdiplus.
>
> Changelog
>  Extend PATH if we have dll's that only come with .NET
>
> --
> Cheers,
>
> Paul.
>
>
> >From 3cf6c1e876ac032aab988efa0751b26b9643cf93 Mon Sep 17 00:00:00 2001
> From: Paul Vriens <Paul.Vriens.Wine at gmail.com>
> Date: Tue, 24 Feb 2009 14:05:26 +0100
> Subject: [PATCH] Extend PATH if we have dll's that only come with .NET
>
> ---
>  programs/winetest/main.c |   28 +++++++++++++++++++++++++++-
>  1 files changed, 27 insertions(+), 1 deletions(-)
>
> diff --git a/programs/winetest/main.c b/programs/winetest/main.c
> index 74a4307..ee390ec 100644
> --- a/programs/winetest/main.c
> +++ b/programs/winetest/main.c
> @@ -542,7 +542,33 @@ extract_test_proc (HMODULE hModule, LPCTSTR lpszType,
>     if (!dll && pLoadLibraryShim)
>     {
>         MultiByteToWideChar(CP_ACP, 0, dllname, -1, dllnameW, MAX_PATH);
> -        if (FAILED( pLoadLibraryShim(dllnameW, NULL, NULL, &dll) )) dll =
> 0;
> +        if (FAILED( pLoadLibraryShim(dllnameW, NULL, NULL, &dll) ))
> +            dll = 0;
> +        else
> +        {
> +            char *newpath;
> +            char dllpath[MAX_PATH];
> +            DWORD needed, pathlen = 0;
> +
> +            /* Extend the path so get_subtests() and the test itself can
> find
> +             * the dll (gdiplus for example).
> +             */
> +            GetModuleFileNameA(dll, dllpath, MAX_PATH);
> +            *strrchr(dllpath, '\\') = '\0';
> +
> +            needed = GetEnvironmentVariableA("PATH", NULL, 0);
> +
> +            /* current path + ';' + dllpath + '\0' */
> +            pathlen = needed + 1 + strlen(dllpath) + 1;
> +            newpath = xmalloc(pathlen);
> +            GetEnvironmentVariable("PATH", newpath, pathlen);
> +
> +            strcat(newpath, ";");
> +            strcat(newpath, dllpath);
> +            SetEnvironmentVariableA("PATH", newpath);
> +
> +            free(newpath);
> +        }
>     }
>     if (!dll) {
>         xprintf ("    %s=dll is missing\n", dllname);
> --
> 1.6.0.6
>
>
>
>
>
>

What about extending wine_test struct with a path variable that will
be set and restored around the CreateProcess call in run_ex if not
null ?

-- 
Nicolas Le Cam



More information about the wine-devel mailing list