From 89307edbce8c9ace68a48d83ab9dfb6994209891 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 11 Apr 2012 17:54:36 -0600 Subject: [PATCH] ffi/unsafe/com: avoid inclusion of no-error result code in error messages Merge to 5.3 --- collects/ffi/unsafe/private/win32.rkt | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/collects/ffi/unsafe/private/win32.rkt b/collects/ffi/unsafe/private/win32.rkt index f954871e5e..548af4a2ab 100644 --- a/collects/ffi/unsafe/private/win32.rkt +++ b/collects/ffi/unsafe/private/win32.rkt @@ -169,17 +169,20 @@ [scode _SCODE])) (define (windows-error str raw-scode) - (define size 1024) - (define buf (make-bytes size)) - (define scode (if (negative? raw-scode) - (bitwise-and #xFFFFFFFF raw-scode) - raw-scode)) - (define len (FormatMessageW FORMAT_MESSAGE_FROM_SYSTEM #f scode 0 buf (quotient size 2))) - (if (positive? len) - (error (format "~a (~x; ~a)" str scode (regexp-replace #rx"[\r\n]+$" - (cast buf _pointer _string/utf-16) - ""))) - (error (format "~a (~x)" str scode)))) + (if (zero? raw-scode) + (error str) + (let () + (define size 1024) + (define buf (make-bytes size)) + (define scode (if (negative? raw-scode) + (bitwise-and #xFFFFFFFF raw-scode) + raw-scode)) + (define len (FormatMessageW FORMAT_MESSAGE_FROM_SYSTEM #f scode 0 buf (quotient size 2))) + (if (positive? len) + (error (format "~a (~x; ~a)" str scode (regexp-replace #rx"[\r\n]+$" + (cast buf _pointer _string/utf-16) + ""))) + (error (format "~a (~x)" str scode)))))) (define E_NOINTERFACE #x80004002)