Attempt to fix issue r3458. I don't have a 32bit linux install, however I know it will at least fix compressing. Please test if uncompressed games run.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6510 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Shawn Hoffman 2010-12-03 12:42:01 +00:00
parent 08a3b60f8c
commit 3d441febda
12 changed files with 42 additions and 42 deletions

View File

@ -94,6 +94,8 @@ char* strndup (char const *s, size_t n);
#define ftell _ftelli64
#define atoll _atoi64
#define stat64 _stat64
#define fstat64 _fstat64
#define fileno _fileno
#if _M_IX86
#define Crash() {__asm int 3}

View File

@ -345,6 +345,24 @@ u64 GetSize(const char *filename)
return 0;
}
// Overloaded GetSize, accepts file descriptor
u64 GetSize(const int fd)
{
struct stat64 buf;
if (fstat64(fd, &buf) != 0) {
ERROR_LOG(COMMON, "GetSize: stat failed %i: %s",
fd, GetLastErrorMsg());
return 0;
}
return buf.st_size;
}
// Overloaded GetSize, accepts FILE*
u64 GetSize(FILE *f)
{
return GetSize(fileno(f));
}
// creates an empty file filename, returns true on success
bool CreateEmptyFile(const char *filename)
{
@ -769,9 +787,7 @@ bool ReadFileToString(bool text_file, const char *filename, std::string &str)
FILE *f = fopen(filename, text_file ? "r" : "rb");
if (!f)
return false;
fseek(f, 0, SEEK_END);
size_t len = (size_t)ftell(f);
fseek(f, 0, SEEK_SET);
size_t len = (size_t)GetSize(f);
char *buf = new char[len + 1];
buf[fread(buf, 1, len, f)] = 0;
str = std::string(buf, len);

View File

@ -78,6 +78,12 @@ bool IsDirectory(const char *filename);
// Returns the size of filename (64bit)
u64 GetSize(const char *filename);
// Overloaded GetSize, accepts file descriptor
u64 GetSize(const int fd);
// Overloaded GetSize, accepts FILE*
u64 GetSize(FILE *f);
// Returns true if successful, or path already exists.
bool CreateDir(const char *filename);

View File

@ -21,20 +21,19 @@
#include "Boot_ELF.h"
#include "Boot_WiiWAD.h"
#include "ElfReader.h"
#include "FileUtil.h"
bool CBoot::IsElfWii(const char *filename)
{
/* We already check if filename existed before we called this function, so
there is no need for another check, just read the file right away */
FILE *f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
u64 filesize = ftell(f);
fseek(f, 0, SEEK_SET);
u64 filesize = File::GetSize(f);
u8 *mem = new u8[(size_t)filesize];
fread(mem, 1, (size_t)filesize, f);
fclose(f);
ElfReader reader(mem);
ElfReader reader(mem);
// TODO: Find a more reliable way to distinguish.
bool isWii = reader.GetEntryPoint() >= 0x80004000;
delete[] mem;
@ -46,9 +45,7 @@ bool CBoot::IsElfWii(const char *filename)
bool CBoot::Boot_ELF(const char *filename)
{
FILE *f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
u64 filesize = ftell(f);
fseek(f, 0, SEEK_SET);
u64 filesize = File::GetSize(f);
u8 *mem = new u8[(size_t)filesize];
fread(mem, 1, (size_t)filesize, f);
fclose(f);

View File

@ -18,6 +18,7 @@
#include "Common.h"
#include "Dump.h"
#include "FileUtil.h"
CDump::CDump(const char* _szFilename) :
m_pData(NULL),
@ -26,9 +27,7 @@ CDump::CDump(const char* _szFilename) :
FILE* pStream = fopen(_szFilename, "rb");
if (pStream != NULL)
{
fseek(pStream, 0, SEEK_END);
m_size = (size_t) ftell(pStream);
fseek(pStream, 0, SEEK_SET);
m_size = (size_t)File::GetSize(pStream);
m_pData = new u8[m_size];

View File

@ -100,11 +100,6 @@ int CSIDevice_GCController::RunBuffer(u8* _pBuffer, int _iLength)
iPosition = _iLength;
break;
// WII Something - this could be bogus
case 0xCE:
WARN_LOG(SERIALINTERFACE, "Unknown Wii SI Command");
break;
// DEFAULT
default:
{

View File

@ -353,9 +353,7 @@ void LoadStateCallback(u64 userdata, int cyclesLate)
}
else
{
fseek(f, 0, SEEK_END);
sz = (int)(ftell(f) - sizeof(state_header));
fseek(f, sizeof(state_header), SEEK_SET);
sz = (int)(File::GetSize(f) - sizeof(state_header));
buffer = new u8[sz];
int x;
if ((x = (int)fread(buffer, 1, sz, f)) != (int)sz)
@ -455,9 +453,7 @@ void VerifyStateCallback(u64 userdata, int cyclesLate)
}
else
{
fseek(f, 0, SEEK_END);
sz = (int)(ftell(f) - sizeof(int));
fseek(f, sizeof(int), SEEK_SET);
sz = (int)(File::GetSize(f) - sizeof(int));
buffer = new u8[sz];
int x;
if ((x = (int)fread(buffer, 1, sz, f)) != (int)sz)

View File

@ -343,9 +343,7 @@ bool DSPDisassembler::DisFile(const char* name, int base_addr, int pass, std::st
return false;
}
fseek(in, 0, SEEK_END);
int size = (int)ftell(in) & ~1;
fseek(in, 0, SEEK_SET);
int size = (int)File::GetSize(in) & ~1;
u16 *binbuf = new u16[size / 2];
fread(binbuf, 1, size, in);
fclose(in);

View File

@ -39,9 +39,7 @@ CompressedBlobReader::CompressedBlobReader(const char *filename)
{
file_name = filename;
file = fopen(filename, "rb");
fseek(file, 0, SEEK_END);
file_size = ftell(file);
fseek(file, 0, SEEK_SET);
file_size = File::GetSize(filename);
fread(&header, sizeof(CompressedBlobHeader), 1, file);
SetSectorSize(header.block_size);
@ -190,14 +188,11 @@ bool CompressFileToBlob(const char* infile, const char* outfile, u32 sub_type,
callback("Files opened, ready to compress.", 0, arg);
fseek(inf, 0, SEEK_END);
s64 insize = ftell(inf);
fseek(inf, 0, SEEK_SET);
CompressedBlobHeader header;
header.magic_cookie = kBlobCookie;
header.sub_type = sub_type;
header.block_size = block_size;
header.data_size = insize;
header.data_size = File::GetSize(infile);
// round upwards!
header.num_blocks = (u32)((header.data_size + (block_size - 1)) / block_size);

View File

@ -19,6 +19,7 @@
#include "Blob.h"
#include "FileBlob.h"
#include "FileUtil.h"
namespace DiscIO
{
@ -26,9 +27,7 @@ namespace DiscIO
PlainFileReader::PlainFileReader(FILE* file__)
{
file_ = file__;
fseek(file_, 0, SEEK_END);
size = ftell(file_);
fseek(file_, 0, SEEK_SET);
size = File::GetSize(file__);
}
PlainFileReader* PlainFileReader::Create(const char* filename)

View File

@ -129,7 +129,7 @@ std::string CVolumeGC::GetApploaderDate() const
u64 CVolumeGC::GetSize() const
{
if (m_pReader)
return (size_t)m_pReader->GetDataSize();
return m_pReader->GetDataSize();
else
return 0;
}

View File

@ -269,10 +269,7 @@ bool DolphinApp::OnInit()
else
{
char *tmpChar;
long len;
fseek(workingDir, 0, SEEK_END);
len = ftell(workingDir);
fseek(workingDir, 0, SEEK_SET);
size_t len = (size_t)File::GetSize(workingDir);
tmpChar = new char[len];
fread(tmpChar, len, 1, workingDir);
fclose(workingDir);