aboutsummaryrefslogtreecommitdiff
path: root/src/FbTk/Luamm.cc
diff options
context:
space:
mode:
authorPavel Labath <pavelo@centrum.sk>2011-06-05 12:07:46 (GMT)
committerPavel Labath <pavelo@centrum.sk>2013-02-16 23:19:15 (GMT)
commitddc650c96c24e5899d46244a18ce2b106f835ceb (patch)
treec24fc36ed56220760096fdf8c007263e0920ebab /src/FbTk/Luamm.cc
parent4df6d5d83a3d4eb1fc0efb1dd3a68326e52cf912 (diff)
downloadfluxbox_pavel-ddc650c96c24e5899d46244a18ce2b106f835ceb.zip
fluxbox_pavel-ddc650c96c24e5899d46244a18ce2b106f835ceb.tar.bz2
luamm: add a version of loadstring which also takes the string length as a parameter
Diffstat (limited to 'src/FbTk/Luamm.cc')
-rw-r--r--src/FbTk/Luamm.cc21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/FbTk/Luamm.cc b/src/FbTk/Luamm.cc
index 3de86db..c4ea2e0 100644
--- a/src/FbTk/Luamm.cc
+++ b/src/FbTk/Luamm.cc
@@ -145,6 +145,19 @@ namespace lua {
145 return r ? 3 : 1; 145 return r ? 3 : 1;
146 } 146 }
147 147
148 struct reader_data {
149 const void *s;
150 size_t len;
151 };
152
153 const char *string_reader(lua_State *, void *data, size_t *size)
154 {
155 reader_data *d = static_cast<reader_data *>(data);
156 *size = d->len;
157 d->len = 0;
158 return static_cast<const char *>(d->s);
159 }
160
148 } 161 }
149 162
150 std::string exception::get_error_msg(state *L) 163 std::string exception::get_error_msg(state *L)
@@ -336,9 +349,13 @@ namespace lua {
336 } 349 }
337 } 350 }
338 351
339 void state::loadstring(const char *s) throw(lua::syntax_error, std::bad_alloc) 352 void
353 state::loadstring(const char *s, size_t len, const char *chunkname)
354 throw(lua::syntax_error, std::bad_alloc)
340 { 355 {
341 switch(luaL_loadstring(cobj, s)) { 356 reader_data data = { s, len };
357
358 switch(lua_load(cobj, string_reader, &data, chunkname)) {
342 case 0: 359 case 0:
343 return; 360 return;
344 case LUA_ERRSYNTAX: 361 case LUA_ERRSYNTAX: