Thu, 06 Sep 2007 23:55:48 -0400
event_buffer:get_data learned (len) and (begin,len) API
src/event_buffer.c | file | annotate | diff | comparison | revisions |
--- a/src/event_buffer.c Thu Sep 06 23:43:45 2007 -0400 +++ b/src/event_buffer.c Thu Sep 06 23:55:48 2007 -0400 @@ -92,7 +92,30 @@ /* MAYBE: Could add caching */ static int event_buffer_get_data(lua_State* L) { le_buffer* buf = event_buffer_check(L, 1); - lua_pushlstring(L, (const char*)EVBUFFER_DATA(buf->buffer), EVBUFFER_LENGTH(buf->buffer)); + int begin, len; + switch(lua_gettop(L)) { + case 1: + /* Obtain full data */ + begin = 0; + len = EVBUFFER_LENGTH(buf->buffer); + break; + case 2: + begin = 0; + len = luaL_checkinteger(L, 2); + if(len > EVBUFFER_LENGTH(buf->buffer)) + len = EVBUFFER_LENGTH(buf->buffer); + break; + case 3: + default: + begin = luaL_checkinteger(L, 2); + len = luaL_checkinteger(L, 3); + if(begin > EVBUFFER_LENGTH(buf->buffer)) + begin = EVBUFFER_LENGTH(buf->buffer); + if(begin + len > EVBUFFER_LENGTH(buf->buffer)) + len = EVBUFFER_LENGTH(buf->buffer) - begin; + break; + } + lua_pushlstring(L, (const char*)EVBUFFER_DATA(buf->buffer) + begin, len); return 1; }