Merge branch 'master' into path
authorAlexis Laferrière <alexis.laf@xymus.net>
Sat, 13 Dec 2014 19:35:06 +0000 (14:35 -0500)
committerAlexis Laferrière <alexis.laf@xymus.net>
Sat, 13 Dec 2014 19:35:06 +0000 (14:35 -0500)
1  2 
lib/a_star.nit
lib/standard/file.nit

diff --cc lib/a_star.nit
Simple merge
@@@ -102,10 -135,14 +136,14 @@@ en
  class OFStream
        super FStream
        super OStream
 -      
 +
        redef fun write(s)
        do
-               assert _is_writable
+               if last_error != null then return
+               if not _is_writable then
+                       last_error = new IOError("Cannot write to non-writable stream")
+                       return
+               end
                if s isa FlatText then
                        write_native(s.to_cstring, s.length)
                else
  
        redef fun close
        do
-               _file.io_close
+               if _file.address_is_null then
+                       if last_error != null then return
+                       last_error = new IOError("Cannot close unopened write stream")
+                       _is_writable = false
+                       return
+               end
+               var i = _file.io_close
+               if i != 0 then
+                       last_error = new IOError("Close failed due to error {sys.errno.strerror}")
+               end
                _is_writable = false
        end
        redef var is_writable = false
 -      
 +
        # Write `len` bytes from `native`.
        private fun write_native(native: NativeString, len: Int)
        do
                var err = _file.io_write(native, len)
                if err != len then
                        # Big problem
-                       printn("Problem in writing : ", err, " ", len, "\n")
+                       last_error = new IOError("Problem in writing : {err} {len} \n")
                end
        end
 -      
 +
        # Open the file at `path` for writing.
        init open(path: String)
        do
@@@ -832,8 -700,12 +917,12 @@@ private extern class NativeFile `{ FILE
        fun io_read(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_read_2"
        fun io_write(buf: NativeString, len: Int): Int is extern "file_NativeFile_NativeFile_io_write_2"
        fun io_close: Int is extern "file_NativeFile_NativeFile_io_close_0"
 -      fun file_stat: FileStat is extern "file_NativeFile_NativeFile_file_stat_0"
 +      fun file_stat: NativeFileStat is extern "file_NativeFile_NativeFile_file_stat_0"
        fun fileno: Int `{ return fileno(recv); `}
+       # Flushes the buffer, forcing the write operation
+       fun flush: Int is extern "fflush"
+       # Used to specify how the buffering will be handled for the current stream.
+       fun set_buffering_type(buf_length: Int, mode: Int): Int is extern "file_NativeFile_NativeFile_set_buffering_type_0"
  
        new io_open_read(path: NativeString) is extern "file_NativeFileCapable_NativeFileCapable_io_open_read_1"
        new io_open_write(path: NativeString) is extern "file_NativeFileCapable_NativeFileCapable_io_open_write_1"