[GHC] #7985: Allow openFile on unknown file type

GHC ghc-devs at haskell.org
Fri Feb 12 23:32:36 UTC 2016


#7985: Allow openFile on unknown file type
-------------------------------------+-------------------------------------
        Reporter:  singpolyma        |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Core Libraries    |              Version:  7.6.3
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by ekmett):

 > Just guessing once and for all that files of unknown type are seekable
 (or not seekable) doesn't seem right.

 We ''could'' default to merely claiming a `Stream` as a reasonably safe
 default.

 This makes the fewest assumptions about supported operations, and would
 give back `False` for unknown seekability.

 This is conservative, but would allow users to at least open and stream
 content to/from such devices. If users later can point to specific exotic
 non-posix device types that support seeking then we could toggle on
 support for them on a case by case basis.

 This would likely let us simplify the `statGetType` logic a great deal to
 something like:

 {{{#!hs
 statGetType :: Ptr CStat -> IO IODeviceType
 statGetType p_stat = do
   c_mode <- st_mode p_stat :: IO CMode
   case () of
       _ | s_isdir c_mode        -> return Directory
         | s_isreg c_mode        -> return RegularFile
         | s_isblk c_mode        -> return RawDevice
         | otherwise             -> return Stream
 }}}

 Another, far less desirable, alternative would be to add a new
 `IODeviceType` and call `ioe_unsupportedOperation` when you attempt to
 call `hIsSeekable` on such a device, but it only delays the unexpected
 bottom, and seems like it would rely on `seek` being implemented in a
 rather uniform manner across devices across platforms, which doesn't fit
 with my understanding of the world.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/7985#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list