src/event_buffer.c

changeset 29
f6d0eb94ca6c
parent 28
f7b864b661f4
child 30
d5b6c8abaaeb
equal deleted inserted replaced
28:f7b864b661f4 29:f6d0eb94ca6c
90 } 90 }
91 91
92 /* MAYBE: Could add caching */ 92 /* MAYBE: Could add caching */
93 static int event_buffer_get_data(lua_State* L) { 93 static int event_buffer_get_data(lua_State* L) {
94 le_buffer* buf = event_buffer_check(L, 1); 94 le_buffer* buf = event_buffer_check(L, 1);
95 lua_pushlstring(L, (const char*)EVBUFFER_DATA(buf->buffer), EVBUFFER_LENGTH(buf->buffer)); 95 int begin, len;
96 switch(lua_gettop(L)) {
97 case 1:
98 /* Obtain full data */
99 begin = 0;
100 len = EVBUFFER_LENGTH(buf->buffer);
101 break;
102 case 2:
103 begin = 0;
104 len = luaL_checkinteger(L, 2);
105 if(len > EVBUFFER_LENGTH(buf->buffer))
106 len = EVBUFFER_LENGTH(buf->buffer);
107 break;
108 case 3:
109 default:
110 begin = luaL_checkinteger(L, 2);
111 len = luaL_checkinteger(L, 3);
112 if(begin > EVBUFFER_LENGTH(buf->buffer))
113 begin = EVBUFFER_LENGTH(buf->buffer);
114 if(begin + len > EVBUFFER_LENGTH(buf->buffer))
115 len = EVBUFFER_LENGTH(buf->buffer) - begin;
116 break;
117 }
118 lua_pushlstring(L, (const char*)EVBUFFER_DATA(buf->buffer) + begin, len);
96 return 1; 119 return 1;
97 } 120 }
98 121
99 static int event_buffer_drain(lua_State* L) { 122 static int event_buffer_drain(lua_State* L) {
100 le_buffer* buf = event_buffer_check(L, 1); 123 le_buffer* buf = event_buffer_check(L, 1);

mercurial