Ver código fonte

Services/APT: Use the AppletAttributes union directly when dealing with applet attrs.

Subv 9 anos atrás
pai
commit
177e8ce655
1 arquivos alterados com 15 adições e 19 exclusões
  1. 15 19
      src/core/hle/service/apt/apt.cpp

+ 15 - 19
src/core/hle/service/apt/apt.cpp

@@ -60,11 +60,20 @@ enum class AppletSlot : u8 {
     Error,
     Error,
 };
 };
 
 
+union AppletAttributes {
+    u32 raw;
+
+    BitField<0, 3, u32> applet_pos;
+
+    AppletAttributes() : raw(0) {}
+    AppletAttributes(u32 attributes) : raw(attributes) {}
+};
+
 struct AppletSlotData {
 struct AppletSlotData {
     AppletId applet_id;
     AppletId applet_id;
     AppletSlot slot;
     AppletSlot slot;
     bool registered;
     bool registered;
-    u32 attributes;
+    AppletAttributes attributes;
     Kernel::SharedPtr<Kernel::Event> notification_event;
     Kernel::SharedPtr<Kernel::Event> notification_event;
     Kernel::SharedPtr<Kernel::Event> parameter_event;
     Kernel::SharedPtr<Kernel::Event> parameter_event;
 };
 };
@@ -72,19 +81,6 @@ struct AppletSlotData {
 // Holds data about the concurrently running applets in the system.
 // Holds data about the concurrently running applets in the system.
 static std::array<AppletSlotData, NumAppletSlot> applet_slots = {};
 static std::array<AppletSlotData, NumAppletSlot> applet_slots = {};
 
 
-union AppletAttributes {
-    u32 raw;
-
-    BitField<0, 3, u32> applet_pos;
-
-    AppletAttributes(u32 attributes) : raw(attributes) {}
-};
-
-// Helper function to extract the AppletPos from the lower bits of the applet attributes
-static u32 GetAppletPos(AppletAttributes attributes) {
-    return attributes.applet_pos;
-}
-
 // This overload returns nullptr if no applet with the specified id has been started.
 // This overload returns nullptr if no applet with the specified id has been started.
 static AppletSlotData* GetAppletSlotData(AppletId id) {
 static AppletSlotData* GetAppletSlotData(AppletId id) {
     auto GetSlot = [](AppletSlot slot) -> AppletSlotData* {
     auto GetSlot = [](AppletSlot slot) -> AppletSlotData* {
@@ -118,7 +114,7 @@ static AppletSlotData* GetAppletSlotData(AppletId id) {
         if (slot->applet_id == AppletId::None)
         if (slot->applet_id == AppletId::None)
             return nullptr;
             return nullptr;
 
 
-        u32 applet_pos = GetAppletPos(slot->attributes);
+        u32 applet_pos = slot->attributes.applet_pos;
 
 
         if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library))
         if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library))
             return slot;
             return slot;
@@ -146,13 +142,13 @@ static AppletSlotData* GetAppletSlotData(AppletId id) {
     return nullptr;
     return nullptr;
 }
 }
 
 
-static AppletSlotData* GetAppletSlotData(u32 attributes) {
+static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) {
     // Mapping from AppletPos to AppletSlot
     // Mapping from AppletPos to AppletSlot
     static constexpr std::array<AppletSlot, 6> applet_position_slots = {
     static constexpr std::array<AppletSlot, 6> applet_position_slots = {
         AppletSlot::Application,   AppletSlot::LibraryApplet, AppletSlot::SystemApplet,
         AppletSlot::Application,   AppletSlot::LibraryApplet, AppletSlot::SystemApplet,
         AppletSlot::LibraryApplet, AppletSlot::Error,         AppletSlot::LibraryApplet};
         AppletSlot::LibraryApplet, AppletSlot::Error,         AppletSlot::LibraryApplet};
 
 
-    u32 applet_pos = GetAppletPos(attributes);
+    u32 applet_pos = attributes.applet_pos;
     if (applet_pos >= applet_position_slots.size())
     if (applet_pos >= applet_position_slots.size())
         return nullptr;
         return nullptr;
 
 
@@ -194,7 +190,7 @@ void Initialize(Service::Interface* self) {
     }
     }
 
 
     slot_data->applet_id = static_cast<AppletId>(app_id);
     slot_data->applet_id = static_cast<AppletId>(app_id);
-    slot_data->attributes = attributes;
+    slot_data->attributes.raw = attributes;
 
 
     IPC::RequestBuilder rb = rp.MakeBuilder(1, 3);
     IPC::RequestBuilder rb = rp.MakeBuilder(1, 3);
     rb.Push(RESULT_SUCCESS);
     rb.Push(RESULT_SUCCESS);
@@ -1020,7 +1016,7 @@ void Init() {
         auto& slot_data = applet_slots[slot];
         auto& slot_data = applet_slots[slot];
         slot_data.slot = static_cast<AppletSlot>(slot);
         slot_data.slot = static_cast<AppletSlot>(slot);
         slot_data.applet_id = AppletId::None;
         slot_data.applet_id = AppletId::None;
-        slot_data.attributes = 0;
+        slot_data.attributes.raw = 0;
         slot_data.registered = false;
         slot_data.registered = false;
         slot_data.notification_event =
         slot_data.notification_event =
             Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification");
             Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification");