summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO
diff options
context:
space:
mode:
authorShawn Hoffman <godisgovernment@gmail.com>2012-02-27 22:36:41 -0800
committerShawn Hoffman <godisgovernment@gmail.com>2012-02-27 22:36:41 -0800
commit6eb2cb266663d6a7a70f6e9e233cb1bf2967cd4d (patch)
treefe60ac36b66199f775b9606aaea259bcc448c3d5 /Source/Core/DiscIO
parent6ccb30ac5fd7dfb51f41adf2d7fce159d4d0c174 (diff)
parentee09def802f9883056a2dc43136e65922dcccee2 (diff)
Merge branch 'master' into wii-network
Diffstat (limited to 'Source/Core/DiscIO')
-rw-r--r--Source/Core/DiscIO/Src/BannerLoaderWii.cpp85
-rw-r--r--Source/Core/DiscIO/Src/BannerLoaderWii.h25
-rw-r--r--Source/Core/DiscIO/Src/NANDContentLoader.cpp32
-rw-r--r--Source/Core/DiscIO/Src/NANDContentLoader.h2
4 files changed, 76 insertions, 68 deletions
diff --git a/Source/Core/DiscIO/Src/BannerLoaderWii.cpp b/Source/Core/DiscIO/Src/BannerLoaderWii.cpp
index ab66a346d4..b23dc4d91a 100644
--- a/Source/Core/DiscIO/Src/BannerLoaderWii.cpp
+++ b/Source/Core/DiscIO/Src/BannerLoaderWii.cpp
@@ -144,45 +144,59 @@ bool CBannerLoaderWii::GetBanner(u32* _pBannerImage)
return true;
}
-bool CBannerLoaderWii::GetName(std::string* _rName)
+bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::string& s)
{
+ bool ret = false;
+
if (IsValid())
{
// find Banner type
- SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
+ SWiiBanner *pBanner = (SWiiBanner*)m_pBannerFile;
- std::string name;
- if (CopyBeUnicodeToString(name, pBanner->m_Comment[0], WII_BANNER_COMMENT_SIZE))
- {
- for (int i = 0; i < 6; i++)
- {
- _rName[i] = name;
- }
- return true;
- }
+ // Ensure the string is null-terminating, since the banner format
+ // doesn't require it
+ u16 *src = new u16[COMMENT_SIZE + 1];
+ memcpy(src, &pBanner->m_Comment[index], COMMENT_SIZE * sizeof(u16));
+ src[COMMENT_SIZE] = 0;
+
+ ret = CopyBeUnicodeToString(s, src, COMMENT_SIZE + 1);
+
+ delete [] src;
}
- return false;
+
+ return ret;
}
-bool CBannerLoaderWii::GetName(std::vector<std::wstring>& _rNames)
+bool CBannerLoaderWii::GetStringFromComments(const CommentIndex index, std::wstring& s)
{
if (IsValid())
{
// find Banner type
SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
- std::wstring temp;
- for (int i = 0; i < WII_BANNER_COMMENT_SIZE; ++i)
- {
- temp.push_back(Common::swap16(pBanner->m_Comment[0][i]));
- }
- _rNames.push_back(temp);
+ std::wstring description;
+ for (int i = 0; i < COMMENT_SIZE; ++i)
+ description.push_back(Common::swap16(pBanner->m_Comment[index][i]));
+
+ s = description;
return true;
}
-
return false;
}
+bool CBannerLoaderWii::GetName(std::string* _rName)
+{
+ return GetStringFromComments(NAME_IDX, *_rName);
+}
+
+bool CBannerLoaderWii::GetName(std::vector<std::wstring>& _rNames)
+{
+ std::wstring temp;
+ bool ret = GetStringFromComments(NAME_IDX, temp);
+ _rNames.push_back(temp);
+ return ret;
+}
+
bool CBannerLoaderWii::GetCompany(std::string& _rCompany)
{
_rCompany = "N/A";
@@ -191,39 +205,12 @@ bool CBannerLoaderWii::GetCompany(std::string& _rCompany)
bool CBannerLoaderWii::GetDescription(std::string* _rDescription)
{
- if (IsValid())
- {
- // find Banner type
- SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
-
- std::string description;
- if (CopyBeUnicodeToString(description, pBanner->m_Comment[1], WII_BANNER_COMMENT_SIZE))
- {
- for (int i = 0; i< 6; i++)
- {
- _rDescription[i] = description;
- }
- return true;
- }
- }
- return false;
+ return GetStringFromComments(DESC_IDX, *_rDescription);
}
bool CBannerLoaderWii::GetDescription(std::wstring& _rDescription)
{
- if (IsValid())
- {
- // find Banner type
- SWiiBanner* pBanner = (SWiiBanner*)m_pBannerFile;
-
- std::wstring description;
- for (int i = 0; i < WII_BANNER_COMMENT_SIZE; ++i)
- description.push_back(Common::swap16(pBanner->m_Comment[1][i]));
-
- _rDescription = description;
- return true;
- }
- return false;
+ return GetStringFromComments(DESC_IDX, _rDescription);
}
void CBannerLoaderWii::decode5A3image(u32* dst, u16* src, int width, int height)
diff --git a/Source/Core/DiscIO/Src/BannerLoaderWii.h b/Source/Core/DiscIO/Src/BannerLoaderWii.h
index bfc87dc19e..83733cf5ed 100644
--- a/Source/Core/DiscIO/Src/BannerLoaderWii.h
+++ b/Source/Core/DiscIO/Src/BannerLoaderWii.h
@@ -47,9 +47,18 @@ class CBannerLoaderWii
private:
- #define WII_BANNER_TEXTURE_SIZE (192 * 64 * 2)
- #define WII_BANNER_ICON_SIZE ( 48 * 48 * 2)
- #define WII_BANNER_COMMENT_SIZE 32
+ enum
+ {
+ TEXTURE_SIZE = 192 * 64 * 2,
+ ICON_SIZE = 48 * 48 * 2,
+ COMMENT_SIZE = 32
+ };
+
+ enum CommentIndex
+ {
+ NAME_IDX,
+ DESC_IDX
+ };
struct SWiiBanner
{
@@ -59,9 +68,10 @@ class CBannerLoaderWii
u16 m_Speed;
u8 m_Unknown[22];
- u16 m_Comment[2][WII_BANNER_COMMENT_SIZE];
- u8 m_BannerTexture[WII_BANNER_TEXTURE_SIZE];
- u8 m_IconTexture[8][WII_BANNER_ICON_SIZE];
+ // Not null terminated!
+ u16 m_Comment[2][COMMENT_SIZE];
+ u8 m_BannerTexture[TEXTURE_SIZE];
+ u8 m_IconTexture[8][ICON_SIZE];
} ;
u8* m_pBannerFile;
@@ -69,6 +79,9 @@ class CBannerLoaderWii
bool m_IsValid;
void decode5A3image(u32* dst, u16* src, int width, int height);
+
+ bool GetStringFromComments(const CommentIndex index, std::string& s);
+ bool GetStringFromComments(const CommentIndex index, std::wstring& s);
};
} // namespace
diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.cpp b/Source/Core/DiscIO/Src/NANDContentLoader.cpp
index c8e409636b..f010b7ed98 100644
--- a/Source/Core/DiscIO/Src/NANDContentLoader.cpp
+++ b/Source/Core/DiscIO/Src/NANDContentLoader.cpp
@@ -191,6 +191,8 @@ const SNANDContent* CNANDContentLoader::GetContentByIndex(int _Index) const
bool CNANDContentLoader::Initialize(const std::string& _rName)
{
+ if (_rName.empty())
+ return false;
m_Path = _rName;
WiiWAD Wad(_rName);
u8* pDataApp = NULL;
@@ -221,7 +223,7 @@ bool CNANDContentLoader::Initialize(const std::string& _rName)
File::IOFile pTMDFile(TMDFileName, "rb");
if (!pTMDFile)
{
- ERROR_LOG(DISCIO, "CreateFromDirectory: error opening %s",
+ DEBUG_LOG(DISCIO, "CreateFromDirectory: error opening %s",
TMDFileName.c_str());
return false;
}
@@ -536,20 +538,14 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName)
pTMDFile.Close();
- //Extract and copy WAD's ticket to ticket directory
- std::string TicketFileName = Common::GetTicketFileName(TitleID);
- File::CreateFullPath(TicketFileName);
- File::IOFile pTicketFile(TicketFileName, "wb");
- if (!pTicketFile)
- {
- PanicAlertT("WAD installation failed: error creating %s", TicketFileName.c_str());
- return 0;
- }
- if (ContentLoader.GetTIK())
+
+ //Extract and copy WAD's ticket to ticket directory
+ if (!Add_Ticket(TitleID, ContentLoader.GetTIK(), ContentLoader.GetTIKSize()))
{
- pTicketFile.WriteBytes(ContentLoader.GetTIK(), ContentLoader.GetTIKSize());
+ PanicAlertT("WAD installation failed: error creating ticket");
+ return 0;
}
cUIDsys::AccessInstance().AddTitle(TitleID);
@@ -558,6 +554,18 @@ u64 CNANDContentManager::Install_WiiWAD(std::string &fileName)
return TitleID;
}
+bool Add_Ticket(u64 TitleID, const u8 *p_tik, u32 tikSize)
+{
+ std::string TicketFileName = Common::GetTicketFileName(TitleID);
+ File::CreateFullPath(TicketFileName);
+ File::IOFile pTicketFile(TicketFileName, "wb");
+ if (!pTicketFile || !p_tik)
+ {
+ //PanicAlertT("WAD installation failed: error creating %s", TicketFileName.c_str());
+ return false;
+ }
+ return pTicketFile.WriteBytes(p_tik, tikSize);
+}
} // namespace end
diff --git a/Source/Core/DiscIO/Src/NANDContentLoader.h b/Source/Core/DiscIO/Src/NANDContentLoader.h
index 14a2062641..63135df693 100644
--- a/Source/Core/DiscIO/Src/NANDContentLoader.h
+++ b/Source/Core/DiscIO/Src/NANDContentLoader.h
@@ -29,7 +29,7 @@
namespace DiscIO
{
-
+ bool Add_Ticket(u64 TitleID, const u8 *p_tik, u32 tikSize);
struct SNANDContent
{
u32 m_ContentID;