int LS_VirtualDrive_ProcessFileList(LuaState* state, LuaStackObject* args) { VirtualDrive* drive = VirtualDriveFromLua(state, args[1]); if (args[2].IsTable()) { VirtualDrive::FileOrderInfoArray fileOrder; VirtualDrive::FileOrderInfo info; LuaObject tableObj = args[2]; int index = 1; while (true) { LuaObject entryNameObj = tableObj[index++]; if (!entryNameObj.IsString()) break; info.entryName = entryNameObj.GetString(); LuaObject srcPathObj = tableObj[index++]; if (srcPathObj.IsNil()) break; info.srcPath = srcPathObj.GetString(); info.compressionMethod = 8; LuaObject compressionMethodObj = tableObj[index]; if (compressionMethodObj.IsNumber()) { info.compressionMethod = compressionMethodObj.GetInteger(); index++; } fileOrder.Add(info); } bool ret = drive->ProcessFileList(fileOrder); state->PushBoolean(ret); if (!ret) { state->PushString(drive->errorString); return 2; } return 1; } if (args[2].IsString()) { state->PushBoolean(drive->ProcessFileList(args[2].GetString()) != 0); return 1; } return 0; }