gcc-warning: check c function return. Print error when bad.

v2: properly check return code of fread/getcwd function
This commit is contained in:
Gregory Hainaut 2014-04-18 23:21:27 +02:00
parent 22b65489e2
commit 58077c63a7
7 changed files with 58 additions and 27 deletions

View File

@ -146,7 +146,9 @@ struct PluginConf
int value = defval; int value = defval;
std::string buf = item + " = %d\n"; std::string buf = item + " = %d\n";
if (ConfFile) fscanf(ConfFile, buf.c_str(), &value); if (ConfFile)
if (fscanf(ConfFile, buf.c_str(), &value) < 0)
SysMessage("Somethings got wrong when option was read\n");
return value; return value;
} }

View File

@ -1415,6 +1415,18 @@ inline unsigned long timeGetTime()
return (unsigned long)(t.time*1000 + t.millitm); return (unsigned long)(t.time*1000 + t.millitm);
} }
void _fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
static uint32 read_cnt = 0;
read_cnt++;
size_t result = fread(ptr, size, nmemb, stream);
if (result != nmemb) {
fprintf(stderr, "Read error\n");
exit(read_cnt);
}
}
// Note // Note
EXPORT_C GSReplay(char* lpszCmdLine, int renderer) EXPORT_C GSReplay(char* lpszCmdLine, int renderer)
{ {
@ -1471,17 +1483,17 @@ EXPORT_C GSReplay(char* lpszCmdLine, int renderer)
if (s_gs->m_wnd == NULL) return; if (s_gs->m_wnd == NULL) return;
uint32 crc; uint32 crc;
fread(&crc, 4, 1, fp); _fread(&crc, 4, 1, fp);
GSsetGameCRC(crc, 0); GSsetGameCRC(crc, 0);
GSFreezeData fd; GSFreezeData fd;
fread(&fd.size, 4, 1, fp); _fread(&fd.size, 4, 1, fp);
fd.data = new uint8[fd.size]; fd.data = new uint8[fd.size];
fread(fd.data, fd.size, 1, fp); _fread(fd.data, fd.size, 1, fp);
GSfreeze(FREEZE_LOAD, &fd); GSfreeze(FREEZE_LOAD, &fd);
delete [] fd.data; delete [] fd.data;
fread(regs, 0x2000, 1, fp); _fread(regs, 0x2000, 1, fp);
GSvsync(1); GSvsync(1);
@ -1503,20 +1515,20 @@ EXPORT_C GSReplay(char* lpszCmdLine, int renderer)
p->param = (uint8)fgetc(fp); p->param = (uint8)fgetc(fp);
fread(&p->size, 4, 1, fp); _fread(&p->size, 4, 1, fp);
switch(p->param) switch(p->param)
{ {
case 0: case 0:
p->buff.resize(0x4000); p->buff.resize(0x4000);
p->addr = 0x4000 - p->size; p->addr = 0x4000 - p->size;
fread(&p->buff[p->addr], p->size, 1, fp); _fread(&p->buff[p->addr], p->size, 1, fp);
break; break;
case 1: case 1:
case 2: case 2:
case 3: case 3:
p->buff.resize(p->size); p->buff.resize(p->size);
fread(&p->buff[0], p->size, 1, fp); _fread(&p->buff[0], p->size, 1, fp);
break; break;
} }
@ -1530,7 +1542,7 @@ EXPORT_C GSReplay(char* lpszCmdLine, int renderer)
case 2: case 2:
fread(&p->size, 4, 1, fp); _fread(&p->size, 4, 1, fp);
break; break;
@ -1538,7 +1550,7 @@ EXPORT_C GSReplay(char* lpszCmdLine, int renderer)
p->buff.resize(0x2000); p->buff.resize(0x2000);
fread(&p->buff[0], 0x2000, 1, fp); _fread(&p->buff[0], 0x2000, 1, fp);
break; break;
} }

View File

@ -228,7 +228,7 @@ public:
} }
void Set() {pthread_cond_signal(&m_cv);} void Set() {pthread_cond_signal(&m_cv);}
bool Wait(IGSLock* l) {pthread_cond_wait(&m_cv, *(GSCondVarLock*)l) == 0; return true;} bool Wait(IGSLock* l) {return pthread_cond_wait(&m_cv, *(GSCondVarLock*)l) == 0;}
operator pthread_cond_t* () {return &m_cv;} operator pthread_cond_t* () {return &m_cv;}
}; };

View File

