Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51815
Signed-off-by: Esme Povirk esme@codeweavers.com --- I took some liberties with the ARM environments. I haven't found an actual Windows machine with a 32-bit ARM print environment, but MS-RPRN implies that "Windows ARM" is a valid environment name.
My Windows 10 machine does have a "Windows ARM64" environment but it only has driver version 4 in the registry, not 3.
dlls/localspl/provider.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c index c17983e3037..aded4ed44c4 100644 --- a/dlls/localspl/provider.c +++ b/dlls/localspl/provider.c @@ -245,10 +245,28 @@ static const printenv_t env_x86 = {x86_envnameW, L"w32x86", 3, static const printenv_t env_x64 = {L"Windows x64", L"x64", 3, L"\Version-3", L"\3"};
+static const printenv_t env_arm = {L"Windows ARM", L"arm", 3, + L"\Version-3", L"\3"}; + +static const printenv_t env_arm64 = {L"Windows ARM64", L"arm64", 3, + L"\Version-3", L"\3"}; + static const printenv_t env_win40 = {L"Windows 4.0", L"win40", 0, L"\Version-0", L"\0"};
-static const printenv_t * const all_printenv[] = {&env_x86, &env_x64, &env_ia64, &env_win40}; +static const printenv_t * const all_printenv[] = {&env_x86, &env_x64, &env_ia64, &env_arm, &env_arm64, &env_win40}; + +#ifdef __i386__ +#define env_arch env_x86 +#elif defined __x86_64__ +#define env_arch env_x64 +#elif defined __arm__ +#define env_arch env_arm +#elif defined __aarch64__ +#define env_arch env_arm64 +#else +#error not defined for this cpu +#endif
static const DWORD di_sizeof[] = {0, sizeof(DRIVER_INFO_1W), sizeof(DRIVER_INFO_2W), @@ -916,7 +934,7 @@ static const printenv_t * validate_envW(LPCWSTR env) } else { - result = (GetVersion() & 0x80000000) ? &env_win40 : &env_x86; + result = (GetVersion() & 0x80000000) ? &env_win40 : &env_arch; }
TRACE("=> using %p: %s\n", result, debugstr_w(result ? result->envname : NULL));
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51815 Signed-off-by: Esme Povirk esme@codeweavers.com --- dlls/winspool.drv/info.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index edfdab218c4..c0d5fdd054a 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -232,9 +232,13 @@ static const WCHAR WinNT_CV_PrinterPortsW[] = { 'S','o','f','t','w','a','r','e', static WCHAR envname_win40W[] = {'W','i','n','d','o','w','s',' ','4','.','0',0}; static const WCHAR envname_x64W[] = {'W','i','n','d','o','w','s',' ','x','6','4',0}; static WCHAR envname_x86W[] = {'W','i','n','d','o','w','s',' ','N','T',' ','x','8','6',0}; +static const WCHAR envname_armW[] = {'W','i','n','d','o','w','s',' ','A','R','M',0}; +static const WCHAR envname_arm64W[] = {'W','i','n','d','o','w','s',' ','A','R','M','6','4',0}; static const WCHAR subdir_win40W[] = {'w','i','n','4','0',0}; static const WCHAR subdir_x64W[] = {'x','6','4',0}; static const WCHAR subdir_x86W[] = {'w','3','2','x','8','6',0}; +static const WCHAR subdir_armW[] = {'a','r','m',0}; +static const WCHAR subdir_arm64W[] = {'a','r','m','6','4',0}; static const WCHAR Version0_RegPathW[] = {'\','V','e','r','s','i','o','n','-','0',0}; static const WCHAR Version0_SubdirW[] = {'\','0',0}; static const WCHAR Version3_RegPathW[] = {'\','V','e','r','s','i','o','n','-','3',0}; @@ -310,9 +314,23 @@ static const DWORD pi_sizeof[] = {0, sizeof(PRINTER_INFO_1W), sizeof(PRINTER_INF
static const printenv_t env_x64 = {envname_x64W, subdir_x64W, 3, Version3_RegPathW, Version3_SubdirW}; static const printenv_t env_x86 = {envname_x86W, subdir_x86W, 3, Version3_RegPathW, Version3_SubdirW}; +static const printenv_t env_arm = {envname_armW, subdir_armW, 3, Version3_RegPathW, Version3_SubdirW}; +static const printenv_t env_arm64 = {envname_arm64W, subdir_arm64W, 3, Version3_RegPathW, Version3_SubdirW}; static const printenv_t env_win40 = {envname_win40W, subdir_win40W, 0, Version0_RegPathW, Version0_SubdirW};
-static const printenv_t * const all_printenv[] = {&env_x86, &env_x64, &env_win40}; +#ifdef __i386__ +#define env_arch env_x86 +#elif defined __x86_64__ +#define env_arch env_x64 +#elif defined __arm__ +#define env_arch env_arm +#elif defined __aarch64__ +#define env_arch env_arm64 +#else +#error not defined for this cpu +#endif + +static const printenv_t * const all_printenv[] = {&env_x86, &env_x64, &env_arm, &env_arm64, &env_win40};
/****************************************************************** * validate the user-supplied printing-environment [internal] @@ -355,7 +373,7 @@ static const printenv_t * validate_envW(LPCWSTR env) } else { - result = (GetVersion() & 0x80000000) ? &env_win40 : &env_x86; + result = (GetVersion() & 0x80000000) ? &env_win40 : &env_arch; } TRACE("using %p: %s\n", result, debugstr_w(result ? result->envname : NULL));
On Sat, Oct 16, 2021 at 12:10:02PM -0500, Esme Povirk wrote:
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51815
Signed-off-by: Esme Povirk esme@codeweavers.com
I took some liberties with the ARM environments. I haven't found an actual Windows machine with a 32-bit ARM print environment, but MS-RPRN implies that "Windows ARM" is a valid environment name.
My Windows 10 machine does have a "Windows ARM64" environment but it only has driver version 4 in the registry, not 3.
Could you split this and the next patch into two each? Firstly add the ARM environments then implement the env selection based on cpu.
I also wouldn't object to merging the winspool and localspl bits so you'd end up with two patches just split differently.
Thanks, Huw.