diff options
Diffstat (limited to 'liolib.c')
-rw-r--r-- | liolib.c | 245 |
1 files changed, 122 insertions, 123 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: liolib.c,v 1.123 2001/10/02 16:41:36 roberto Exp $ | 2 | ** $Id: liolib.c,v 1.124 2001/10/26 17:33:30 roberto Exp $ |
3 | ** Standard I/O (and system) library | 3 | ** Standard I/O (and system) library |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -10,7 +10,6 @@ | |||
10 | #include <string.h> | 10 | #include <string.h> |
11 | #include <time.h> | 11 | #include <time.h> |
12 | 12 | ||
13 | #define LUA_PRIVATE | ||
14 | #include "lua.h" | 13 | #include "lua.h" |
15 | 14 | ||
16 | #include "lauxlib.h" | 15 | #include "lauxlib.h" |
@@ -40,12 +39,12 @@ int pclose(); */ | |||
40 | #define OUTFILE 1 | 39 | #define OUTFILE 1 |
41 | #define NOFILE 2 | 40 | #define NOFILE 2 |
42 | 41 | ||
43 | #define FILEHANDLE l_s("FileHandle") | 42 | #define FILEHANDLE "FileHandle" |
44 | #define CLOSEDFILEHANDLE l_s("ClosedFileHandle") | 43 | #define CLOSEDFILEHANDLE "ClosedFileHandle" |
45 | 44 | ||
46 | 45 | ||
47 | static const l_char *const filenames[] = {l_s("_INPUT"), l_s("_OUTPUT")}; | 46 | static const char *const filenames[] = {"_INPUT", "_OUTPUT"}; |
48 | static const l_char *const basicfiles[] = {l_s("_STDIN"), l_s("_STDOUT")}; | 47 | static const char *const basicfiles[] = {"_STDIN", "_STDOUT"}; |
49 | 48 | ||
50 | 49 | ||
51 | static int pushresult (lua_State *L, int i) { | 50 | static int pushresult (lua_State *L, int i) { |
@@ -77,16 +76,16 @@ static FILE *getopthandle (lua_State *L, int inout) { | |||
77 | if (p != NULL) { /* is it a userdata ? */ | 76 | if (p != NULL) { /* is it a userdata ? */ |
78 | if (!checkfile(L, 1)) { /* not a valid file handle? */ | 77 | if (!checkfile(L, 1)) { /* not a valid file handle? */ |
79 | if (strcmp(lua_type(L, 1), CLOSEDFILEHANDLE) == 0) | 78 | if (strcmp(lua_type(L, 1), CLOSEDFILEHANDLE) == 0) |
80 | luaL_argerror(L, 1, l_s("file is closed")); | 79 | luaL_argerror(L, 1, "file is closed"); |
81 | else | 80 | else |
82 | luaL_argerror(L, 1, l_s("(invalid value)")); | 81 | luaL_argerror(L, 1, "(invalid value)"); |
83 | } | 82 | } |
84 | lua_pushvalue(L, 1); lua_remove(L, 1); /* move it to stack top */ | 83 | lua_pushvalue(L, 1); lua_remove(L, 1); /* move it to stack top */ |
85 | } | 84 | } |
86 | else { /* try global value */ | 85 | else { /* try global value */ |
87 | lua_getglobal(L, filenames[inout]); | 86 | lua_getglobal(L, filenames[inout]); |
88 | if (!checkfile(L,-1)) | 87 | if (!checkfile(L,-1)) |
89 | luaL_verror(L, l_s("global variable `%.10s' is not a valid file handle"), | 88 | luaL_verror(L, "global variable `%.10s' is not a valid file handle", |
90 | filenames[inout]); | 89 | filenames[inout]); |
91 | p = (FILE *)(lua_touserdata(L, -1)); | 90 | p = (FILE *)(lua_touserdata(L, -1)); |
92 | } | 91 | } |
@@ -100,7 +99,7 @@ static void newfile (lua_State *L, FILE *f) { | |||
100 | } | 99 | } |
101 | 100 | ||
102 | 101 | ||
103 | static void newfilewithname (lua_State *L, FILE *f, const l_char *name) { | 102 | static void newfilewithname (lua_State *L, FILE *f, const char *name) { |
104 | newfile(L, f); | 103 | newfile(L, f); |
105 | lua_setglobal(L, name); | 104 | lua_setglobal(L, name); |
106 | } | 105 | } |
@@ -158,7 +157,7 @@ static int io_tmpfile (lua_State *L) { | |||
158 | 157 | ||
159 | 158 | ||
160 | 159 | ||
161 | static int io_fromto (lua_State *L, int inout, const l_char *mode) { | 160 | static int io_fromto (lua_State *L, int inout, const char *mode) { |
162 | FILE *current; | 161 | FILE *current; |
163 | if (lua_isnull(L, 1)) { | 162 | if (lua_isnull(L, 1)) { |
164 | getopthandle(L, inout); | 163 | getopthandle(L, inout); |
@@ -166,25 +165,25 @@ static int io_fromto (lua_State *L, int inout, const l_char *mode) { | |||
166 | return io_close(L); | 165 | return io_close(L); |
167 | } | 166 | } |
168 | else { | 167 | else { |
169 | const l_char *s = luaL_check_string(L, 1); | 168 | const char *s = luaL_check_string(L, 1); |
170 | current = (*s == l_c('|')) ? popen(s+1, mode) : fopen(s, mode); | 169 | current = (*s == '|') ? popen(s+1, mode) : fopen(s, mode); |
171 | return setnewfile(L, current, inout); | 170 | return setnewfile(L, current, inout); |
172 | } | 171 | } |
173 | } | 172 | } |
174 | 173 | ||
175 | 174 | ||
176 | static int io_readfrom (lua_State *L) { | 175 | static int io_readfrom (lua_State *L) { |
177 | return io_fromto(L, INFILE, l_s("r")); | 176 | return io_fromto(L, INFILE, "r"); |
178 | } | 177 | } |
179 | 178 | ||
180 | 179 | ||
181 | static int io_writeto (lua_State *L) { | 180 | static int io_writeto (lua_State *L) { |
182 | return io_fromto(L, OUTFILE, l_s("w")); | 181 | return io_fromto(L, OUTFILE, "w"); |
183 | } | 182 | } |
184 | 183 | ||
185 | 184 | ||
186 | static int io_appendto (lua_State *L) { | 185 | static int io_appendto (lua_State *L) { |
187 | FILE *current = fopen(luaL_check_string(L, 1), l_s("a")); | 186 | FILE *current = fopen(luaL_check_string(L, 1), "a"); |
188 | return setnewfile(L, current, OUTFILE); | 187 | return setnewfile(L, current, OUTFILE); |
189 | } | 188 | } |
190 | 189 | ||
@@ -208,7 +207,7 @@ static int io_appendto (lua_State *L) { | |||
208 | ** Addison-Wesley, 1993.) | 207 | ** Addison-Wesley, 1993.) |
209 | */ | 208 | */ |
210 | 209 | ||
211 | static void prep_read_until (int next[], const l_char *p, int pl) { | 210 | static void prep_read_until (int next[], const char *p, int pl) { |
212 | int i = 0; | 211 | int i = 0; |
213 | int j = -1; | 212 | int j = -1; |
214 | next[0] = -1; | 213 | next[0] = -1; |
@@ -221,8 +220,8 @@ static void prep_read_until (int next[], const l_char *p, int pl) { | |||
221 | } | 220 | } |
222 | 221 | ||
223 | 222 | ||
224 | static int read_until (lua_State *L, FILE *f, const l_char *p, int pl) { | 223 | static int read_until (lua_State *L, FILE *f, const char *p, int pl) { |
225 | l_charint c; | 224 | int c; |
226 | int j; | 225 | int j; |
227 | int next[LUA_MAXUNTIL+1]; | 226 | int next[LUA_MAXUNTIL+1]; |
228 | luaL_Buffer b; | 227 | luaL_Buffer b; |
@@ -255,7 +254,7 @@ static int read_until (lua_State *L, FILE *f, const l_char *p, int pl) { | |||
255 | 254 | ||
256 | static int read_number (lua_State *L, FILE *f) { | 255 | static int read_number (lua_State *L, FILE *f) { |
257 | lua_Number d; | 256 | lua_Number d; |
258 | if (fscanf(f, l_s(LUA_NUMBER_SCAN), &d) == 1) { | 257 | if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { |
259 | lua_pushnumber(L, d); | 258 | lua_pushnumber(L, d); |
260 | return 1; | 259 | return 1; |
261 | } | 260 | } |
@@ -264,7 +263,7 @@ static int read_number (lua_State *L, FILE *f) { | |||
264 | 263 | ||
265 | 264 | ||
266 | static int test_eof (lua_State *L, FILE *f) { | 265 | static int test_eof (lua_State *L, FILE *f) { |
267 | l_charint c = getc(f); | 266 | int c = getc(f); |
268 | ungetc(c, f); | 267 | ungetc(c, f); |
269 | lua_pushlstring(L, NULL, 0); | 268 | lua_pushlstring(L, NULL, 0); |
270 | return (c != EOF); | 269 | return (c != EOF); |
@@ -278,9 +277,9 @@ static int read_chars (lua_State *L, FILE *f, size_t n) { | |||
278 | luaL_buffinit(L, &b); | 277 | luaL_buffinit(L, &b); |
279 | rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ | 278 | rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ |
280 | do { | 279 | do { |
281 | l_char *p = luaL_prepbuffer(&b); | 280 | char *p = luaL_prepbuffer(&b); |
282 | if (rlen > n) rlen = n; /* cannot read more than asked */ | 281 | if (rlen > n) rlen = n; /* cannot read more than asked */ |
283 | nr = fread(p, sizeof(l_char), rlen, f); | 282 | nr = fread(p, sizeof(char), rlen, f); |
284 | luaL_addsize(&b, nr); | 283 | luaL_addsize(&b, nr); |
285 | n -= nr; /* still have to read `n' chars */ | 284 | n -= nr; /* still have to read `n' chars */ |
286 | } while (n > 0 && nr == rlen); /* until end of count or eof */ | 285 | } while (n > 0 && nr == rlen); /* until end of count or eof */ |
@@ -295,11 +294,11 @@ static int io_read (lua_State *L) { | |||
295 | int success; | 294 | int success; |
296 | int n; | 295 | int n; |
297 | if (nargs == 0) { /* no arguments? */ | 296 | if (nargs == 0) { /* no arguments? */ |
298 | success = read_until(L, f, l_s("\n"), 1); /* read until \n (a line) */ | 297 | success = read_until(L, f, "\n", 1); /* read until \n (a line) */ |
299 | n = 2; /* will return n-1 results */ | 298 | n = 2; /* will return n-1 results */ |
300 | } | 299 | } |
301 | else { /* ensure stack space for all results and for auxlib's buffer */ | 300 | else { /* ensure stack space for all results and for auxlib's buffer */ |
302 | luaL_check_stack(L, nargs+LUA_MINSTACK, l_s("too many arguments")); | 301 | luaL_check_stack(L, nargs+LUA_MINSTACK, "too many arguments"); |
303 | success = 1; | 302 | success = 1; |
304 | for (n = 1; n<=nargs && success; n++) { | 303 | for (n = 1; n<=nargs && success; n++) { |
305 | if (lua_rawtag(L, n) == LUA_TNUMBER) { | 304 | if (lua_rawtag(L, n) == LUA_TNUMBER) { |
@@ -307,32 +306,32 @@ static int io_read (lua_State *L) { | |||
307 | success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); | 306 | success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); |
308 | } | 307 | } |
309 | else { | 308 | else { |
310 | const l_char *p = lua_tostring(L, n); | 309 | const char *p = lua_tostring(L, n); |
311 | if (!p || p[0] != l_c('*')) | 310 | if (!p || p[0] != '*') |
312 | lua_error(L, l_s("invalid `read' option")); | 311 | lua_error(L, "invalid `read' option"); |
313 | switch (p[1]) { | 312 | switch (p[1]) { |
314 | case l_c('n'): /* number */ | 313 | case 'n': /* number */ |
315 | success = read_number(L, f); | 314 | success = read_number(L, f); |
316 | break; | 315 | break; |
317 | case l_c('l'): /* line */ | 316 | case 'l': /* line */ |
318 | success = read_until(L, f, l_s("\n"), 1); /* read until \n */ | 317 | success = read_until(L, f, "\n", 1); /* read until \n */ |
319 | break; | 318 | break; |
320 | case l_c('a'): /* file */ | 319 | case 'a': /* file */ |
321 | read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ | 320 | read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ |
322 | success = 1; /* always success */ | 321 | success = 1; /* always success */ |
323 | break; | 322 | break; |
324 | case l_c('w'): /* word */ | 323 | case 'w': /* word */ |
325 | lua_error(L, l_s("obsolete option `*w'")); | 324 | lua_error(L, "obsolete option `*w'"); |
326 | break; | 325 | break; |
327 | case l_c('u'): { /* read until */ | 326 | case 'u': { /* read until */ |
328 | size_t pl = lua_strlen(L, n) - 2; | 327 | size_t pl = lua_strlen(L, n) - 2; |
329 | luaL_arg_check(L, 0 < pl && pl <= LUA_MAXUNTIL, n, | 328 | luaL_arg_check(L, 0 < pl && pl <= LUA_MAXUNTIL, n, |
330 | l_s("invalid read-until length")); | 329 | "invalid read-until length"); |
331 | success = read_until(L, f, p+2, (int)(pl)); | 330 | success = read_until(L, f, p+2, (int)(pl)); |
332 | break; | 331 | break; |
333 | } | 332 | } |
334 | default: | 333 | default: |
335 | luaL_argerror(L, n, l_s("invalid format")); | 334 | luaL_argerror(L, n, "invalid format"); |
336 | success = 0; /* to avoid warnings */ | 335 | success = 0; /* to avoid warnings */ |
337 | } | 336 | } |
338 | } | 337 | } |
@@ -357,12 +356,12 @@ static int io_write (lua_State *L) { | |||
357 | if (lua_rawtag(L, arg) == LUA_TNUMBER) { | 356 | if (lua_rawtag(L, arg) == LUA_TNUMBER) { |
358 | /* optimization: could be done exactly as for strings */ | 357 | /* optimization: could be done exactly as for strings */ |
359 | status = status && | 358 | status = status && |
360 | fprintf(f, l_s(LUA_NUMBER_FMT), lua_tonumber(L, arg)) > 0; | 359 | fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; |
361 | } | 360 | } |
362 | else { | 361 | else { |
363 | size_t l; | 362 | size_t l; |
364 | const l_char *s = luaL_check_lstr(L, arg, &l); | 363 | const char *s = luaL_check_lstr(L, arg, &l); |
365 | status = status && (fwrite(s, sizeof(l_char), l, f) == l); | 364 | status = status && (fwrite(s, sizeof(char), l, f) == l); |
366 | } | 365 | } |
367 | } | 366 | } |
368 | pushresult(L, status); | 367 | pushresult(L, status); |
@@ -372,11 +371,11 @@ static int io_write (lua_State *L) { | |||
372 | 371 | ||
373 | static int io_seek (lua_State *L) { | 372 | static int io_seek (lua_State *L) { |
374 | static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; | 373 | static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; |
375 | static const l_char *const modenames[] = {l_s("set"), l_s("cur"), l_s("end"), NULL}; | 374 | static const char *const modenames[] = {"set", "cur", "end", NULL}; |
376 | FILE *f = (FILE *)(luaL_check_userdata(L, 1, FILEHANDLE)); | 375 | FILE *f = (FILE *)(luaL_check_userdata(L, 1, FILEHANDLE)); |
377 | int op = luaL_findstring(luaL_opt_string(L, 2, l_s("cur")), modenames); | 376 | int op = luaL_findstring(luaL_opt_string(L, 2, "cur"), modenames); |
378 | long offset = luaL_opt_long(L, 3, 0); | 377 | long offset = luaL_opt_long(L, 3, 0); |
379 | luaL_arg_check(L, op != -1, 2, l_s("invalid mode")); | 378 | luaL_arg_check(L, op != -1, 2, "invalid mode"); |
380 | op = fseek(f, offset, mode[op]); | 379 | op = fseek(f, offset, mode[op]); |
381 | if (op) | 380 | if (op) |
382 | return pushresult(L, 0); /* error */ | 381 | return pushresult(L, 0); /* error */ |
@@ -420,9 +419,9 @@ static int io_rename (lua_State *L) { | |||
420 | 419 | ||
421 | 420 | ||
422 | static int io_tmpname (lua_State *L) { | 421 | static int io_tmpname (lua_State *L) { |
423 | l_char buff[L_tmpnam]; | 422 | char buff[L_tmpnam]; |
424 | if (tmpnam(buff) != buff) | 423 | if (tmpnam(buff) != buff) |
425 | lua_error(L, l_s("unable to generate a unique filename")); | 424 | lua_error(L, "unable to generate a unique filename"); |
426 | lua_pushstring(L, buff); | 425 | lua_pushstring(L, buff); |
427 | return 1; | 426 | return 1; |
428 | } | 427 | } |
@@ -449,14 +448,14 @@ static int io_clock (lua_State *L) { | |||
449 | ** ======================================================= | 448 | ** ======================================================= |
450 | */ | 449 | */ |
451 | 450 | ||
452 | static void setfield (lua_State *L, const l_char *key, int value) { | 451 | static void setfield (lua_State *L, const char *key, int value) { |
453 | lua_pushstring(L, key); | 452 | lua_pushstring(L, key); |
454 | lua_pushnumber(L, value); | 453 | lua_pushnumber(L, value); |
455 | lua_rawset(L, -3); | 454 | lua_rawset(L, -3); |
456 | } | 455 | } |
457 | 456 | ||
458 | 457 | ||
459 | static int getfield (lua_State *L, const l_char *key, int d) { | 458 | static int getfield (lua_State *L, const char *key, int d) { |
460 | int res; | 459 | int res; |
461 | lua_pushstring(L, key); | 460 | lua_pushstring(L, key); |
462 | lua_rawget(L, -2); | 461 | lua_rawget(L, -2); |
@@ -464,7 +463,7 @@ static int getfield (lua_State *L, const l_char *key, int d) { | |||
464 | res = (int)(lua_tonumber(L, -1)); | 463 | res = (int)(lua_tonumber(L, -1)); |
465 | else { | 464 | else { |
466 | if (d == -2) | 465 | if (d == -2) |
467 | luaL_verror(L, l_s("field `%.20s' missing in date table"), key); | 466 | luaL_verror(L, "field `%.20s' missing in date table", key); |
468 | res = d; | 467 | res = d; |
469 | } | 468 | } |
470 | lua_pop(L, 1); | 469 | lua_pop(L, 1); |
@@ -473,12 +472,12 @@ static int getfield (lua_State *L, const l_char *key, int d) { | |||
473 | 472 | ||
474 | 473 | ||
475 | static int io_date (lua_State *L) { | 474 | static int io_date (lua_State *L) { |
476 | const l_char *s = luaL_opt_string(L, 1, l_s("%c")); | 475 | const char *s = luaL_opt_string(L, 1, "%c"); |
477 | time_t t = (time_t)(luaL_opt_number(L, 2, -1)); | 476 | time_t t = (time_t)(luaL_opt_number(L, 2, -1)); |
478 | struct tm *stm; | 477 | struct tm *stm; |
479 | if (t == (time_t)(-1)) /* no time given? */ | 478 | if (t == (time_t)(-1)) /* no time given? */ |
480 | t = time(NULL); /* use current time */ | 479 | t = time(NULL); /* use current time */ |
481 | if (*s == l_c('!')) { /* UTC? */ | 480 | if (*s == '!') { /* UTC? */ |
482 | stm = gmtime(&t); | 481 | stm = gmtime(&t); |
483 | s++; /* skip `!' */ | 482 | s++; /* skip `!' */ |
484 | } | 483 | } |
@@ -486,24 +485,24 @@ static int io_date (lua_State *L) { | |||
486 | stm = localtime(&t); | 485 | stm = localtime(&t); |
487 | if (stm == NULL) /* invalid date? */ | 486 | if (stm == NULL) /* invalid date? */ |
488 | lua_pushnil(L); | 487 | lua_pushnil(L); |
489 | else if (strcmp(s, l_s("*t")) == 0) { | 488 | else if (strcmp(s, "*t") == 0) { |
490 | lua_newtable(L); | 489 | lua_newtable(L); |
491 | setfield(L, l_s("sec"), stm->tm_sec); | 490 | setfield(L, "sec", stm->tm_sec); |
492 | setfield(L, l_s("min"), stm->tm_min); | 491 | setfield(L, "min", stm->tm_min); |
493 | setfield(L, l_s("hour"), stm->tm_hour); | 492 | setfield(L, "hour", stm->tm_hour); |
494 | setfield(L, l_s("day"), stm->tm_mday); | 493 | setfield(L, "day", stm->tm_mday); |
495 | setfield(L, l_s("month"), stm->tm_mon+1); | 494 | setfield(L, "month", stm->tm_mon+1); |
496 | setfield(L, l_s("year"), stm->tm_year+1900); | 495 | setfield(L, "year", stm->tm_year+1900); |
497 | setfield(L, l_s("wday"), stm->tm_wday+1); | 496 | setfield(L, "wday", stm->tm_wday+1); |
498 | setfield(L, l_s("yday"), stm->tm_yday+1); | 497 | setfield(L, "yday", stm->tm_yday+1); |
499 | setfield(L, l_s("isdst"), stm->tm_isdst); | 498 | setfield(L, "isdst", stm->tm_isdst); |
500 | } | 499 | } |
501 | else { | 500 | else { |
502 | l_char b[256]; | 501 | char b[256]; |
503 | if (strftime(b, sizeof(b), s, stm)) | 502 | if (strftime(b, sizeof(b), s, stm)) |
504 | lua_pushstring(L, b); | 503 | lua_pushstring(L, b); |
505 | else | 504 | else |
506 | lua_error(L, l_s("invalid `date' format")); | 505 | lua_error(L, "invalid `date' format"); |
507 | } | 506 | } |
508 | return 1; | 507 | return 1; |
509 | } | 508 | } |
@@ -517,13 +516,13 @@ static int io_time (lua_State *L) { | |||
517 | struct tm ts; | 516 | struct tm ts; |
518 | luaL_check_rawtype(L, 1, LUA_TTABLE); | 517 | luaL_check_rawtype(L, 1, LUA_TTABLE); |
519 | lua_settop(L, 1); /* make sure table is at the top */ | 518 | lua_settop(L, 1); /* make sure table is at the top */ |
520 | ts.tm_sec = getfield(L, l_s("sec"), 0); | 519 | ts.tm_sec = getfield(L, "sec", 0); |
521 | ts.tm_min = getfield(L, l_s("min"), 0); | 520 | ts.tm_min = getfield(L, "min", 0); |
522 | ts.tm_hour = getfield(L, l_s("hour"), 12); | 521 | ts.tm_hour = getfield(L, "hour", 12); |
523 | ts.tm_mday = getfield(L, l_s("day"), -2); | 522 | ts.tm_mday = getfield(L, "day", -2); |
524 | ts.tm_mon = getfield(L, l_s("month"), -2)-1; | 523 | ts.tm_mon = getfield(L, "month", -2)-1; |
525 | ts.tm_year = getfield(L, l_s("year"), -2)-1900; | 524 | ts.tm_year = getfield(L, "year", -2)-1900; |
526 | ts.tm_isdst = getfield(L, l_s("isdst"), -1); | 525 | ts.tm_isdst = getfield(L, "isdst", -1); |
527 | t = mktime(&ts); | 526 | t = mktime(&ts); |
528 | if (t == (time_t)(-1)) | 527 | if (t == (time_t)(-1)) |
529 | lua_pushnil(L); | 528 | lua_pushnil(L); |
@@ -546,10 +545,10 @@ static int io_difftime (lua_State *L) { | |||
546 | static int io_setloc (lua_State *L) { | 545 | static int io_setloc (lua_State *L) { |
547 | static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, | 546 | static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, |
548 | LC_NUMERIC, LC_TIME}; | 547 | LC_NUMERIC, LC_TIME}; |
549 | static const l_char *const catnames[] = {l_s("all"), l_s("collate"), l_s("ctype"), l_s("monetary"), | 548 | static const char *const catnames[] = {"all", "collate", "ctype", "monetary", |
550 | l_s("numeric"), l_s("time"), NULL}; | 549 | "numeric", "time", NULL}; |
551 | int op = luaL_findstring(luaL_opt_string(L, 2, l_s("all")), catnames); | 550 | int op = luaL_findstring(luaL_opt_string(L, 2, "all"), catnames); |
552 | luaL_arg_check(L, op != -1, 2, l_s("invalid option")); | 551 | luaL_arg_check(L, op != -1, 2, "invalid option"); |
553 | lua_pushstring(L, setlocale(cat[op], luaL_check_string(L, 1))); | 552 | lua_pushstring(L, setlocale(cat[op], luaL_check_string(L, 1))); |
554 | return 1; | 553 | return 1; |
555 | } | 554 | } |
@@ -566,10 +565,10 @@ static int io_exit (lua_State *L) { | |||
566 | 565 | ||
567 | static int io_debug (lua_State *L) { | 566 | static int io_debug (lua_State *L) { |
568 | for (;;) { | 567 | for (;;) { |
569 | l_char buffer[250]; | 568 | char buffer[250]; |
570 | fprintf(stderr, l_s("lua_debug> ")); | 569 | fprintf(stderr, "lua_debug> "); |
571 | if (fgets(buffer, sizeof(buffer), stdin) == 0 || | 570 | if (fgets(buffer, sizeof(buffer), stdin) == 0 || |
572 | strcmp(buffer, l_s("cont\n")) == 0) | 571 | strcmp(buffer, "cont\n") == 0) |
573 | return 0; | 572 | return 0; |
574 | lua_dostring(L, buffer); | 573 | lua_dostring(L, buffer); |
575 | lua_settop(L, 0); /* remove eventual returns */ | 574 | lua_settop(L, 0); /* remove eventual returns */ |
@@ -586,61 +585,61 @@ static int errorfb (lua_State *L) { | |||
586 | lua_Debug ar; | 585 | lua_Debug ar; |
587 | luaL_Buffer b; | 586 | luaL_Buffer b; |
588 | luaL_buffinit(L, &b); | 587 | luaL_buffinit(L, &b); |
589 | luaL_addstring(&b, l_s("error: ")); | 588 | luaL_addstring(&b, "error: "); |
590 | luaL_addstring(&b, luaL_check_string(L, 1)); | 589 | luaL_addstring(&b, luaL_check_string(L, 1)); |
591 | luaL_addstring(&b, l_s("\n")); | 590 | luaL_addstring(&b, "\n"); |
592 | while (lua_getstack(L, level++, &ar)) { | 591 | while (lua_getstack(L, level++, &ar)) { |
593 | l_char buff[120]; /* enough to fit following `sprintf's */ | 592 | char buff[120]; /* enough to fit following `sprintf's */ |
594 | if (level == 2) | 593 | if (level == 2) |
595 | luaL_addstring(&b, l_s("stack traceback:\n")); | 594 | luaL_addstring(&b, "stack traceback:\n"); |
596 | else if (level > LEVELS1 && firstpart) { | 595 | else if (level > LEVELS1 && firstpart) { |
597 | /* no more than `LEVELS2' more levels? */ | 596 | /* no more than `LEVELS2' more levels? */ |
598 | if (!lua_getstack(L, level+LEVELS2, &ar)) | 597 | if (!lua_getstack(L, level+LEVELS2, &ar)) |
599 | level--; /* keep going */ | 598 | level--; /* keep going */ |
600 | else { | 599 | else { |
601 | luaL_addstring(&b, l_s(" ...\n")); /* too many levels */ | 600 | luaL_addstring(&b, " ...\n"); /* too many levels */ |
602 | while (lua_getstack(L, level+LEVELS2, &ar)) /* find last levels */ | 601 | while (lua_getstack(L, level+LEVELS2, &ar)) /* find last levels */ |
603 | level++; | 602 | level++; |
604 | } | 603 | } |
605 | firstpart = 0; | 604 | firstpart = 0; |
606 | continue; | 605 | continue; |
607 | } | 606 | } |
608 | sprintf(buff, l_s("%4d: "), level-1); | 607 | sprintf(buff, "%4d: ", level-1); |
609 | luaL_addstring(&b, buff); | 608 | luaL_addstring(&b, buff); |
610 | lua_getinfo(L, l_s("Snl"), &ar); | 609 | lua_getinfo(L, "Snl", &ar); |
611 | switch (*ar.namewhat) { | 610 | switch (*ar.namewhat) { |
612 | case l_c('g'): case l_c('l'): /* global, local */ | 611 | case 'g': case 'l': /* global, local */ |
613 | sprintf(buff, l_s("function `%.50s'"), ar.name); | 612 | sprintf(buff, "function `%.50s'", ar.name); |
614 | break; | 613 | break; |
615 | case l_c('f'): /* field */ | 614 | case 'f': /* field */ |
616 | sprintf(buff, l_s("method `%.50s'"), ar.name); | 615 | sprintf(buff, "method `%.50s'", ar.name); |
617 | break; | 616 | break; |
618 | case l_c('t'): /* tag method */ | 617 | case 't': /* tag method */ |
619 | sprintf(buff, l_s("`%.50s' tag method"), ar.name); | 618 | sprintf(buff, "`%.50s' tag method", ar.name); |
620 | break; | 619 | break; |
621 | default: { | 620 | default: { |
622 | if (*ar.what == l_c('m')) /* main? */ | 621 | if (*ar.what == 'm') /* main? */ |
623 | sprintf(buff, l_s("main of %.70s"), ar.short_src); | 622 | sprintf(buff, "main of %.70s", ar.short_src); |
624 | else if (*ar.what == l_c('C')) /* C function? */ | 623 | else if (*ar.what == 'C') /* C function? */ |
625 | sprintf(buff, l_s("%.70s"), ar.short_src); | 624 | sprintf(buff, "%.70s", ar.short_src); |
626 | else | 625 | else |
627 | sprintf(buff, l_s("function <%d:%.70s>"), ar.linedefined, ar.short_src); | 626 | sprintf(buff, "function <%d:%.70s>", ar.linedefined, ar.short_src); |
628 | ar.source = NULL; /* do not print source again */ | 627 | ar.source = NULL; /* do not print source again */ |
629 | } | 628 | } |
630 | } | 629 | } |
631 | luaL_addstring(&b, buff); | 630 | luaL_addstring(&b, buff); |
632 | if (ar.currentline > 0) { | 631 | if (ar.currentline > 0) { |
633 | sprintf(buff, l_s(" at line %d"), ar.currentline); | 632 | sprintf(buff, " at line %d", ar.currentline); |
634 | luaL_addstring(&b, buff); | 633 | luaL_addstring(&b, buff); |
635 | } | 634 | } |
636 | if (ar.source) { | 635 | if (ar.source) { |
637 | sprintf(buff, l_s(" [%.70s]"), ar.short_src); | 636 | sprintf(buff, " [%.70s]", ar.short_src); |
638 | luaL_addstring(&b, buff); | 637 | luaL_addstring(&b, buff); |
639 | } | 638 | } |
640 | luaL_addstring(&b, l_s("\n")); | 639 | luaL_addstring(&b, "\n"); |
641 | } | 640 | } |
642 | luaL_pushresult(&b); | 641 | luaL_pushresult(&b); |
643 | lua_getglobal(L, l_s(LUA_ALERT)); | 642 | lua_getglobal(L, LUA_ALERT); |
644 | if (lua_isfunction(L, -1)) { /* avoid loop if _ALERT is not defined */ | 643 | if (lua_isfunction(L, -1)) { /* avoid loop if _ALERT is not defined */ |
645 | lua_pushvalue(L, -2); /* error message */ | 644 | lua_pushvalue(L, -2); /* error message */ |
646 | lua_rawcall(L, 1, 0); | 645 | lua_rawcall(L, 1, 0); |
@@ -651,29 +650,29 @@ static int errorfb (lua_State *L) { | |||
651 | 650 | ||
652 | 651 | ||
653 | static const luaL_reg iolib[] = { | 652 | static const luaL_reg iolib[] = { |
654 | {l_s("appendto"), io_appendto}, | 653 | {"appendto", io_appendto}, |
655 | {l_s("clock"), io_clock}, | 654 | {"clock", io_clock}, |
656 | {l_s("closefile"), io_close}, | 655 | {"closefile", io_close}, |
657 | {l_s("date"), io_date}, | 656 | {"date", io_date}, |
658 | {l_s("debug"), io_debug}, | 657 | {"debug", io_debug}, |
659 | {l_s("difftime"), io_difftime}, | 658 | {"difftime", io_difftime}, |
660 | {l_s("execute"), io_execute}, | 659 | {"execute", io_execute}, |
661 | {l_s("exit"), io_exit}, | 660 | {"exit", io_exit}, |
662 | {l_s("flush"), io_flush}, | 661 | {"flush", io_flush}, |
663 | {l_s("getenv"), io_getenv}, | 662 | {"getenv", io_getenv}, |
664 | {l_s("openfile"), io_open}, | 663 | {"openfile", io_open}, |
665 | {l_s("read"), io_read}, | 664 | {"read", io_read}, |
666 | {l_s("readfrom"), io_readfrom}, | 665 | {"readfrom", io_readfrom}, |
667 | {l_s("remove"), io_remove}, | 666 | {"remove", io_remove}, |
668 | {l_s("rename"), io_rename}, | 667 | {"rename", io_rename}, |
669 | {l_s("seek"), io_seek}, | 668 | {"seek", io_seek}, |
670 | {l_s("setlocale"), io_setloc}, | 669 | {"setlocale", io_setloc}, |
671 | {l_s("time"), io_time}, | 670 | {"time", io_time}, |
672 | {l_s("tmpfile"), io_tmpfile}, | 671 | {"tmpfile", io_tmpfile}, |
673 | {l_s("tmpname"), io_tmpname}, | 672 | {"tmpname", io_tmpname}, |
674 | {l_s("write"), io_write}, | 673 | {"write", io_write}, |
675 | {l_s("writeto"), io_writeto}, | 674 | {"writeto", io_writeto}, |
676 | {l_s(LUA_ERRORMESSAGE), errorfb} | 675 | {LUA_ERRORMESSAGE, errorfb} |
677 | }; | 676 | }; |
678 | 677 | ||
679 | 678 | ||
@@ -684,12 +683,12 @@ LUALIB_API int lua_iolibopen (lua_State *L) { | |||
684 | /* predefined file handles */ | 683 | /* predefined file handles */ |
685 | newfilewithname(L, stdin, basicfiles[INFILE]); | 684 | newfilewithname(L, stdin, basicfiles[INFILE]); |
686 | newfilewithname(L, stdout, basicfiles[OUTFILE]); | 685 | newfilewithname(L, stdout, basicfiles[OUTFILE]); |
687 | newfilewithname(L, stderr, l_s("_STDERR")); | 686 | newfilewithname(L, stderr, "_STDERR"); |
688 | resetfile(L, INFILE); | 687 | resetfile(L, INFILE); |
689 | resetfile(L, OUTFILE); | 688 | resetfile(L, OUTFILE); |
690 | /* close files when collected */ | 689 | /* close files when collected */ |
691 | lua_pushcfunction(L, file_collect); | 690 | lua_pushcfunction(L, file_collect); |
692 | lua_settagmethod(L, iotag, l_s("gc")); | 691 | lua_settagmethod(L, iotag, "gc"); |
693 | return 0; | 692 | return 0; |
694 | } | 693 | } |
695 | 694 | ||