@ -642,6 +642,17 @@ EXPORT_C_(s32) GSfreeze(int mode, freezeData *data)
} }
#ifdef __LINUX__ #ifdef __LINUX__
void _fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
static uint32 read_cnt = 0;
read_cnt++;
size_t result = fread(ptr, size, nmemb, stream);
if (result != nmemb) {
fprintf(stderr, "Read error\n");
exit(read_cnt);
}
}
struct Packet struct Packet
{ {
@ -664,21 +675,21 @@ EXPORT_C_(void) GSReplay(char* lpszCmdLine)
void* hWnd = NULL; void* hWnd = NULL;
//_GSopen((void**)&hWnd, "", renderer); const char* title = "replayer";
GSopen((void**)&hWnd, "", 0); GSopen((void**)&hWnd, (char*)title, 0);
u32 crc; u32 crc;
fread(&crc, 4, 1, fp); _fread(&crc, 4, 1, fp);
GSsetGameCRC(crc, 0); GSsetGameCRC(crc, 0);
freezeData fd; freezeData fd;
fread(&fd.size, 4, 1, fp); _fread(&fd.size, 4, 1, fp);
fd.data = new s8[fd.size]; fd.data = new s8[fd.size];
fread(fd.data, fd.size, 1, fp); _fread(fd.data, fd.size, 1, fp);
GSfreeze(FREEZE_LOAD, &fd); GSfreeze(FREEZE_LOAD, &fd);
delete [] fd.data; delete [] fd.data;
fread(regs, 0x2000, 1, fp); _fread(regs, 0x2000, 1, fp);
GSvsync(1); GSvsync(1);
@ -698,8 +709,8 @@ EXPORT_C_(void) GSReplay(char* lpszCmdLine)
p->param = (u8)fgetc(fp); p->param = (u8)fgetc(fp);
fread(&p->size, 4, 1, fp); _fread(&p->size, 4, 1, fp);
fread(&p->real_size, 4, 1, fp); _fread(&p->real_size, 4, 1, fp);
switch(p->param) switch(p->param)
{ {
@ -707,13 +718,13 @@ EXPORT_C_(void) GSReplay(char* lpszCmdLine)
p->buff.resize(0x4000); p->buff.resize(0x4000);
//p->addr = 0x4000 - p->size; //p->addr = 0x4000 - p->size;
//fread(&p->buff[p->addr], p->size, 1, fp); //fread(&p->buff[p->addr], p->size, 1, fp);
fread(&p->buff[0], p->size, 1, fp); _fread(&p->buff[0], p->size, 1, fp);
break; break;
case 1: case 1:
case 2: case 2:
case 3: case 3:
p->buff.resize(p->size); p->buff.resize(p->size);
fread(&p->buff[0], p->size, 1, fp); _fread(&p->buff[0], p->size, 1, fp);
break; break;
} }
@ -721,14 +732,14 @@ EXPORT_C_(void) GSReplay(char* lpszCmdLine)
case 1: case 1:
fread(&p->param, 4, 1, fp); _fread(&p->param, 4, 1, fp);
//p->param = (u8)fgetc(fp); //p->param = (u8)fgetc(fp);
break; break;
case 2: case 2:
fread(&p->size, 4, 1, fp); _fread(&p->size, 4, 1, fp);
break; break;
@ -736,7 +747,7 @@ EXPORT_C_(void) GSReplay(char* lpszCmdLine)
p->buff.resize(0x2000); p->buff.resize(0x2000);
fread(&p->buff[0], 0x2000, 1, fp); _fread(&p->buff[0], 0x2000, 1, fp);
break; break;

View File

@ -435,7 +435,10 @@ void DisplayDialog()
EXPORT_C_(void) GSconfigure() EXPORT_C_(void) GSconfigure()
{ {
char strcurdir[256]; char strcurdir[256];
getcwd(strcurdir, 256); if (getcwd(strcurdir, 256) == NULL) {
fprintf(stderr, "Failed to get current working directory\n");
return;
}
if (!(conf.loaded())) LoadConfig(); if (!(conf.loaded())) LoadConfig();

View File

@ -270,7 +270,9 @@ __forceinline bool LoadShadersFromDat()
size_t s = ftell(fres); size_t s = ftell(fres);
s_lpShaderResources = new u8[s+1]; s_lpShaderResources = new u8[s+1];
fseek(fres, 0, SEEK_SET); fseek(fres, 0, SEEK_SET);
fread(s_lpShaderResources, s, 1, fres); if (fread(s_lpShaderResources, s, 1, fres) == 0)
fprintf(stderr, "Failed to read ps2hw.dat. Corrupted file?\n");
s_lpShaderResources[s] = 0; s_lpShaderResources[s] = 0;
return true; return true;

View File

@ -221,7 +221,8 @@ bool ZZshCreateOpenShadersFile() {
size_t s = ftell(fres); size_t s = ftell(fres);
s_lpShaderResources = new u8[s+1]; s_lpShaderResources = new u8[s+1];
fseek(fres, 0, SEEK_SET); fseek(fres, 0, SEEK_SET);
fread(s_lpShaderResources, s, 1, fres); if (fread(s_lpShaderResources, s, 1, fres) == 0)
ZZLog::Error_Log("Cannot read ps2hw.dat in working directory.");
s_lpShaderResources[s] = 0; s_lpShaderResources[s] = 0;
# endif // _WIN32 # endif // _WIN32
#else // NOT RELEASE_TO_PUBLIC #else // NOT RELEASE_TO_PUBLIC