Convert library to Lua 5.2

Lua 5.2 brings some API changes; This commit converts the library to
the new version and removes the backward compatibility code between
Lua 5.0 and 5.1 (which makes no sense anymore).
This commit is contained in:
Alexandre Erwin Ittner 2010-11-17 01:28:02 -02:00
parent e394f70df0
commit ff90f3f75e
3 changed files with 14 additions and 26 deletions

8
README
View File

@ -11,8 +11,8 @@ sequence of corresponding characters in another codeset. The codesets
are those specified in the iconv.new() call that returned the conversion are those specified in the iconv.new() call that returned the conversion
descriptor, cd. descriptor, cd.
Lua-iconv 6 and later *requires* Lua 5.1. If you are using Lua 5.0, please Lua-iconv 7 and later *requires* Lua 5.2. If you are using Lua 5.1, please
use the first release (lua-iconv-r1). use the release 6; For Lua 5.0, use the first release (lua-iconv-r1).
Details on iconv may be obtained in the Open Group's interface definition Details on iconv may be obtained in the Open Group's interface definition
(http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.h.html). (http://www.opengroup.org/onlinepubs/007908799/xsh/iconv.h.html).
@ -39,7 +39,7 @@ untar the distribution package and, within the program directory, type:
make install make install
as root. The library will be compiled and installed on the in the correct as root. The library will be compiled and installed on the in the correct
path (which is defined in lua5.1.pc). Compiling on systems without pkg-config path (which is defined in lua5.2.pc). Compiling on systems without pkg-config
requires manual changes in the Makefile (this includes Windows). requires manual changes in the Makefile (this includes Windows).
@ -49,7 +49,7 @@ requires manual changes in the Makefile (this includes Windows).
Lua-iconv is a shared library that must be loaded in the Lua interpreter Lua-iconv is a shared library that must be loaded in the Lua interpreter
before use. From Lua 5.1 and later, you can simply do a before use. From Lua 5.1 and later, you can simply do a
require "iconv" local iconv = require("iconv")
call to load up the library (that, of course, must be installed in a call to load up the library (that, of course, must be installed in a
directory from package.cpath). directory from package.cpath).

View File

@ -36,20 +36,9 @@
#include <errno.h> #include <errno.h>
#define LIB_NAME "iconv" #define LIB_NAME "iconv"
#define LIB_VERSION LIB_NAME " 6" #define LIB_VERSION LIB_NAME " 7"
#define ICONV_TYPENAME "iconv_t" #define ICONV_TYPENAME "iconv_t"
/* Compatibility between Lua 5.1+ and Lua 5.0 */
#ifndef LUA_VERSION_NUM
#define LUA_VERSION_NUM 0
#endif
#if LUA_VERSION_NUM < 501
#define luaL_register(a, b, c) luaL_openlib((a), (b), (c), 0)
#endif
/* Emulates lua_(un)boxpointer from Lua 5.0 (don't exists on Lua 5.1) */
#define BOXPTR(L, p) (*(void**)(lua_newuserdata(L, sizeof(void*))) = (p)) #define BOXPTR(L, p) (*(void**)(lua_newuserdata(L, sizeof(void*))) = (p))
#define UNBOXPTR(L, i) (*(void**)(lua_touserdata(L, i))) #define UNBOXPTR(L, i) (*(void**)(lua_touserdata(L, i)))
@ -101,7 +90,7 @@ static int Liconv_open(lua_State *L) {
static int Liconv(lua_State *L) { static int Liconv(lua_State *L) {
iconv_t cd = get_iconv_t(L, 1); iconv_t cd = get_iconv_t(L, 1);
size_t ibleft = lua_strlen(L, 2); size_t ibleft = lua_rawlen(L, 2);
char *inbuf = (char*) luaL_checkstring(L, 2); char *inbuf = (char*) luaL_checkstring(L, 2);
char *outbuf; char *outbuf;
char *outbufs; char *outbufs;
@ -211,14 +200,8 @@ static const luaL_reg inconvFuncs[] = {
}; };
static const luaL_reg iconvMT[] = {
{ "__gc", Liconv_close },
{ NULL, NULL }
};
int luaopen_iconv(lua_State *L) { int luaopen_iconv(lua_State *L) {
luaL_register(L, LIB_NAME, inconvFuncs); luaL_newlib(L, inconvFuncs);
TBL_SET_INT_CONST(L, "ERROR_NO_MEMORY", ERROR_NO_MEMORY); TBL_SET_INT_CONST(L, "ERROR_NO_MEMORY", ERROR_NO_MEMORY);
TBL_SET_INT_CONST(L, "ERROR_INVALID", ERROR_INVALID); TBL_SET_INT_CONST(L, "ERROR_INVALID", ERROR_INVALID);
@ -230,10 +213,15 @@ int luaopen_iconv(lua_State *L) {
lua_settable(L, -3); lua_settable(L, -3);
luaL_newmetatable(L, ICONV_TYPENAME); luaL_newmetatable(L, ICONV_TYPENAME);
lua_pushliteral(L, "__index"); lua_pushliteral(L, "__index");
lua_pushvalue(L, -3); lua_pushvalue(L, -3);
lua_settable(L, -3); lua_settable(L, -3);
luaL_openlib(L, NULL, iconvMT, 0);
lua_pushliteral(L, "__gc");
lua_pushcfunction(L, Liconv_close);
lua_settable(L, -3);
lua_pop(L, 1); lua_pop(L, 1);
return 1; return 1;

View File

@ -1,4 +1,4 @@
require "iconv" local iconv = require("iconv")
-- Set your terminal encoding here -- Set your terminal encoding here
-- local termcs = "iso-8859-1" -- local termcs = "iso-8859-1"