diff options
| author | Courtney Bane <git-1691@cbane.org> | 2017-01-25 18:04:35 -0600 |
|---|---|---|
| committer | Courtney Bane <git-1691@cbane.org> | 2017-01-25 18:04:35 -0600 |
| commit | ea0064625b2a4cf279977477fe2ca627afbd5ad0 (patch) | |
| tree | 6ac59aa0fd0dc74d3d78cc989fa4973317a015c4 | |
| parent | 843fe9b65fd93b015e5fe3e457c98fb806cd8c79 (diff) | |
| download | luasocket-ea0064625b2a4cf279977477fe2ca627afbd5ad0.tar.gz luasocket-ea0064625b2a4cf279977477fe2ca627afbd5ad0.tar.bz2 luasocket-ea0064625b2a4cf279977477fe2ca627afbd5ad0.zip | |
Add backwards compatibility wrappers for socket.unix
Add backwards compatibility aliases "tcp" and "udp" for the recently renamed
"stream" and "dgram" functions, as well as a wrapper function and metatable
setup so that socket.unix() calls socket.unix.stream().
| -rw-r--r-- | src/unix.c | 50 |
1 files changed, 45 insertions, 5 deletions
| @@ -17,14 +17,54 @@ static const luaL_Reg mod[] = { | |||
| 17 | {NULL, NULL} | 17 | {NULL, NULL} |
| 18 | }; | 18 | }; |
| 19 | 19 | ||
| 20 | static void add_alias(lua_State *L, int index, const char *name, const char *target) | ||
| 21 | { | ||
| 22 | lua_getfield(L, index, target); | ||
| 23 | lua_setfield(L, index, name); | ||
| 24 | } | ||
| 25 | |||
| 26 | static int compat_socket_unix_call(lua_State *L) | ||
| 27 | { | ||
| 28 | /* Look up socket.unix.stream in the socket.unix table (which is the first | ||
| 29 | * argument). */ | ||
| 30 | lua_getfield(L, 1, "stream"); | ||
| 31 | |||
| 32 | /* Replace the stack entry for the socket.unix table with the | ||
| 33 | * socket.unix.stream function. */ | ||
| 34 | lua_replace(L, 1); | ||
| 35 | |||
| 36 | /* Call socket.unix.stream, passing along any arguments. */ | ||
| 37 | int n = lua_gettop(L); | ||
| 38 | lua_call(L, n-1, LUA_MULTRET); | ||
| 39 | |||
| 40 | /* Pass along the return values from socket.unix.stream. */ | ||
| 41 | n = lua_gettop(L); | ||
| 42 | return n; | ||
| 43 | } | ||
| 44 | |||
| 20 | /*-------------------------------------------------------------------------*\ | 45 | /*-------------------------------------------------------------------------*\ |
| 21 | * Initializes module | 46 | * Initializes module |
| 22 | \*-------------------------------------------------------------------------*/ | 47 | \*-------------------------------------------------------------------------*/ |
| 23 | int luaopen_socket_unix(lua_State *L) | 48 | int luaopen_socket_unix(lua_State *L) |
| 24 | { | 49 | { |
| 25 | int i; | 50 | int i; |
| 26 | lua_newtable(L); | 51 | lua_newtable(L); |
| 27 | for (i = 0; mod[i].name; i++) mod[i].func(L); | 52 | int socket_unix_table = lua_gettop(L); |
| 28 | return 1; | 53 | |
| 29 | } | 54 | for (i = 0; mod[i].name; i++) |
| 55 | mod[i].func(L); | ||
| 30 | 56 | ||
| 57 | /* Add backwards compatibility aliases "tcp" and "udp" for the "stream" and | ||
| 58 | * "dgram" functions. */ | ||
| 59 | add_alias(L, socket_unix_table, "tcp", "stream"); | ||
| 60 | add_alias(L, socket_unix_table, "udp", "dgram"); | ||
| 61 | |||
| 62 | /* Add a backwards compatibility function and a metatable setup to call it | ||
| 63 | * for the old socket.unix() interface. */ | ||
| 64 | lua_pushcfunction(L, compat_socket_unix_call); | ||
| 65 | lua_setfield(L, socket_unix_table, "__call"); | ||
| 66 | lua_pushvalue(L, socket_unix_table); | ||
| 67 | lua_setmetatable(L, socket_unix_table); | ||
| 68 | |||
| 69 | return 1; | ||
| 70 | } | ||
