service/aoc: Pop all passed values where applicable
A few of the aoc service stubs/implementations weren't fully popping all of the parameters passed to them. This ensures that all parameters are popped and, at minimum, logged out.
This commit is contained in:
		
							parent
							
								
									195b54602f
								
							
						
					
					
						commit
						819d229e76
					
				@ -75,7 +75,15 @@ AOC_U::AOC_U() : ServiceFramework("aoc:u"), add_on_content(AccumulateAOCTitleIDs
 | 
			
		||||
AOC_U::~AOC_U() = default;
 | 
			
		||||
 | 
			
		||||
void AOC_U::CountAddOnContent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called");
 | 
			
		||||
    struct Parameters {
 | 
			
		||||
        u64 process_id;
 | 
			
		||||
    };
 | 
			
		||||
    static_assert(sizeof(Parameters) == 8);
 | 
			
		||||
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto params = rp.PopRaw<Parameters>();
 | 
			
		||||
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called. process_id={}", params.process_id);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
@ -94,23 +102,32 @@ void AOC_U::CountAddOnContent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOC_U::ListAddOnContent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    struct Parameters {
 | 
			
		||||
        u32 offset;
 | 
			
		||||
        u32 count;
 | 
			
		||||
        u64 process_id;
 | 
			
		||||
    };
 | 
			
		||||
    static_assert(sizeof(Parameters) == 16);
 | 
			
		||||
 | 
			
		||||
    const auto offset = rp.PopRaw<u32>();
 | 
			
		||||
    auto count = rp.PopRaw<u32>();
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called with offset={}, count={}", offset, count);
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto [offset, count, process_id] = rp.PopRaw<Parameters>();
 | 
			
		||||
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called with offset={}, count={}, process_id={}", offset, count,
 | 
			
		||||
              process_id);
 | 
			
		||||
 | 
			
		||||
    const auto current = Core::System::GetInstance().CurrentProcess()->GetTitleID();
 | 
			
		||||
 | 
			
		||||
    std::vector<u32> out;
 | 
			
		||||
    for (size_t i = 0; i < add_on_content.size(); ++i) {
 | 
			
		||||
        if ((add_on_content[i] & DLC_BASE_TITLE_ID_MASK) == current)
 | 
			
		||||
        if ((add_on_content[i] & DLC_BASE_TITLE_ID_MASK) == current) {
 | 
			
		||||
            out.push_back(static_cast<u32>(add_on_content[i] & 0x7FF));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto& disabled = Settings::values.disabled_addons[current];
 | 
			
		||||
    if (std::find(disabled.begin(), disabled.end(), "DLC") != disabled.end())
 | 
			
		||||
    if (std::find(disabled.begin(), disabled.end(), "DLC") != disabled.end()) {
 | 
			
		||||
        out = {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (out.size() < offset) {
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
@ -119,22 +136,31 @@ void AOC_U::ListAddOnContent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    count = static_cast<u32>(std::min<size_t>(out.size() - offset, count));
 | 
			
		||||
    const auto out_count = static_cast<u32>(std::min<size_t>(out.size() - offset, count));
 | 
			
		||||
    std::rotate(out.begin(), out.begin() + offset, out.end());
 | 
			
		||||
    out.resize(count);
 | 
			
		||||
    out.resize(out_count);
 | 
			
		||||
 | 
			
		||||
    ctx.WriteBuffer(out);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
    rb.Push(count);
 | 
			
		||||
    rb.Push(out_count);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOC_U::GetAddOnContentBaseId(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called");
 | 
			
		||||
    struct Parameters {
 | 
			
		||||
        u64 process_id;
 | 
			
		||||
    };
 | 
			
		||||
    static_assert(sizeof(Parameters) == 8);
 | 
			
		||||
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto params = rp.PopRaw<Parameters>();
 | 
			
		||||
 | 
			
		||||
    LOG_DEBUG(Service_AOC, "called. process_id={}", params.process_id);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 4};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
 | 
			
		||||
    const auto title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID();
 | 
			
		||||
    FileSys::PatchManager pm{title_id};
 | 
			
		||||
 | 
			
		||||
@ -148,10 +174,17 @@ void AOC_U::GetAddOnContentBaseId(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AOC_U::PrepareAddOnContent(Kernel::HLERequestContext& ctx) {
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    struct Parameters {
 | 
			
		||||
        s32 addon_index;
 | 
			
		||||
        u64 process_id;
 | 
			
		||||
    };
 | 
			
		||||
    static_assert(sizeof(Parameters) == 16);
 | 
			
		||||
 | 
			
		||||
    const auto aoc_id = rp.PopRaw<u32>();
 | 
			
		||||
    LOG_WARNING(Service_AOC, "(STUBBED) called with aoc_id={:08X}", aoc_id);
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
    const auto [addon_index, process_id] = rp.PopRaw<Parameters>();
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_AOC, "(STUBBED) called with addon_index={}, process_id={}", addon_index,
 | 
			
		||||
                process_id);
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
    rb.Push(RESULT_SUCCESS);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user