[#15625] rb_hash_initialize — Takaaki Tateishi <ttate@...>

立石です.

22 messages 2002/01/04
[#15627] Re: rb_hash_initialize — matz@... (Yukihiro Matsumoto) 2002/01/04

まつもと ゆきひろです

[#15628] Re: rb_hash_initialize — Takaaki Tateishi <ttate@...> 2002/01/04

立石です.

[#15685] undefined method `inherited' for false (NameError) — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2002/01/15
[#15686] Re: undefined method `inherited' for false (NameError) — nobu.nakada@... 2002/01/15

なかだです。

[#15757] 文字列→整数変換 — nobu.nakada@...

なかだです。

30 messages 2002/01/25

[#15830] [ 提案 ] puts, print 等を IO から分離 — UENO Katsuhiro <unnie@...>

うえのです。

14 messages 2002/01/31

[ruby-dev:15740] Re: win32/registry.rb (Re: [patch] resolv.rb for win32 platform)

From: Tietew <tietew-ml-ruby-dev@...>
Date: 2002-01-21 06:34:49 UTC
List: ruby-dev #15740
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" <usa@osb.att.ne.jp> 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

In This Thread