OSDN Git Service

* registry.cc (reg_key::get_int): Add alternative implementation
authorcorinna <corinna>
Tue, 20 Oct 2009 14:54:47 +0000 (14:54 +0000)
committercorinna <corinna>
Tue, 20 Oct 2009 14:54:47 +0000 (14:54 +0000)
taking WCHAR strings.
(reg_key::set_int): Ditto.
(reg_key::get_string): Ditto.
(reg_key::set_string): Ditto.
* registry.h (struct reg_key): Add prototypes for added methods.

winsup/cygwin/ChangeLog
winsup/cygwin/registry.cc
winsup/cygwin/registry.h

index aca36f9..4e1878e 100644 (file)
@@ -1,5 +1,14 @@
 2009-10-20  Corinna Vinschen  <corinna@vinschen.de>
 
+       * registry.cc (reg_key::get_int): Add alternative implementation
+       taking WCHAR strings.
+       (reg_key::set_int): Ditto.
+       (reg_key::get_string): Ditto.
+       (reg_key::set_string): Ditto.
+       * registry.h (struct reg_key): Add prototypes for added methods.
+
+2009-10-20  Corinna Vinschen  <corinna@vinschen.de>
+
        * smallprint.cc (__small_vsprintf): Simplify UNICODE string handling
        and allow empty strings.
 
index 47f8642..1fdf20a 100644 (file)
@@ -115,8 +115,25 @@ reg_key::get_int (const char *name, int def)
   if (key_is_invalid)
     return def;
 
-  LONG res = RegQueryValueExA (key, name, 0, &type, (unsigned char *) &dst,
-                              &size);
+  LONG res = RegQueryValueExA (key, name, 0, &type, (LPBYTE) &dst, &size);
+
+  if (type != REG_DWORD || res != ERROR_SUCCESS)
+    return def;
+
+  return dst;
+}
+
+int
+reg_key::get_int (const PWCHAR name, int def)
+{
+  DWORD type;
+  DWORD dst;
+  DWORD size = sizeof (dst);
+
+  if (key_is_invalid)
+    return def;
+
+  LONG res = RegQueryValueExW (key, name, 0, &type, (LPBYTE) &dst, &size);
 
   if (type != REG_DWORD || res != ERROR_SUCCESS)
     return def;
@@ -134,14 +151,25 @@ reg_key::set_int (const char *name, int val)
     return key_is_invalid;
 
   return (int) RegSetValueExA (key, name, 0, REG_DWORD,
-                              (unsigned char *) &value, sizeof (value));
+                              (const BYTE *) &value, sizeof (value));
+}
+
+int
+reg_key::set_int (const PWCHAR name, int val)
+{
+  DWORD value = val;
+  if (key_is_invalid)
+    return key_is_invalid;
+
+  return (int) RegSetValueExW (key, name, 0, REG_DWORD,
+                              (const BYTE *) &value, sizeof (value));
 }
 
 /* Given the current registry key, return the specific string value
    requested.  Return zero on success, non-zero on failure. */
 
 int
-reg_key::get_string (const char *name, char *dst, size_t max, const char * def)
+reg_key::get_string (const char *name, char *dst, size_t max, const char *def)
 {
   DWORD size = max;
   DWORD type;
@@ -150,13 +178,30 @@ reg_key::get_string (const char *name, char *dst, size_t max, const char * def)
   if (key_is_invalid)
     res = key_is_invalid;
   else
-    res = RegQueryValueExA (key, name, 0, &type, (unsigned char *) dst, &size);
+    res = RegQueryValueExA (key, name, 0, &type, (LPBYTE) dst, &size);
 
   if ((def != 0) && ((type != REG_SZ) || (res != ERROR_SUCCESS)))
     strcpy (dst, def);
   return (int) res;
 }
 
+int
+reg_key::get_string (const PWCHAR name, PWCHAR dst, size_t max, const PWCHAR def)
+{
+  DWORD size = max;
+  DWORD type;
+  LONG res;
+
+  if (key_is_invalid)
+    res = key_is_invalid;
+  else
+    res = RegQueryValueExW (key, name, 0, &type, (LPBYTE) dst, &size);
+
+  if ((def != 0) && ((type != REG_SZ) || (res != ERROR_SUCCESS)))
+    wcscpy (dst, def);
+  return (int) res;
+}
+
 /* Given the current registry key, set a specific string value. */
 
 int
@@ -164,10 +209,19 @@ reg_key::set_string (const char *name, const char *src)
 {
   if (key_is_invalid)
     return key_is_invalid;
-  return (int) RegSetValueExA (key, name, 0, REG_SZ, (unsigned char*) src,
+  return (int) RegSetValueExA (key, name, 0, REG_SZ, (const BYTE*) src,
                               strlen (src) + 1);
 }
 
+int
+reg_key::set_string (const PWCHAR name, const PWCHAR src)
+{
+  if (key_is_invalid)
+    return key_is_invalid;
+  return (int) RegSetValueExW (key, name, 0, REG_SZ, (const BYTE*) src,
+                              (wcslen (src) + 1) * sizeof (WCHAR));
+}
+
 /* Return the handle to key. */
 
 HKEY
index bd2f388..b14c3af 100644 (file)
@@ -30,10 +30,17 @@ public:
   int killvalue (const char *name);
 
   HKEY get_key ();
-  int get_int (const char *,int def);
-  int get_string (const char *, char *buf, size_t len, const char *def);
-  int set_string (const char *,const char *);
-  int set_int (const char *, int val);
+
+  int get_int (const char *, int);
+  int get_int (const PWCHAR, int);
+  int get_string (const char *, char *, size_t, const char *);
+  int get_string (const PWCHAR, PWCHAR, size_t, const PWCHAR);
+
+  int set_int (const char *, int);
+  int set_int (const PWCHAR, int);
+  int set_string (const char *, const char *);
+  int set_string (const PWCHAR, const PWCHAR);
+
   bool created () const {return _disposition & REG_CREATED_NEW_KEY;}
 
   ~reg_key ();