aboutsummaryrefslogtreecommitdiff
path: root/iolib.c
diff options
context:
space:
mode:
Diffstat (limited to 'iolib.c')
-rw-r--r--iolib.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/iolib.c b/iolib.c
index 37ad50ce..25bf4fd0 100644
--- a/iolib.c
+++ b/iolib.c
@@ -3,7 +3,7 @@
3** Input/output library to LUA 3** Input/output library to LUA
4*/ 4*/
5 5
6char *rcs_iolib="$Id: iolib.c,v 1.28 1995/11/10 17:55:48 roberto Exp roberto $"; 6char *rcs_iolib="$Id: iolib.c,v 1.29 1995/11/10 18:32:59 roberto Exp roberto $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <ctype.h> 9#include <ctype.h>
@@ -289,12 +289,19 @@ static void io_read (void)
289 switch (getformat(lua_check_string(1, "read"), &dummy1, &m, &dummy2)) 289 switch (getformat(lua_check_string(1, "read"), &dummy1, &m, &dummy2))
290 { 290 {
291 case 's': 291 case 's':
292 {
293 char *s;
292 if (m < 0) 294 if (m < 0)
293 read_until_blank(); 295 read_until_blank();
294 else 296 else
295 read_m(m); 297 read_m(m);
296 lua_pushstring(add_char(0)); 298 s = add_char(0);
299 if ((m >= 0 && strlen(s) == m) || (m < 0 && strlen(s) > 0))
300 lua_pushstring(s);
301 else
302 lua_pushnil();
297 break; 303 break;
304 }
298 305
299 case 'i': /* can read as float, since it makes no difference to Lua */ 306 case 'i': /* can read as float, since it makes no difference to Lua */
300 case 'f': 307 case 'f':
@@ -324,8 +331,13 @@ static void io_read (void)
324*/ 331*/
325static void io_readuntil (void) 332static void io_readuntil (void)
326{ 333{
327 int del = *lua_check_string(1, "readuntil"); 334 int del, c;
328 int c = read_until_char(del); 335 lua_Object p = lua_getparam(1);
336 if (p == LUA_NOOBJECT || lua_isnil(p))
337 del = EOF;
338 else
339 del = *lua_check_string(1, "readuntil");
340 c = read_until_char(del);
329 if (c != EOF) ungetc(c,in); 341 if (c != EOF) ungetc(c,in);
330 lua_pushstring(add_char(0)); 342 lua_pushstring(add_char(0));
331} 343}
@@ -560,7 +572,7 @@ void lua_printstack (FILE *f)
560 char *name; 572 char *name;
561 int currentline; 573 int currentline;
562 fprintf(f, "\t"); 574 fprintf(f, "\t");
563 switch (*getobjname(func, &name)) 575 switch (*lua_getobjname(func, &name))
564 { 576 {
565 case 'g': 577 case 'g':
566 fprintf(f, "function %s", name); 578 fprintf(f, "function %s", name);