on master help sign in
expanded file modes
6203dc7Aistis Raulinaitis
libs/prelude/Prelude/File.idr+21−10
@@ -88,16 +88,31 @@ validFile (FHandle h) = do x <- nullPtr h
88 return (not x)
88 return (not x)
89
89
90||| Modes for opening files
90||| Modes for opening files
91−data Mode = Read | Write | ReadWrite
91+data Mode = Read | WriteTruncate | Append | ReadWrite | ReadWriteTruncate | ReadAppend
92+
93+Write : Mode
94+Write = WriteTruncate
95+%deprecate Write "Please use WriteTruncate instead."
96+
97+modeStr : Mode -> String
98+modeStr Read = "r"
99+modeStr WriteTruncate = "w"
100+modeStr Append = "a"
101+modeStr ReadWrite = "r+"
102+modeStr ReadWriteTruncate = "w+"
103+modeStr ReadAppend = "a+"
92
104
93||| Open a file
105||| Open a file
94||| @ f the filename
106||| @ f the filename
95−||| @ m the mode; either Read, Write, or ReadWrite
107+||| @ m the mode; either Read, WriteTruncate, Append, ReadWrite, ReadWriteTruncate, or ReadAppend
96openFile : (f : String) -> (m : Mode) -> IO (Either FileError File)
108openFile : (f : String) -> (m : Mode) -> IO (Either FileError File)
97−openFile f m = fopen f (modeStr m) where
109+openFile f m = fopen f (modeStr m)
98− modeStr Read = "r"
110+
99− modeStr Write = "w"
111+||| Open a file using C11 extended modes.
100− modeStr ReadWrite = "r+"
112+||| @ f the filename
113+||| @ m the mode; either Read, WriteTruncate, Append, ReadWrite, ReadWriteTruncate, or ReadAppend
114+openFileX : (f : String) -> (m : Mode) -> IO (Either FileError File)
115+openFileX f m = fopen f $ modeStr m ++ "x"
101
116
102do_fclose : Ptr -> IO ()
117do_fclose : Ptr -> IO ()
103do_fclose h = foreign FFI_C "fileClose" (Ptr -> IO ()) h
118do_fclose h = foreign FFI_C "fileClose" (Ptr -> IO ()) h
@@ -126,10 +141,6 @@ popen f m = do ptr <- do_popen f (modeStr m)
126 then do err <- getFileError
141 then do err <- getFileError
127 return (Left err)
142 return (Left err)
128 else return (Right (FHandle ptr))
143 else return (Right (FHandle ptr))
129− where
130− modeStr Read = "r"
131− modeStr Write = "w"
132− modeStr ReadWrite = "r+"
133
144
134pclose : File -> IO ()
145pclose : File -> IO ()
135pclose (FHandle h) = foreign FFI_C "pclose" (Ptr -> IO ()) h
146pclose (FHandle h) = foreign FFI_C "pclose" (Ptr -> IO ()) h
test/io001/test004.idr+1−1
@@ -17,7 +17,7 @@ dumpFile fn = do { Right h <- openFile fn Read
17 closeFile h }
17 closeFile h }
18
18
19main : IO ()
19main : IO ()
20−main = do { Right h <- openFile "testfile" Write
20+main = do { Right h <- openFile "testfile" WriteTruncate
21 fPutStr h "Hello!\nWorld!\n...\n3\n4\nLast line\n"
21 fPutStr h "Hello!\nWorld!\n...\n3\n4\nLast line\n"
22 closeFile h
22 closeFile h
23 putStrLn "Reading testfile"
23 putStrLn "Reading testfile"