mirror of https://github.com/PCSX2/pcsx2.git
gzip iso: 2nd attempt to fix non-english file names (windows only)
This commit is contained in:
parent
f3bb434b27
commit
f2657ae450
|
@ -24,11 +24,24 @@
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
|
// This is ugly, but it's hard to find something which will work/compile for both
|
||||||
|
// windows and *nix and work with non-english file names.
|
||||||
|
// Maybe some day we'll convert all file related ops to wxWidgets, which means also the
|
||||||
|
// instances at zlib_indexed.h (which use plain stdio FILE*)
|
||||||
|
#ifdef WIN32
|
||||||
|
# define PX_wfilename(name_wxstr) (WX_STR(name_wxstr))
|
||||||
|
# define PX_fopen_rb(name_wxstr) (_wfopen(PX_wfilename(name_wxstr), L"rb"))
|
||||||
|
#else
|
||||||
|
# define PX_wfilename(name_wxstr) (name_wxstr.mbc_str())
|
||||||
|
# define PX_fopen_rb(name_wxstr) (fopen(PX_wfilename(name_wxstr), "rb"))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static s64 fsize(const wxString& filename) {
|
static s64 fsize(const wxString& filename) {
|
||||||
if (!wxFileName::FileExists(filename))
|
if (!wxFileName::FileExists(filename))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
std::ifstream f(filename.mbc_str(), std::ifstream::binary);
|
std::ifstream f(PX_wfilename(filename), std::ifstream::binary);
|
||||||
f.seekg(0, f.end);
|
f.seekg(0, f.end);
|
||||||
s64 size = f.tellg();
|
s64 size = f.tellg();
|
||||||
f.close();
|
f.close();
|
||||||
|
@ -49,7 +62,7 @@ static Access* ReadIndexFromFile(const wxString& filename) {
|
||||||
Console.Error(L"Error: Can't open index file: '%s'", WX_STR(filename));
|
Console.Error(L"Error: Can't open index file: '%s'", WX_STR(filename));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
std::ifstream infile(filename.mbc_str(), std::ifstream::binary);
|
std::ifstream infile(PX_wfilename(filename), std::ifstream::binary);
|
||||||
|
|
||||||
char fileId[GZIP_ID_LEN + 1] = { 0 };
|
char fileId[GZIP_ID_LEN + 1] = { 0 };
|
||||||
infile.read(fileId, GZIP_ID_LEN);
|
infile.read(fileId, GZIP_ID_LEN);
|
||||||
|
@ -83,7 +96,7 @@ static void WriteIndexToFile(Access* index, const wxString filename) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ofstream outfile(filename.mbc_str(), std::ofstream::binary);
|
std::ofstream outfile(PX_wfilename(filename), std::ofstream::binary);
|
||||||
outfile.write(GZIP_ID, GZIP_ID_LEN);
|
outfile.write(GZIP_ID, GZIP_ID_LEN);
|
||||||
|
|
||||||
Point* tmp = index->list;
|
Point* tmp = index->list;
|
||||||
|
@ -360,7 +373,7 @@ bool GzippedFileReader::OkIndex() {
|
||||||
Console.Warning(L"This may take a while (but only once). Scanning compressed file to generate a quick access index...");
|
Console.Warning(L"This may take a while (but only once). Scanning compressed file to generate a quick access index...");
|
||||||
|
|
||||||
Access *index;
|
Access *index;
|
||||||
FILE* infile = fopen(m_filename.mbc_str(), "rb");
|
FILE* infile = PX_fopen_rb(m_filename);
|
||||||
int len = build_index(infile, SPAN_DEFAULT, &index);
|
int len = build_index(infile, SPAN_DEFAULT, &index);
|
||||||
printf("\n"); // build_index prints progress without \n's
|
printf("\n"); // build_index prints progress without \n's
|
||||||
fclose(infile);
|
fclose(infile);
|
||||||
|
@ -381,7 +394,7 @@ bool GzippedFileReader::OkIndex() {
|
||||||
bool GzippedFileReader::Open(const wxString& fileName) {
|
bool GzippedFileReader::Open(const wxString& fileName) {
|
||||||
Close();
|
Close();
|
||||||
m_filename = fileName;
|
m_filename = fileName;
|
||||||
if (!(m_src = fopen(m_filename.mbc_str(), "rb")) || !CanHandle(fileName) || !OkIndex()) {
|
if (!(m_src = PX_fopen_rb(m_filename)) || !CanHandle(fileName) || !OkIndex()) {
|
||||||
Close();
|
Close();
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue