From d918b3be4f64e0d9faa6a13c3761f54d2bf57b51 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 11 Sep 2009 15:30:47 +0000 Subject: [PATCH] fix endianness of file creator & type (PR 10424) svn: r15972 --- src/mred/wxs/wxscheme.cxx | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/mred/wxs/wxscheme.cxx b/src/mred/wxs/wxscheme.cxx index 66338b8d8b..655e88645a 100644 --- a/src/mred/wxs/wxscheme.cxx +++ b/src/mred/wxs/wxscheme.cxx @@ -1918,18 +1918,44 @@ static Scheme_Object *file_type_and_creator(int argc, Scheme_Object **argv) err = FSpGetFInfo(&spec, &info); if (!err) { if (argc > 1) { - info.fdCreator = *(unsigned long *)SCHEME_BYTE_STR_VAL(argv[1]); - info.fdType = *(unsigned long *)SCHEME_BYTE_STR_VAL(argv[2]); + Scheme_Object *proc; + Scheme_Object *a[3], *v; + + proc = scheme_builtin_value("integer-bytes->integer"); + + a[0] = argv[1]; + a[1] = scheme_false; + a[2] = scheme_true; + v = _scheme_apply(proc, 3, a); + scheme_get_unsigned_int_val(v, &info.fdCreator); + + a[0] = argv[2]; + v = _scheme_apply(proc, 3, a); + scheme_get_unsigned_int_val(v, &info.fdType); + err = FSpSetFInfo(&spec, &info); if (!err) return scheme_void; write_failed = 1; } else { - Scheme_Object *a[2]; + Scheme_Object *proc; + Scheme_Object *a[4], *s1, *s2; + + proc = scheme_builtin_value("integer->integer-bytes"); + + a[0] = scheme_make_integer_value_from_unsigned(info.fdCreator); + a[1] = scheme_make_integer(4); + a[2] = scheme_false; + a[3] = scheme_true; + s1 = _scheme_apply(proc, 4, a); + + a[0] = scheme_make_integer_value_from_unsigned(info.fdType); + s2 = _scheme_apply(proc, 4, a); + + a[0] = s1; + a[1] = s2; - a[0] = scheme_make_sized_byte_string((char *)&info.fdCreator, 4, 1); - a[1] = scheme_make_sized_byte_string((char *)&info.fdType, 4, 1); return scheme_values(2, a); } }