Browse files

:shutdown() errors on all invalid argument strings

It used to error only on invalid argument strings that started with 's',
'r', or 'b'.
  • Loading branch information...
1 parent 30d1aae commit e86eac96fa69eb59f878abf005ac7cedbfaf5736 @sam-github sam-github committed Apr 26, 2012
Showing with 9 additions and 37 deletions.
  1. +4 −18 src/tcp.c
  2. +5 −19 src/unix.c
View
22 src/tcp.c
@@ -308,27 +308,13 @@ static int meth_listen(lua_State *L)
\*-------------------------------------------------------------------------*/
static int meth_shutdown(lua_State *L)
{
+ /* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */
+ static const char* methods[] = { "receive", "send", "both", NULL };
p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{client}", 1);
- const char *how = luaL_optstring(L, 2, "both");
- switch (how[0]) {
- case 'b':
- if (strcmp(how, "both")) goto error;
- socket_shutdown(&tcp->sock, 2);
- break;
- case 's':
- if (strcmp(how, "send")) goto error;
- socket_shutdown(&tcp->sock, 1);
- break;
- case 'r':
- if (strcmp(how, "receive")) goto error;
- socket_shutdown(&tcp->sock, 0);
- break;
- }
+ int how = luaL_checkoption(L, 2, "both", methods);
+ socket_shutdown(&tcp->sock, how);
lua_pushnumber(L, 1);
return 1;
-error:
- luaL_argerror(L, 2, "invalid shutdown method");
- return 0;
}
/*-------------------------------------------------------------------------*\
View
24 src/unix.c
@@ -292,27 +292,13 @@ static int meth_listen(lua_State *L)
\*-------------------------------------------------------------------------*/
static int meth_shutdown(lua_State *L)
{
- p_unix un = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
- const char *how = luaL_optstring(L, 2, "both");
- switch (how[0]) {
- case 'b':
- if (strcmp(how, "both")) goto error;
- socket_shutdown(&un->sock, 2);
- break;
- case 's':
- if (strcmp(how, "send")) goto error;
- socket_shutdown(&un->sock, 1);
- break;
- case 'r':
- if (strcmp(how, "receive")) goto error;
- socket_shutdown(&un->sock, 0);
- break;
- }
+ /* SHUT_RD, SHUT_WR, SHUT_RDWR have the value 0, 1, 2, so we can use method index directly */
+ static const char* methods[] = { "receive", "send", "both", NULL };
+ p_unix tcp = (p_unix) auxiliar_checkclass(L, "unix{client}", 1);
+ int how = luaL_checkoption(L, 2, "both", methods);
+ socket_shutdown(&tcp->sock, how);
lua_pushnumber(L, 1);
return 1;
-error:
- luaL_argerror(L, 2, "invalid shutdown method");
- return 0;
}
/*-------------------------------------------------------------------------*\

0 comments on commit e86eac9

Please sign in to comment.