[GHC] #4452: Graphics.Win32.GDI.Clip.enumClipboardFormats fails
on success.
GHC
cvs-ghc at haskell.org
Sat Nov 13 16:40:58 EST 2010
#4452: Graphics.Win32.GDI.Clip.enumClipboardFormats fails on success.
----------------------------------+-----------------------------------------
Reporter: fryguybob | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: libraries (other) | Version: 6.12.3
Keywords: Win32, Clipboard | Testcase:
Blockedby: | Difficulty:
Os: Windows | Blocking:
Architecture: Unknown/Multiple | Failure: Incorrect result at runtime
----------------------------------+-----------------------------------------
Description changed by igloo:
Old description:
> According to the documentation for the Win32 EnumClipboardFormats
> function:
>
> http://msdn.microsoft.com/en-us/library/ms649038(VS.85).aspx
>
> A return value of zero is only an error if a subsequent call to
> GetLastError does not return ERROR_SUCCESS. The following code is what I
> would expect:
>
> {{{
> errorWinNotErrorSuccess :: (Num a) => String -> IO a
> errorWinNotErrorSuccess fn_name = do
> err_code <- getLastError
> if err_code == 0 then return 0 else failWith fn_name err_code
>
> failIfZeroAndNotErrorSuccess :: Num a => String -> IO a -> IO a
> failIfZeroAndNotErrorSuccess wh act = do
> v <- act
> if v == 0 then errorWinNotErrorSuccess wh else return v
>
> enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat
> enumClipboardFormats format =
> failIfZeroAndNotErrorSuccess "EnumClipboardFormats" $
> c_EnumClipboardFormats format
> }}}
>
> Instead of the current:
>
> {{{
> enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat
> enumClipboardFormats format =
> failIfZero "EnumClipboardFormats" $ c_EnumClipboardFormats format
> }}}
New description:
According to the documentation for the Win32 !EnumClipboardFormats
function:
http://msdn.microsoft.com/en-us/library/ms649038(VS.85).aspx
A return value of zero is only an error if a subsequent call to
!GetLastError does not return ERROR_SUCCESS. The following code is what I
would expect:
{{{
errorWinNotErrorSuccess :: (Num a) => String -> IO a
errorWinNotErrorSuccess fn_name = do
err_code <- getLastError
if err_code == 0 then return 0 else failWith fn_name err_code
failIfZeroAndNotErrorSuccess :: Num a => String -> IO a -> IO a
failIfZeroAndNotErrorSuccess wh act = do
v <- act
if v == 0 then errorWinNotErrorSuccess wh else return v
enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat
enumClipboardFormats format =
failIfZeroAndNotErrorSuccess "EnumClipboardFormats" $
c_EnumClipboardFormats format
}}}
Instead of the current:
{{{
enumClipboardFormats :: ClipboardFormat -> IO ClipboardFormat
enumClipboardFormats format =
failIfZero "EnumClipboardFormats" $ c_EnumClipboardFormats format
}}}
--
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4452#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the Glasgow-haskell-bugs
mailing list