| 785 | } |
| 786 | |
| 787 | uint32_t CheckTable(lua_State* L, char* buffer, uint32_t buffer_size, int index) |
| 788 | { |
| 789 | assert((intptr_t)buffer % 16 == 0); |
| 790 | if (buffer_size > sizeof(TableHeader)) { |
| 791 | char* original_buffer = buffer; |
| 792 | |
| 793 | TableHeader* header = (TableHeader*)buffer; |
| 794 | header->m_Magic = TABLE_MAGIC; |
| 795 | header->m_Version = TABLE_VERSION_BASE; |
| 796 | buffer += sizeof(TableHeader); |
| 797 | buffer_size -= (buffer - original_buffer); |
| 798 | |
| 799 | dmArray<const void*> table_stack; |
| 800 | return sizeof(TableHeader) + DoCheckTable(L, *header, original_buffer, buffer, buffer_size, index, table_stack); |
| 801 | } else { |
| 802 | luaL_error(L, "buffer (%d bytes) too small for header (%zu bytes)", buffer_size, sizeof(TableHeader)); |
| 803 | return 0; |
| 804 | } |
| 805 | } |
| 806 | |
| 807 | const char* ReadHeader(const char* buffer, TableHeader& header) |
| 808 | { |