diff options
| -rw-r--r-- | lauxlib.c | 17 |
1 files changed, 14 insertions, 3 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lauxlib.c,v 1.200 2010/02/18 19:32:41 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.201 2010/02/18 19:37:57 roberto Exp roberto $ |
| 3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -393,8 +393,19 @@ LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B) { | |||
| 393 | 393 | ||
| 394 | 394 | ||
| 395 | LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { | 395 | LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { |
| 396 | while (l--) | 396 | while (l) { |
| 397 | luaL_addchar(B, *s++); | 397 | size_t space = bufffree(B); |
| 398 | if (space == 0) { | ||
| 399 | luaL_prepbuffer(B); | ||
| 400 | lua_assert(bufffree(B) == LUAL_BUFFERSIZE); | ||
| 401 | space = LUAL_BUFFERSIZE; | ||
| 402 | } | ||
| 403 | if (space > l) space = l; | ||
| 404 | memcpy(B->p, s, space); | ||
| 405 | B->p += space; | ||
| 406 | s += space; | ||
| 407 | l -= space; | ||
| 408 | } | ||
| 398 | } | 409 | } |
| 399 | 410 | ||
| 400 | 411 | ||
