** returns a pointer to a free area with at least 'sz' bytes */
| 503 | ** returns a pointer to a free area with at least 'sz' bytes |
| 504 | */ |
| 505 | LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) { |
| 506 | lua_State *L = B->L; |
| 507 | if (B->size - B->n < sz) { /* not enough space? */ |
| 508 | char *newbuff; |
| 509 | size_t newsize = B->size * 2; /* double buffer size */ |
| 510 | if (newsize - B->n < sz) /* not big enough? */ |
| 511 | newsize = B->n + sz; |
| 512 | if (newsize < B->n || newsize - B->n < sz) |
| 513 | luaL_error(L, "buffer too large"); |
| 514 | /* create larger buffer */ |
| 515 | if (buffonstack(B)) |
| 516 | newbuff = (char *)resizebox(L, -1, newsize); |
| 517 | else { /* no buffer yet */ |
| 518 | newbuff = (char *)newbox(L, newsize); |
| 519 | memcpy(newbuff, B->b, B->n * sizeof(char)); /* copy original content */ |
| 520 | } |
| 521 | B->b = newbuff; |
| 522 | B->size = newsize; |
| 523 | } |
| 524 | return &B->b[B->n]; |
| 525 | } |
| 526 | |
| 527 | |
| 528 | LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { |
no test coverage detected