fix registry writing when using one of the standard keys
svn: r5799
This commit is contained in:
parent
8928f80384
commit
3b65a7a016
|
@ -1545,7 +1545,7 @@ static Scheme_Object *wxPlaySound(int argc, Scheme_Object **argv)
|
||||||
SCHEME_GUARD_FILE_READ);
|
SCHEME_GUARD_FILE_READ);
|
||||||
|
|
||||||
#ifdef wx_msw
|
#ifdef wx_msw
|
||||||
ok = PlaySound(f, NULL, async ? SND_ASYNC : SND_SYNC);
|
ok = PlaySoundW(wxWIDE_STRING(f), NULL, async ? SND_ASYNC : SND_SYNC);
|
||||||
#endif
|
#endif
|
||||||
#ifdef wx_mac
|
#ifdef wx_mac
|
||||||
{
|
{
|
||||||
|
|
|
@ -152,6 +152,64 @@ void wxInitUserResource(char *s)
|
||||||
wxUserResourceFile = s;
|
wxUserResourceFile = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wxDoResource(HKEY key, const char *entry, char **value_get, char *value_set)
|
||||||
|
{
|
||||||
|
int key_needs_close = 0, elen, sep_pos, success = 0;
|
||||||
|
unsigned long rlen;
|
||||||
|
|
||||||
|
/* Split the value name from the registry entry: */
|
||||||
|
elen = strlen(entry);
|
||||||
|
for (sep_pos = elen - 1; (sep_pos >= 0) && (entry[sep_pos] != '\\'); sep_pos -= 1) {
|
||||||
|
}
|
||||||
|
if (sep_pos >= 0) {
|
||||||
|
HKEY hKey;
|
||||||
|
char *new_entry;
|
||||||
|
|
||||||
|
new_entry = new char[sep_pos + 1];
|
||||||
|
memcpy(new_entry, entry, sep_pos);
|
||||||
|
new_entry[sep_pos] = 0;
|
||||||
|
|
||||||
|
/* Get a key for the entry: */
|
||||||
|
if (RegOpenKeyEx(key, new_entry, 0, value_get ? KEY_QUERY_VALUE : KEY_SET_VALUE, &hKey)
|
||||||
|
== ERROR_SUCCESS) {
|
||||||
|
key = hKey;
|
||||||
|
key_needs_close = 1;
|
||||||
|
} else
|
||||||
|
return FALSE;
|
||||||
|
/* name starts after the separator */
|
||||||
|
sep_pos++;
|
||||||
|
} else
|
||||||
|
sep_pos = 0;
|
||||||
|
|
||||||
|
if (value_get) {
|
||||||
|
/* Get the value. Start by finding out how big it is: */
|
||||||
|
rlen = 0;
|
||||||
|
if (RegQueryValueEx(key, entry XFORM_OK_PLUS sep_pos, NULL, NULL, NULL,
|
||||||
|
&rlen) == ERROR_SUCCESS) {
|
||||||
|
char *res;
|
||||||
|
res = new char[rlen + 1];
|
||||||
|
if (RegQueryValueEx(key, entry XFORM_OK_PLUS sep_pos, NULL, NULL,
|
||||||
|
(unsigned char *)res, &rlen) == ERROR_SUCCESS) {
|
||||||
|
res[rlen + 1] = 0;
|
||||||
|
*value_get = res;
|
||||||
|
success = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (RegSetValueEx(key, entry XFORM_OK_PLUS sep_pos, 0,
|
||||||
|
REG_SZ, (BYTE *)value_set, strlen(value_set))
|
||||||
|
== ERROR_SUCCESS) {
|
||||||
|
success = 1;
|
||||||
|
} else
|
||||||
|
success = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key_needs_close)
|
||||||
|
RegCloseKey(key);
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
Bool wxWriteResource(const char *section, const char *entry, char *value, const char *file)
|
Bool wxWriteResource(const char *section, const char *entry, char *value, const char *file)
|
||||||
{
|
{
|
||||||
HKEY key;
|
HKEY key;
|
||||||
|
@ -167,10 +225,7 @@ Bool wxWriteResource(const char *section, const char *entry, char *value, const
|
||||||
#undef TRY_HKEY
|
#undef TRY_HKEY
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
if (RegSetValue(key, entry, REG_SZ, value, strlen(value)) == ERROR_SUCCESS) {
|
return wxDoResource(key, entry, NULL, value);
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
} else {
|
} else {
|
||||||
if (file) {
|
if (file) {
|
||||||
char *naya;
|
char *naya;
|
||||||
|
@ -237,50 +292,7 @@ Bool wxGetResource(const char *section, const char *entry, char **value, const c
|
||||||
#undef TRY_HKEY
|
#undef TRY_HKEY
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
int key_needs_close = 0, elen, sep_pos, success = 0;
|
return wxDoResource(key, entry, value, NULL);
|
||||||
unsigned long rlen;
|
|
||||||
|
|
||||||
/* Split the value name from the registry entry: */
|
|
||||||
elen = strlen(entry);
|
|
||||||
for (sep_pos = elen - 1; (sep_pos >= 0) && (entry[sep_pos] != '\\'); sep_pos -= 1) {
|
|
||||||
}
|
|
||||||
if (sep_pos >= 0) {
|
|
||||||
HKEY hKey;
|
|
||||||
char *new_entry;
|
|
||||||
|
|
||||||
new_entry = new char[sep_pos + 1];
|
|
||||||
memcpy(new_entry, entry, sep_pos);
|
|
||||||
new_entry[sep_pos] = 0;
|
|
||||||
|
|
||||||
/* Get a key for the entry: */
|
|
||||||
if (RegOpenKeyEx(key, new_entry, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
|
|
||||||
key = hKey;
|
|
||||||
key_needs_close = 1;
|
|
||||||
} else
|
|
||||||
return FALSE;
|
|
||||||
/* name starts after the separator */
|
|
||||||
sep_pos++;
|
|
||||||
} else
|
|
||||||
sep_pos = 0;
|
|
||||||
|
|
||||||
/* Get the value. Start by finding out how big it is: */
|
|
||||||
rlen = 0;
|
|
||||||
if (RegQueryValueEx(key, entry XFORM_OK_PLUS sep_pos, NULL, NULL, NULL,
|
|
||||||
&rlen) == ERROR_SUCCESS) {
|
|
||||||
char *res;
|
|
||||||
res = new char[rlen + 1];
|
|
||||||
if (RegQueryValueEx(key, entry XFORM_OK_PLUS sep_pos, NULL, NULL,
|
|
||||||
(unsigned char *)res, &rlen) == ERROR_SUCCESS) {
|
|
||||||
res[rlen + 1] = 0;
|
|
||||||
*value = res;
|
|
||||||
success = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key_needs_close)
|
|
||||||
RegCloseKey(key);
|
|
||||||
|
|
||||||
return success;
|
|
||||||
} else {
|
} else {
|
||||||
static const char defunkt[] = "$$default";
|
static const char defunkt[] = "$$default";
|
||||||
int no_file = !file;
|
int no_file = !file;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user