summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2015-05-26 12:24:18 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2015-05-26 12:24:18 -0700
commit468522251daab13499c1b329e684b3af524737e9 (patch)
tree486bca789e39bb911c675671582e515fb88335b9
parent4d1e0dcaded37365e41c567e2b31fdd34e8695ed (diff)
parent04dedc1a69eb32d2cbd636808214a1079a2690a3 (diff)
downloadchef-468522251daab13499c1b329e684b3af524737e9.tar.gz
Merge pull request #3406 from chef/lcg/fix-windows-path-bug
add unicode WM_SETTINGCHANGE broadcast
-rw-r--r--CHANGELOG.md4
-rw-r--r--lib/chef/mixin/windows_env_helper.rb13
2 files changed, 13 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 12cc902b34..4ae41072b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,8 @@
## Unreleased
* [pr#3397](https://github.com/chef/chef/pull/3397): Validate owner exists in directory resources
-* [pr#3418](https://github.com/chef/chef/pull/3418): Add `shell_out` mixin to Chef::Resource class
-for use in `not_if`/`only_if` conditionals, etc.
+* [pr#3418](https://github.com/chef/chef/pull/3418): Add `shell_out` mixin to Chef::Resource class for use in `not_if`/`only_if` conditionals, etc.
+* [pr#3406](https://github.com/chef/chef/pull/3406): Add wide-char 'Environment' to `broadcast_env_change` mixin for setting windows environment variables
## 12.4.0
diff --git a/lib/chef/mixin/windows_env_helper.rb b/lib/chef/mixin/windows_env_helper.rb
index 490b235065..a126801a28 100644
--- a/lib/chef/mixin/windows_env_helper.rb
+++ b/lib/chef/mixin/windows_env_helper.rb
@@ -21,11 +21,11 @@ require 'chef/exceptions'
require 'chef/platform/query_helpers'
require 'chef/win32/error' if Chef::Platform.windows?
require 'chef/win32/api/system' if Chef::Platform.windows?
+require 'chef/win32/api/unicode' if Chef::Platform.windows?
class Chef
module Mixin
module WindowsEnvHelper
-
if Chef::Platform.windows?
include Chef::ReservedNames::Win32::API::System
end
@@ -39,7 +39,16 @@ class Chef
def broadcast_env_change
flags = SMTO_BLOCK | SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG
- SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, FFI::MemoryPointer.from_string('Environment').address, flags, 5000, nil)
+ # for why two calls, see:
+ # http://stackoverflow.com/questions/4968373/why-doesnt-sendmessagetimeout-update-the-environment-variables
+ if ( SendMessageTimeoutA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, FFI::MemoryPointer.from_string('Environment').address, flags, 5000, nil) == 0 )
+ Chef::ReservedNames::Win32::Error.raise!
+ end
+ if ( SendMessageTimeoutW(HWND_BROADCAST, WM_SETTINGCHANGE, 0, FFI::MemoryPointer.from_string(
+ Chef::ReservedNames::Win32::Unicode.utf8_to_wide('Environment')
+ ).address, flags, 5000, nil) == 0 )
+ Chef::ReservedNames::Win32::Error.raise!
+ end
end
def expand_path(path)