# HG changeset patch # User Thomas Harning Jr # Date 1189137348 14400 # Node ID f6d0eb94ca6c516b04a0c7c5619dcf04af1ecf4e # Parent f7b864b661f4cc00d84e36ab5a05ce98332924be event_buffer:get_data learned (len) and (begin,len) API diff -r f7b864b661f4 -r f6d0eb94ca6c src/event_buffer.c --- 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; }