浏览代码

Tiny refactoring in io.flush

Roberto Ierusalimschy 3 月之前
父节点
当前提交
620f49a7aa
共有 2 个文件被更改,包括 25 次插入7 次删除
  1. 7 6
      liolib.c
  2. 18 1
      testes/files.lua

+ 7 - 6
liolib.c

@@ -732,18 +732,19 @@ static int f_setvbuf (lua_State *L) {
 }
 
 
-
-static int io_flush (lua_State *L) {
-  FILE *f = getiofile(L, IO_OUTPUT);
+static int aux_flush (lua_State *L, FILE *f) {
   errno = 0;
   return luaL_fileresult(L, fflush(f) == 0, NULL);
 }
 
 
 static int f_flush (lua_State *L) {
-  FILE *f = tofile(L);
-  errno = 0;
-  return luaL_fileresult(L, fflush(f) == 0, NULL);
+  return aux_flush(L, tofile(L));
+}
+
+
+static int io_flush (lua_State *L) {
+  return aux_flush(L, getiofile(L, IO_OUTPUT));
 }
 
 

+ 18 - 1
testes/files.lua

@@ -347,7 +347,7 @@ collectgarbage()
 
 assert(io.write(' ' .. t .. ' '))
 assert(io.write(';', 'end of file\n'))
-f:flush(); io.flush()
+assert(f:flush()); assert(io.flush())
 f:close()
 print('+')
 
@@ -461,6 +461,23 @@ do   -- testing closing file in line iteration
 end
 
 
+do print("testing flush")
+  local f = io.output("/dev/null")
+  assert(f:write("abcd"))   -- write to buffer
+  assert(f:flush())         -- write to device
+  assert(f:write("abcd"))   -- write to buffer
+  assert(io.flush())        -- write to device
+  assert(f:close())
+
+  local f = io.output("/dev/full")
+  assert(f:write("abcd"))   -- write to buffer
+  assert(not f:flush())     -- cannot write to device
+  assert(f:write("abcd"))   -- write to buffer
+  assert(not io.flush())    -- cannot write to device
+  assert(f:close())
+end
+
+
 -- test for multipe arguments in 'lines'
 io.output(file); io.write"0123456789\n":close()
 for a,b in io.lines(file, 1, 1) do