Merge xam-user-signin-state/p0-canary-mirror
This commit is contained in:
@@ -45,7 +45,7 @@ pub fn register_exports(state: &mut KernelState) {
|
|||||||
// User
|
// User
|
||||||
state.register_export(Xam, 0x020A, "XamUserGetXUID", xam_user_get_xuid);
|
state.register_export(Xam, 0x020A, "XamUserGetXUID", xam_user_get_xuid);
|
||||||
state.register_export(Xam, 0x020E, "XamUserGetName", xam_user_get_name);
|
state.register_export(Xam, 0x020E, "XamUserGetName", xam_user_get_name);
|
||||||
state.register_export(Xam, 0x0210, "XamUserGetSigninState", stub_return_zero);
|
state.register_export(Xam, 0x0210, "XamUserGetSigninState", xam_user_get_signin_state);
|
||||||
state.register_export(Xam, 0x0219, "XamUserReadProfileSettings", xam_user_read_profile_settings);
|
state.register_export(Xam, 0x0219, "XamUserReadProfileSettings", xam_user_read_profile_settings);
|
||||||
state.register_export(Xam, 0x021A, "XamUserWriteProfileSettings", stub_success);
|
state.register_export(Xam, 0x021A, "XamUserWriteProfileSettings", stub_success);
|
||||||
|
|
||||||
@@ -329,6 +329,12 @@ fn xam_user_read_profile_settings(ctx: &mut PpcContext, _mem: &GuestMemory, _sta
|
|||||||
ctx.gpr[3] = 0x0000_048B; // ERROR_NOT_FOUND
|
ctx.gpr[3] = 0x0000_048B; // ERROR_NOT_FOUND
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn xam_user_get_signin_state(ctx: &mut PpcContext, _mem: &GuestMemory, _state: &mut KernelState) {
|
||||||
|
// r3 = user_index
|
||||||
|
let user_index = ctx.gpr[3] as u32;
|
||||||
|
ctx.gpr[3] = if user_index == 0 { 1 } else { 0 };
|
||||||
|
}
|
||||||
|
|
||||||
// ===== System =====
|
// ===== System =====
|
||||||
|
|
||||||
fn xam_get_execution_id(ctx: &mut PpcContext, mem: &GuestMemory, state: &mut KernelState) {
|
fn xam_get_execution_id(ctx: &mut PpcContext, mem: &GuestMemory, state: &mut KernelState) {
|
||||||
@@ -572,6 +578,22 @@ mod tests {
|
|||||||
assert_eq!(ctx.gpr[3], 8);
|
assert_eq!(ctx.gpr[3], 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn xam_user_get_signin_state_user0_signed_in_locally() {
|
||||||
|
let (mut ctx, mem, mut state) = fresh();
|
||||||
|
ctx.gpr[3] = 0;
|
||||||
|
xam_user_get_signin_state(&mut ctx, &mem, &mut state);
|
||||||
|
assert_eq!(ctx.gpr[3], 1);
|
||||||
|
|
||||||
|
ctx.gpr[3] = 1;
|
||||||
|
xam_user_get_signin_state(&mut ctx, &mem, &mut state);
|
||||||
|
assert_eq!(ctx.gpr[3], 0);
|
||||||
|
|
||||||
|
ctx.gpr[3] = 4;
|
||||||
|
xam_user_get_signin_state(&mut ctx, &mem, &mut state);
|
||||||
|
assert_eq!(ctx.gpr[3], 0);
|
||||||
|
}
|
||||||
|
|
||||||
fn drain_notifications(state: &mut KernelState, mem: &GuestMemory, handle: u32) -> Vec<(u32, u32)> {
|
fn drain_notifications(state: &mut KernelState, mem: &GuestMemory, handle: u32) -> Vec<(u32, u32)> {
|
||||||
let id_ptr = SCRATCH_BASE + 0x100;
|
let id_ptr = SCRATCH_BASE + 0x100;
|
||||||
let param_ptr = SCRATCH_BASE + 0x104;
|
let param_ptr = SCRATCH_BASE + 0x104;
|
||||||
|
|||||||
Reference in New Issue
Block a user