Commit Graph

94 Commits

Author SHA1 Message Date
Luke Street 0396cf467b Restore C++17 compatibility 2021-06-30 17:00:42 -04:00
Luke Street 0985c63958 Fix compile errors/typos; update logvisor 2021-06-30 16:22:50 -04:00
Luke Street c1635245b8 Use UTF-8 exclusively internally; replace iconv with OSUTF
Filenames are now unconditionally encoded/decoded as
Shift-JIS, which provides a reasonable fallback to
7-bit ASCII.
2021-06-30 13:47:10 -04:00
Phillip Stephens a525f60775
Assume CP_USA_ASCII by default in Node as well 2021-06-27 10:56:43 -07:00
Minty-Meeo 3c25647b6e The Encoding Update
While Nintendo's own documents claim GameCube and Wii disc file symbol tables only support 7-bit ASCII, this is far from the truth.  Indeed, even some first-party Nintendo games shipped with Shift-JIS encoded file symbol tables.  My guess?  The locale of whatever Windows machine mastered a GameCube or Wii disc influenced how wide character strings (UCS-2) were converted to narrow character strings.  To account for all possibilites, this update adds extensible multi-byte character set options to NOD-Tool.

A rundown of notable changes:
 - "-c XXXXX" option added to set the encoding of the GameCube / Wii ISO(s) being processed.
 - "SystemStringConv" renamed to "DiscLocToSystemConv"
 - "SystemUTF8Conv" renamed to "SystemToDiscLocConv"
 - Help message updated with new info.
 - Bugfix: AddBuildName had a logic error wherein the length of the SystemString was being used instead of length of the disc locale string.  This would corrupt the File Symbol Table if the disc locale string's length was greater than the SystemString's length.
 - Bugfix: recursiveMergeFST was not keeping track of parent indexes at all, meaning nested folders and their contents would be corrupted.  I simply copied the way recursiveBuildFST did things to fix this.
 - Bugfix (Windows): On Windows, for some reason, Sstat was a typedef for _stat (32-bit) instead of _stat64 (64-bit).  This is confounding, because untrimmed Wii ISOs will always be larger than the unsigned 32-bit integer limit (4,699,979,776 bytes vs 4,294,967,295 bytes), meaning the MergeWii errand has never worked for untrimmed ISOs on Windows.  Was this never tested??
 - Bugfix (Windows): Did you know Windows Command Prompt fully supports Unicode?  Stdio streams are now in _O_U16TEXT mode for Windows only.  Previously, attempting to print any character that could not be narrowed to your locale's encoding would either silently fail (std functions), or throw an exception (fmt functions).  As a minor drawback, narrow character print functions can no longer be used when stdio is in _O_U16TEXT mode, necessitating my PR for Logvisor here: (AxioDL/logvisor#7)
 - ExtractionContext::progressCB now uses SystemStringView because widechar printing works correctly on Windows now.
 - progFunc lambda no longer throws exceptions when printing unicode because widechar printing works correctly on Windows now.
 - Top-level constructors and functions with a Codepage_t parameter have also signatures that default to the US-ASCII codepage.
    - DiscGCN constructor
    - DiscBuilderGCN constructor
    - DiscBuilderGCN::CalculateTotalSizeRequired
    - DiscMergerGCN constructor
    - DiscMergerGCN::CalculateTotalSizeRequired
    - DiscWii constructor
    - DiscBuilderWii constructor
    - DiscBuilderWii::CalculateTotalSizeRequired
    - DiscMergerWii constructor
    - DiscMergerWii::CalculateTotalSizeRequired
    - OpenDiscFromImage
 - Conversion between system encoding and disc locale encoding has checks in place to warn the user if string conversion goes awry.
