From: Tietew Date: 2002-01-21T15:34:49+09:00 Subject: [ruby-dev:15740] Re: win32/registry.rb (Re: [patch] resolv.rb for win32 platform) On Mon, 21 Jan 2002 13:32:20 +0900 In article <20020121132319.C46A.USA@osb.att.ne.jp> [[ruby-dev:15732] Re: win32/registry.rb (Re: [patch] resolv.rb for win32 platform)] "U.Nakamura" wrote: > + type, data = reg.read('DataBasePath') > + case type > + when Win32::Registry::REG_EXPAND_SZ > + path = data.gsub(/%([^%]+)%/) {ENV[$1]} > + when Win32::Registry::REG_SZ > + path = data > + else > + raise TypeError, "unexpected type #{type} (expect string)" > + end これを見て Registry#read_s_expand を新設してみました。 path = reg.read_s_expand('DataBasePath') でいけるようになります。 あと,先頭のドキュメントとマッチしてなかった箇所の修正とバグ1カ 所。 --- registry.rb.orig2 Sun Jan 20 22:09:19 2002 +++ registry.rb Mon Jan 21 15:15:32 2002 @@ -79,5 +79,8 @@ Read a registry value named ((|name|)) and return its value data. - If its value type is neither REG_SZ nor REG_DWORD, raises TypeError. + If value type is REG_SZ or REG_DWORD, returns value data. + If value type is REG_EXPAND_SZ, returns value data whose environment + variables are replaced. + Otherwise, raises TypeError. --- Registry#read_s(name) @@ -89,4 +92,10 @@ If the values type does not match, raises TypeError. +--- Registry#read_s_expand(name) + Read a REG_SZ or REG_EXPAND_SZ registry value named ((|name|)). + + If the value type is REG_EXPAND_SZ, environment variables are replaced. + Unless the value type is REG_SZ or REG_EXPAND_SZ, raises TypeError. + --- Registry#write(name, type, data) Write ((|data|)) to a registry value named ((|name|)). @@ -499,5 +508,5 @@ def keys keys_ary = [] - each_key { |key| keys_ary << key } + each_key { |key,| keys_ary << key } keys_ary end @@ -527,4 +536,6 @@ when REG_SZ, REG_DWORD data + when REG_EXPAND_SZ + expand_env(data) else raise TypeError, "sorry, you muse use `read' method" @@ -538,4 +549,15 @@ data end + def read_s_expand(name) + type, data = read(name) + case type + when REG_SZ + data + when REG_EXPAND_SZ + expand_env(data) + else + raise TypeError, "unexpected type #{type} (expect string)" + end + end def read_i(name) type, data = read(name) @@ -552,4 +574,8 @@ data end + def expand_env(value) + value.gsub(/%(.+?)%/) { ENV[$1] || $& } + end + private :expand_env def write(name, type, data) @@ -601,20 +627,20 @@ alias delete delete_value - def delete_key(name) - begin - API.EnumKey @hkey, 0 - rescue Error - return API.DeleteKey(@hkey, name) - end - raise Error.new(5) ## ERROR_ACCESS_DENIED - end - - def delete_key_r(name) - open(name, KEY_ALL_ACCESS) do |reg| - reg.each_key do |key,| - reg.delete_key_r(key) + def delete_key(name, recursive = false) + if recursive + open(name, KEY_ALL_ACCESS) do |reg| + reg.each_key do |key,| + reg.delete_key_r(key) + end + end + API.DeleteKey(@hkey, name) + else + begin + API.EnumKey @hkey, 0 + rescue Error + return API.DeleteKey(@hkey, name) end + raise Error.new(5) ## ERROR_ACCESS_DENIED end - API.DeleteKey(@hkey, name) end —[ Tietew ]—————————————————————————— メ : tietew@tietew.net / tietew@raug.net / tietew@masuclub.net ホペ: http://www.tietew.net/ Tietew Windows Lab. http://www.masuclub.net/ 鱒倶楽部 指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA