Skip to content

Commit

Permalink
[project @ 2005-04-25 13:25:08 by simonmar]
Browse files Browse the repository at this point in the history
Only ftruncate() regular files.
  • Loading branch information
simonmar committed Apr 25, 2005
1 parent e225c62 commit e47bbdf
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions GHC/Handle.hs
Expand Up @@ -813,15 +813,21 @@ openFile' filepath mode binary =
throwErrnoIfMinus1Retry "openFile"
(c_open f (fromIntegral oflags) 0o666)

h <- openFd fd Nothing False filepath mode binary
fd_type <- fdType fd

h <- openFd fd (Just fd_type) False filepath mode binary
`catchException` \e -> do c_close (fromIntegral fd); throw e
-- NB. don't forget to close the FD if openFd fails, otherwise
-- this FD leaks.
-- ASSERT: if we just created the file, then openFd won't fail
-- (so we don't need to worry about removing the newly created file
-- in the event of an error).

#ifndef mingw32_HOST_OS
if mode == WriteMode
-- we want to truncate() if this is an open in WriteMode, but only
-- if the target is a RegularFile. ftruncate() fails on special files
-- like /dev/null.
if mode == WriteMode && fd_type == RegularFile
then throwErrnoIf (/=0) "openFile"
(c_ftruncate (fromIntegral fd) 0)
else return 0
Expand Down

0 comments on commit e47bbdf

Please sign in to comment.