From e86eac96fa69eb59f878abf005ac7cedbfaf5736 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Thu, 26 Apr 2012 16:50:27 -0700 Subject: :shutdown() errors on all invalid argument strings It used to error only on invalid argument strings that started with 's', 'r', or 'b'. --- src/unix.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) (limited to 'src/unix.c') diff --git a/src/unix.c b/src/unix.c index f972738..73e7b69 100644 --- a/src/unix.c +++ b/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; } /*-------------------------------------------------------------------------*\ -- cgit v1.2.3-55-g6feb