summaryrefslogtreecommitdiff
path: root/src/psp/registry.rs
blob: 49c1ed246d7a18779eeb5011b6b0091c29e41e92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
use super::c_void;

pub const SYSTEM_REGISTRY: [u8; 7] = *b"/system";
pub const REG_KEYNAME_SIZE: u32 = 27;

#[repr(transparent)]
#[allow(missing_copy_implementations)]
pub struct Handle(u32);

#[repr(C)]
#[derive(Copy, Clone)]
pub struct Key {
    pub key_type: KeyType,
    pub name: [u8; 256usize],
    pub name_len: u32,
    pub unk2: u32,
    pub unk3: u32,
}

#[repr(C)]
#[derive(Copy, Clone)]
pub enum KeyType {
    Directory = 1,
    Integer = 2,
    String = 3,
    Bytes = 4,
}

extern "C" {
    pub fn sceRegOpenRegistry(
        reg: *mut Key,
        mode: i32,
        handle: *mut Handle,
    ) -> i32;
    pub fn sceRegFlushRegistry(handle: Handle) -> i32;
    pub fn sceRegCloseRegistry(handle: Handle) -> i32;
    pub fn sceRegOpenCategory(
        handle: Handle,
        name: *const u8,
        mode: i32,
        dir_handle: *mut Handle,
    ) -> i32;
    pub fn sceRegRemoveCategory(
        handle: Handle,
        name: *const u8,
    ) -> i32;
    pub fn sceRegCloseCategory(dir_handle: Handle) -> i32;
    pub fn sceRegFlushCategory(dir_handle: Handle) -> i32;
    pub fn sceRegGetKeyInfo(
        dir_handle: Handle,
        name: *const u8,
        key_handle: *mut Handle,
        type_: *mut KeyType,
        size: *mut usize,
    ) -> i32;
    pub fn sceRegGetKeyInfoByName(
        dir_handle: Handle,
        name: *const u8,
        type_: *mut KeyType,
        size: *mut usize,
    ) -> i32;
    pub fn sceRegGetKeyValue(
        dir_handle: Handle,
        key_handle: Handle,
        buf: *mut c_void,
        size: usize,
    ) -> i32;
    pub fn sceRegGetKeyValueByName(
        dir_handle: Handle,
        name: *const u8,
        buf: *mut c_void,
        size: usize,
    ) -> i32;
    pub fn sceRegSetKeyValue(
        dir_handle: Handle,
        name: *const u8,
        buf: *const c_void,
        size: usize,
    ) -> i32;
    pub fn sceRegGetKeysNum(
        dir_handle: Handle,
        num: *mut i32,
    ) -> i32;
    pub fn sceRegGetKeys(
        dir_handle: Handle,
        buf: *mut u8,
        num: i32,
    ) -> i32;
    pub fn sceRegCreateKey(
        dir_handle: Handle,
        name: *const u8,
        type_: i32,
        size: usize,
    ) -> i32;
    pub fn sceRegRemoveRegistry(key: *mut Key) -> i32;
}