Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2009-10-20 18:54:47 +0400
committerCorinna Vinschen <corinna@vinschen.de>2009-10-20 18:54:47 +0400
commita4f31f1b1bddee21ab0200bf2a3c4eb472c5ad0f (patch)
treee745ce31e3e578f4c2d50fe42915790c30953db8 /winsup/cygwin/registry.cc
parentc94a1006c62d655fd44abcd527ebfdbe4f36702a (diff)
* 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.
Diffstat (limited to 'winsup/cygwin/registry.cc')
-rw-r--r--winsup/cygwin/registry.cc66
1 files changed, 60 insertions, 6 deletions
diff --git a/winsup/cygwin/registry.cc b/winsup/cygwin/registry.cc
index 47f8642f1..1fdf20a79 100644
--- a/winsup/cygwin/registry.cc
+++ b/winsup/cygwin/registry.cc
@@ -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