event_buffer:get_data learned (len) and (begin,len) API

Thu, 06 Sep 2007 23:55:48 -0400

author
Thomas Harning Jr <harningt@gmail.com>
date
Thu, 06 Sep 2007 23:55:48 -0400
changeset 29
f6d0eb94ca6c
parent 28
f7b864b661f4
child 30
d5b6c8abaaeb

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;
 }
 

mercurial