From 30414eeb4bcf78d3c3c775fe195f180cd8e29e91 Mon Sep 17 00:00:00 2001
From: Mat M <mathew1800@gmail.com>
Date: Mon, 4 May 2020 06:21:43 -0400
Subject: [PATCH] service/cfg: Make GenerateConsoleUniqueId() return a pair
 (#5321)

Same behavior, but allows the use of structured bindings.
---
 src/citra_qt/configuration/configure_system.cpp |  4 +---
 src/core/hle/service/cfg/cfg.cpp                | 15 +++++++++------
 src/core/hle/service/cfg/cfg.h                  | 12 +++++++-----
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp
index 32ea7b3f3..dc6ed2a1e 100644
--- a/src/citra_qt/configuration/configure_system.cpp
+++ b/src/citra_qt/configuration/configure_system.cpp
@@ -439,9 +439,7 @@ void ConfigureSystem::RefreshConsoleID() {
         return;
     }
 
-    u32 random_number;
-    u64 console_id;
-    cfg->GenerateConsoleUniqueId(random_number, console_id);
+    const auto [random_number, console_id] = cfg->GenerateConsoleUniqueId();
     cfg->SetConsoleUniqueId(random_number, console_id);
     cfg->UpdateConfigNANDSavegame();
     ui->label_console_id->setText(
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index bc37f733f..a7be7d277 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -465,9 +465,7 @@ ResultCode Module::FormatConfig() {
     if (!res.IsSuccess())
         return res;
 
-    u32 random_number;
-    u64 console_id;
-    GenerateConsoleUniqueId(random_number, console_id);
+    const auto [random_number, console_id] = GenerateConsoleUniqueId();
 
     u64_le console_id_le = console_id;
     res = CreateConfigInfoBlk(ConsoleUniqueID1BlockID, sizeof(console_id_le), 0xE, &console_id_le);
@@ -727,13 +725,18 @@ u8 Module::GetCountryCode() {
     return block.country_code;
 }
 
-void Module::GenerateConsoleUniqueId(u32& random_number, u64& console_id) {
+std::pair<u32, u64> Module::GenerateConsoleUniqueId() const {
     CryptoPP::AutoSeededRandomPool rng;
-    random_number = rng.GenerateWord32(0, 0xFFFF);
+    const u32 random_number = rng.GenerateWord32(0, 0xFFFF);
+
     u64_le local_friend_code_seed;
     rng.GenerateBlock(reinterpret_cast<CryptoPP::byte*>(&local_friend_code_seed),
                       sizeof(local_friend_code_seed));
-    console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48);
+
+    const u64 console_id =
+        (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48);
+
+    return std::make_pair(random_number, console_id);
 }
 
 ResultCode Module::SetConsoleUniqueId(u32 random_number, u64 console_id) {
diff --git a/src/core/hle/service/cfg/cfg.h b/src/core/hle/service/cfg/cfg.h
index 58e914583..715cf68b5 100644
--- a/src/core/hle/service/cfg/cfg.h
+++ b/src/core/hle/service/cfg/cfg.h
@@ -7,6 +7,7 @@
 #include <array>
 #include <memory>
 #include <string>
+#include <utility>
 #include <vector>
 #include "common/common_types.h"
 #include "core/hle/service/service.h"
@@ -383,12 +384,13 @@ public:
 
     /**
      * Generates a new random console unique id.
-     * @param random_number a random generated 16bit number stored at 0x90002, used for generating
-     * the
-     * console_id
-     * @param console_id the randomly created console id
+     *
+     * @returns A pair containing a random number and a random console ID.
+     *
+     * @note The random number is a random generated 16bit number stored at 0x90002, used for
+     *       generating the console ID.
      */
-    void GenerateConsoleUniqueId(u32& random_number, u64& console_id);
+    std::pair<u32, u64> GenerateConsoleUniqueId() const;
 
     /**
      * Sets the random_number and the  console unique id in the config savegame.