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