MysterX repairs

Merge to 5.2.1
This commit is contained in:
Matthew Flatt 2012-01-12 08:17:51 -07:00 committed by Matthew Flatt
parent 45d72785de
commit 84d66ca8fe

View File

@ -72,7 +72,8 @@ static void GC_BOX_DONE(void *v) {
static int is_member(Scheme_Object *a, Scheme_Object *l) { static int is_member(Scheme_Object *a, Scheme_Object *l) {
while (!SCHEME_NULLP(l)) { while (!SCHEME_NULLP(l)) {
if (SAME_OBJ(a, SCHEME_CAR(l))) return 1; if (scheme_equal(a, SCHEME_CAR(l))) return 1;
l = SCHEME_CDR(l);
} }
return 0; return 0;
} }
@ -981,12 +982,12 @@ Scheme_Object *mx_set_coclass(int argc, Scheme_Object **argv)
XFORM_NONGCING static int get_wow_flag(int pass) XFORM_NONGCING static int get_wow_flag(int pass)
{ {
#ifndef _WIN64 #ifdef _WIN64
/* Try 64-bit first, but fall back to 32-bit keys */ /* Try 64-bit first, but fall back to 32-bit keys */
# define NUM_WOW_PASSES 1 # define NUM_WOW_PASSES 2
return ((pass == 0) ? KEY_WOW64_64KEY : KEY_WOW64_32KEY); return ((pass == 0) ? KEY_WOW64_64KEY : KEY_WOW64_32KEY);
#else #else
# define NUM_WOW_PASSES 0 # define NUM_WOW_PASSES 1
return 0; return 0;
#endif #endif
} }
@ -1017,8 +1018,10 @@ Scheme_Object *mx_coclass(int argc, Scheme_Object **argv)
// use CLSID to rummage through Registry to find coclass // use CLSID to rummage through Registry to find coclass
for (pass = 0; pass < NUM_WOW_PASSES; pass++) { for (pass = 0; pass < NUM_WOW_PASSES; pass++) {
int wow;
wow = get_wow_flag(pass);
result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", (DWORD)0, result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", (DWORD)0,
KEY_READ | get_wow_flag(pass), KEY_READ | wow,
&hkey); &hkey);
if (result != ERROR_SUCCESS) if (result != ERROR_SUCCESS)
@ -1051,7 +1054,7 @@ Scheme_Object *mx_coclass(int argc, Scheme_Object **argv)
continue; continue;
// open subkey // open subkey
result = RegOpenKeyEx(hkey, clsIdBuffer, (DWORD)0, result = RegOpenKeyEx(hkey, clsIdBuffer, (DWORD)0,
KEY_READ | get_wow_flag(pass), KEY_READ | wow,
&hsubkey); &hsubkey);
if (result != ERROR_SUCCESS) if (result != ERROR_SUCCESS)
scheme_signal_error("coclass: Error obtaining coclass value"); scheme_signal_error("coclass: Error obtaining coclass value");
@ -3729,7 +3732,8 @@ void unmarshalVariant(Scheme_Object *val, VARIANTARG *pVariantArg)
break; break;
case VT_VARIANT | VT_BYREF : case VT_VARIANT | VT_BYREF :
SCHEME_BOX_VAL(val) = variantToSchemeObject(pVariantArg->pvarVal); v = variantToSchemeObject(pVariantArg->pvarVal);
SCHEME_BOX_VAL(val) = v;
free(pVariantArg->pvarVal); free(pVariantArg->pvarVal);
break; break;
@ -4539,8 +4543,10 @@ Scheme_Object *mx_all_clsid(int argc, Scheme_Object **argv, char **attributes)
retval = scheme_null; retval = scheme_null;
for (pass = 0; pass < NUM_WOW_PASSES; pass++) { for (pass = 0; pass < NUM_WOW_PASSES; pass++) {
int wow;
wow = get_wow_flag(pass);
result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", (DWORD)0, result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "CLSID", (DWORD)0,
KEY_READ | get_wow_flag(pass), KEY_READ | wow,
&hkey); &hkey);
if (result != ERROR_SUCCESS) return retval; if (result != ERROR_SUCCESS) return retval;
@ -4563,7 +4569,7 @@ Scheme_Object *mx_all_clsid(int argc, Scheme_Object **argv, char **attributes)
// open subkey // open subkey
result = RegOpenKeyEx(hkey, clsidBuffer, (DWORD)0, result = RegOpenKeyEx(hkey, clsidBuffer, (DWORD)0,
KEY_READ | get_wow_flag(pass), KEY_READ | wow,
&hsubkey); &hsubkey);
if (result != ERROR_SUCCESS) if (result != ERROR_SUCCESS)