From f64130f4ae0107e65030c45dad2fd2ba6acb1a7a Mon Sep 17 00:00:00 2001 From: Lenny Komow Date: Fri, 13 Jan 2017 14:20:57 -0700 Subject: winsdk: Allow Configuring layers for older SDKs Change-Id: I9b13d7c43ee159f935d289ea939ac3c2c1e54875 --- windowsRuntimeInstaller/configure_runtime.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'windowsRuntimeInstaller') diff --git a/windowsRuntimeInstaller/configure_runtime.c b/windowsRuntimeInstaller/configure_runtime.c index 2041f426..f952897d 100644 --- a/windowsRuntimeInstaller/configure_runtime.c +++ b/windowsRuntimeInstaller/configure_runtime.c @@ -598,18 +598,27 @@ int update_registry_layers(FILE* log, enum Platform platform, const struct SDKVe return 0; } + size_t preferred_sdk = count; for(size_t i = 0; i < count; ++i) { - if(compare_versions(install_versions + i, version) == 0) { - if(platform == PLATFORM_X64) { - CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[i], PLATFORM_X64, api_name), - { free_installations(install_paths, install_versions, count); }); - fprintf(log, "\n"); + int cmp = compare_versions(install_versions + i, version); + if(cmp <= 0 && cmp >= -2) { + if(preferred_sdk == count || + (compare_versions(install_versions + i, install_versions + preferred_sdk) > 0)) { + preferred_sdk = i; } - CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[i], PLATFORM_X86, api_name), + } + } + + if(preferred_sdk < count) { + if(platform == PLATFORM_X64) { + CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[preferred_sdk], PLATFORM_X64, api_name), { free_installations(install_paths, install_versions, count); }); - break; + fprintf(log, "\n"); } + CHECK_ERROR_HANDLED(add_explicit_layers(log, install_paths[preferred_sdk], PLATFORM_X86, api_name), + { free_installations(install_paths, install_versions, count); }); } + free_installations(install_paths, install_versions, count); return 0; } -- cgit v1.2.3