Files
LuaCangjia_api/lib/lua/src/mem.c
JianFeeeee f2deb81e4a vendor: 引入 Lua 2.5 官方源码 + 移植评估 (lua_2.5 分支)
- 前 lua_State 时代 API, 比 3.2 更原始(无 upvalue/无独立编译)
- 评估结论: 不建议移植(多实例冲突+管道模式不可实现), 见 doc/ADAPTATION-lua25.md
- 建议历史脚本用 5.1 兼容模式运行替代
2026-08-25 10:20:25 +08:00

59 lines
1.1 KiB
C

/*
** mem.c
** TecCGraf - PUC-Rio
*/
char *rcs_mem = "$Id: mem.c,v 1.13 1996/05/24 14:31:10 roberto Exp $";
#include <stdlib.h>
#include "mem.h"
#include "lua.h"
void luaI_free (void *block)
{
if (block)
{
*((int *)block) = -1; /* to catch errors */
free(block);
}
}
void *luaI_realloc (void *oldblock, unsigned long size)
{
void *block;
size_t s = (size_t)size;
if (s != size)
lua_error("Allocation Error: Block too big");
block = oldblock ? realloc(oldblock, s) : malloc(s);
if (block == NULL)
lua_error(memEM);
return block;
}
int luaI_growvector (void **block, unsigned long nelems, int size,
char *errormsg, unsigned long limit)
{
if (nelems >= limit)
lua_error(errormsg);
nelems = (nelems == 0) ? 20 : nelems*2;
if (nelems > limit)
nelems = limit;
*block = luaI_realloc(*block, nelems*size);
return (int)nelems;
}
void* luaI_buffer (unsigned long size)
{
static unsigned long buffsize = 0;
static char* buffer = NULL;
if (size > buffsize)
buffer = luaI_realloc(buffer, buffsize=size);
return buffer;
}