2021-06-27 03:26:20 -05:00
Jack Andersen 2783337c36 Update fmtlib 2020-04-11 12:45:06 -10:00
Jack Andersen 48a2981a93 Shared NFS data class not necessary 2019-11-24 13:47:48 -10:00
Jack Andersen 75fc574f81 Support for Wii U VC NFS images 2019-11-23 17:24:33 -10:00
Jack Andersen 11a0351d1c Merge branch 'master' of ssh://git.axiodl.com:6431/AxioDL/nod 2019-09-30 21:30:57 -10:00
Jack Andersen 4ec6c6697b Update logvisor 2019-09-30 21:30:42 -10:00
Lioncash 221bc7c7f2 General: Be explicit about athena's SeekOrigin type
Allows this code to function if the enum is turned into an enum class.
2019-09-08 17:29:38 -04:00
Henrique Gemignani Passos Lima 091262ace1 Use std::optional for CalculateTotalSizeBuild 2019-09-06 22:17:06 +02:00
Lioncash f5c3cbdcd7 DiscBase: Amend typo within getPartitonNodeCount() name
Adds an extra 'i' to correct a typo.
2019-09-05 21:57:44 -04:00
Lioncash 7ddff919c1 DiscBase: Prevent potential off-by-one case within getPartitonNodeCount()
We should be comparing with >= instead of >.
2019-09-05 21:56:49 -04:00
Lioncash 4bba7af2c2 DiscBase: std::move std::function instance
std::function isn't a trivial type (it's allowed to heap allocate to
store any necessary captures), so we can move it in the constructor to
avoid any unnecessary allocations
2019-09-05 21:52:43 -04:00
Lioncash f443b60bde DiscBase: Mark member functions as const where applicable
These don't modify instance state, so they can be marked as const.
2019-09-05 21:51:20 -04:00
Lioncash 998d6a77c3 General: Remove redundant inline keyword
Functions defined within the class declaration are already inline by
default, so we don't need to specify the keyword here.
2019-09-05 21:48:07 -04:00
Lioncash 5935e84dab General: Include headers directly where necessary
Ensures includes are explicitly included where necessary to avoid
indirect inclusions.
2019-08-30 04:34:49 -04:00
Phillip Stephens 255a37216f Merge branch 'override' of git://github.com/lioncash/nod into lioncash-override 2019-08-09 23:14:32 -07:00
Lioncash 2171388b9d General: Make use of override where applicable
Makes it explicit where functions are being overridden in derived
classes/structs.
2019-08-10 01:41:44 -04:00
Lioncash a572439967 DirectoryEnumerator: Handle non-null-terminated strings in CaseInsensitiveCompare
std::string_view instances aren't required to be null terminated. Given
this, we can make the functions a little safer by performing an explicit
bounded comparison on the range of characters, making the code more
generic with regards to handling the underlying string data.
2019-08-10 01:16:21 -04:00
Jack Andersen 37792ba116 Massive libfmt refactor 2019-07-19 18:21:57 -10:00
Jack Andersen be8409681f New code style refactor 2018-12-07 19:21:47 -10:00
Jack Andersen 3d380fdc3b macOS build fixes 2018-10-15 17:16:08 -10:00
Jack Andersen f87b286ff3 Windows build fixes 2018-10-14 10:11:28 -10:00
Jack Andersen e964a013fe Convert to pragma once 2018-10-06 17:39:24 -10:00
Jack Andersen d5f5db440c Windows build fixes and warning avoidance 2018-05-24 20:38:06 -10:00
Jack Andersen a557f86974 Huge compile performance refactor 2017-12-28 21:57:54 -10:00
Jack Andersen 34de6276b0 UWP fix 2017-12-06 18:11:03 -10:00
Jack Andersen 3d70a568dc UWP support 2017-12-05 17:23:58 -10:00
Jack Andersen 27a2cb5998 string_view refactor 2017-11-12 20:18:53 -10:00
Jack Andersen d597400f4a Fix FST parent directory index 2017-07-11 19:13:44 -10:00
Phillip Stephens 72169e8e77 Added `writeSysFiles` for convience of integration 2017-07-09 01:25:43 -07:00
Jack Andersen 6454d68abc Windows Fixes 2017-07-01 20:08:26 -10:00
Jack Andersen 2a472651ae Proper extract structure for GCN images 2017-07-01 19:39:41 -10:00
Jack Andersen 41148a1368 Refactor of extracted directory structure and API simplification 2017-07-01 13:36:16 -10:00
Phillip Stephens e49568ac83 Initial modifications to support Dolphin's VolumeDirectory 2017-06-30 03:30:10 -07:00
cylgom 82edc597ba fixed functional include 2017-06-07 20:05:21 +02:00
Jack Andersen dd20c1d255 Add floating point progress to builder callbacks 2017-05-21 23:12:48 -04:00
Phillip Stephens e494dbba9f Add completion percentage to ExtractionContext's callback 2017-05-21 03:26:22 -07:00
Phillip Stephens 2bc7c4e568 Add DiscBase::getPartitionNodeCount 2017-05-20 23:00:11 -07:00
Jack Andersen dc474ad156 Major refactor, better error handling and directory/image merge 2017-02-04 20:19:34 -10:00
Jack Andersen d106299a11 Remove unnecessary and RVO-detrimental moves 2016-10-02 18:37:20 -10:00
Jack Andersen 556a5868bb Humungous refactor 2016-03-04 13:04:30 -10:00
Jack Andersen 48f79b2369 File-size limiting 2016-02-02 11:18:16 -10:00
Jack Andersen 528b5cad0c Minor fixes 2016-01-25 20:39:49 -10:00
Jack Andersen 02a7b95606 CheckFreeSpace POSIX fix 2016-01-25 16:01:55 -10:00
Jack Andersen df5e8d068c Removed direct stdio usage 2016-01-24 19:55:31 -10:00
Jack Andersen 9ce2e0a3b2 Additional windows additions 2016-01-24 16:13:09 -10:00
Jack Andersen 044a393ff8 Merge branch 'master' of https://github.com/AxioDL/NODLib 2016-01-24 16:12:26 -10:00