From ddd7b66b61b4bda825b1b41b9d48fb6cbaa79f7e Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 27 Oct 2005 15:12:49 +0000 Subject: [PATCH] register a static, add nul terminator, fix imperative update of byte strings svn: r1173 --- src/mysterx/mysc/bstr.cxx | 17 ++++++++++------- src/mysterx/mysterx.cxx | 3 ++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/mysterx/mysc/bstr.cxx b/src/mysterx/mysc/bstr.cxx index 5be4641f50..afeb6f0de0 100644 --- a/src/mysterx/mysc/bstr.cxx +++ b/src/mysterx/mysc/bstr.cxx @@ -10,7 +10,10 @@ BSTR schemeToBSTR (Scheme_Object * obj); static LPWSTR schemeUCS4ToUTF16 (const mzchar * buffer, int nchars, long * result_length) { - return scheme_ucs4_to_utf16 (buffer, 0, nchars, NULL, 0, result_length, 0); + LPWSTR s; + s = scheme_ucs4_to_utf16 (buffer, 0, nchars, NULL, 0, result_length, 1); + s[*result_length] = 0; + return s; } static @@ -33,11 +36,9 @@ LPWSTR schemeByteStringToWideChar (Scheme_Object * obj, long * result_length) static LPWSTR schemeCharStringToWideChar (Scheme_Object * obj, long * result_length) { - return - scheme_ucs4_to_utf16 (SCHEME_CHAR_STR_VAL (obj), - 0, SCHEME_CHAR_STRLEN_VAL (obj), - NULL, 0, - result_length, 0); + return schemeUCS4ToUTF16(SCHEME_CHAR_STR_VAL (obj), + SCHEME_CHAR_STRLEN_VAL (obj), + result_length); } static @@ -190,7 +191,9 @@ void updateSchemeByteStringFromBSTR (Scheme_Object * obj, BSTR bstr) scheme_signal_error ("String updated with longer string"); long ncodes; - scheme_utf8_encode_to_buffer_len (string, nchars, NULL, 0, &ncodes); + scheme_utf8_encode_to_buffer_len (string, nchars, + SCHEME_BYTE_STR_VAL(obj), SCHEME_BYTE_STRLEN_VAL(obj), + &ncodes); SCHEME_BYTE_STRLEN_VAL(obj) = ncodes; } diff --git a/src/mysterx/mysterx.cxx b/src/mysterx/mysterx.cxx index 02ead79f34..a04a0f9bd4 100644 --- a/src/mysterx/mysterx.cxx +++ b/src/mysterx/mysterx.cxx @@ -55,7 +55,6 @@ HANDLE eventSinkMutex; const CLSID emptyClsId; static Scheme_Object *mx_omit_obj; /* omitted argument placeholder */ -static Scheme_Object *mx_name; /* module name */ /* Normally false, but when true, mysterx will marshal any scheme */ /* object it would otherwise fail to marshal by simply sticking */ @@ -4847,8 +4846,10 @@ Scheme_Object *scheme_initialize (Scheme_Env *env) HRESULT hr; Scheme_Object *mx_fun; int i; + Scheme_Object *mx_name; scheme_register_extension_global (&mx_omit_obj, sizeof (mx_omit_obj)); + scheme_register_extension_global (&scheme_date_type, sizeof (scheme_date_type)); // should not be necessary, but sometimes // this variable is not 0'd out - bug in VC++ or MzScheme?