Sfoglia il codice sorgente

`setlocale' may be used to query the current locale

Roberto Ierusalimschy 23 anni fa
parent
commit
252e01e398
1 ha cambiato i file con 6 aggiunte e 6 eliminazioni
  1. 6 6
      liolib.c

+ 6 - 6
liolib.c

@@ -5,6 +5,8 @@
 */
 
 
+#include <errno.h>
+#include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -17,11 +19,6 @@
 #include "lualib.h"
 
 
-#ifndef OLD_ANSI
-#include <errno.h>
-#include <locale.h>
-#endif
-
 
 
 #ifdef POPEN
@@ -568,9 +565,12 @@ static int io_setloc (lua_State *L) {
                       LC_NUMERIC, LC_TIME};
   static const char *const catnames[] = {"all", "collate", "ctype", "monetary",
      "numeric", "time", NULL};
+  const char *l = lua_tostring(L, 1);
   int op = luaL_findstring(luaL_opt_string(L, 2, "all"), catnames);
+  luaL_arg_check(L, l || lua_isnil(L, 1) || lua_isnone(L, 1), 1,
+                 "string expected");
   luaL_arg_check(L, op != -1, 2, "invalid option");
-  lua_pushstring(L, setlocale(cat[op], luaL_check_string(L, 1)));
+  lua_pushstring(L, setlocale(cat[op], l));
   return 1;
 }