diff options
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/service/acc/acc.cpp | 17 | ||||
| -rw-r--r-- | src/core/hle/service/acc/profile_manager.cpp | 5 | ||||
| -rw-r--r-- | src/core/hle/service/acc/profile_manager.h | 14 | 
3 files changed, 19 insertions, 17 deletions
| diff --git a/src/core/hle/service/acc/acc.cpp b/src/core/hle/service/acc/acc.cpp index c629f9357..9521431bb 100644 --- a/src/core/hle/service/acc/acc.cpp +++ b/src/core/hle/service/acc/acc.cpp @@ -21,17 +21,6 @@  namespace Service::Account { -// TODO: RE this structure -struct UserData { -    INSERT_PADDING_WORDS(1); -    u32 icon_id; -    u8 bg_color_id; -    INSERT_PADDING_BYTES(0x7); -    INSERT_PADDING_BYTES(0x10); -    INSERT_PADDING_BYTES(0x60); -}; -static_assert(sizeof(UserData) == 0x80, "UserData structure has incorrect size"); -  // Smallest JPEG https://github.com/mathiasbynens/small/blob/master/jpeg.jpg  // used as a backup should the one on disk not exist  constexpr u32 backup_jpeg_size = 107; @@ -72,9 +61,11 @@ private:      void Get(Kernel::HLERequestContext& ctx) {          LOG_INFO(Service_ACC, "called user_id={}", user_id.Format());          ProfileBase profile_base{}; -        std::array<u8, MAX_DATA> data{}; +        ProfileData data{};          if (profile_manager.GetProfileBaseAndData(user_id, profile_base, data)) { -            ctx.WriteBuffer(data); +            std::array<u8, sizeof(ProfileData)> raw_data; +            std::memcpy(raw_data.data(), &data, sizeof(ProfileData)); +            ctx.WriteBuffer(raw_data);              IPC::ResponseBuilder rb{ctx, 16};              rb.Push(RESULT_SUCCESS);              rb.PushRaw(profile_base); diff --git a/src/core/hle/service/acc/profile_manager.cpp b/src/core/hle/service/acc/profile_manager.cpp index 968263846..1316d0b07 100644 --- a/src/core/hle/service/acc/profile_manager.cpp +++ b/src/core/hle/service/acc/profile_manager.cpp @@ -18,7 +18,7 @@ struct UserRaw {      UUID uuid2;      u64 timestamp;      ProfileUsername username; -    INSERT_PADDING_BYTES(0x80); +    ProfileData extra_data;  };  static_assert(sizeof(UserRaw) == 0xC8, "UserRaw has incorrect size."); @@ -346,7 +346,7 @@ void ProfileManager::ParseUserSaveFile() {              continue;          } -        AddUser({user.uuid, user.username, user.timestamp, {}, false}); +        AddUser({user.uuid, user.username, user.timestamp, user.extra_data, false});      }      std::stable_partition(profiles.begin(), profiles.end(), @@ -361,6 +361,7 @@ void ProfileManager::WriteUserSaveFile() {          raw.users[i].uuid2 = profiles[i].user_uuid;          raw.users[i].uuid = profiles[i].user_uuid;          raw.users[i].timestamp = profiles[i].creation_time; +        raw.users[i].extra_data = profiles[i].data;      }      const auto raw_path = diff --git a/src/core/hle/service/acc/profile_manager.h b/src/core/hle/service/acc/profile_manager.h index d2d8e6c6b..c4ce2e0b3 100644 --- a/src/core/hle/service/acc/profile_manager.h +++ b/src/core/hle/service/acc/profile_manager.h @@ -13,7 +13,6 @@  namespace Service::Account {  constexpr std::size_t MAX_USERS = 8; -constexpr std::size_t MAX_DATA = 128;  constexpr u128 INVALID_UUID{{0, 0}};  struct UUID { @@ -50,9 +49,20 @@ static_assert(sizeof(UUID) == 16, "UUID is an invalid size!");  constexpr std::size_t profile_username_size = 32;  using ProfileUsername = std::array<u8, profile_username_size>; -using ProfileData = std::array<u8, MAX_DATA>;  using UserIDArray = std::array<UUID, MAX_USERS>; +/// Contains extra data related to a user. +/// TODO: RE this structure +struct ProfileData { +    INSERT_PADDING_WORDS(1); +    u32 icon_id; +    u8 bg_color_id; +    INSERT_PADDING_BYTES(0x7); +    INSERT_PADDING_BYTES(0x10); +    INSERT_PADDING_BYTES(0x60); +}; +static_assert(sizeof(ProfileData) == 0x80, "ProfileData structure has incorrect size"); +  /// This holds general information about a users profile. This is where we store all the information  /// based on a specific user  struct ProfileInfo { | 
