Invalid file handles used without checking may produce run-time errors or crashes. |
public AddReportToken(playerid) {
new
sz_FileStr[32 + MAX_PLAYER_NAME],
sz_playerName[MAX_PLAYER_NAME],
i_timestamp[3],
File: fPointer;
GetPlayerName(playerid, sz_playerName, MAX_PLAYER_NAME);
getdate(i_timestamp[0], i_timestamp[1], i_timestamp[2]);
format(sz_FileStr, sizeof(sz_FileStr), "admins/rtokens/%s[%d'%d'%d]", sz_playerName, i_timestamp[1], i_timestamp[2], i_timestamp[0]);
if(fexist(sz_FileStr))
{
fPointer = fopen(sz_FileStr, io_read);
fread(fPointer, sz_playerName), fclose(fPointer);
new
i_tokenVal = strval(sz_playerName);
format(sz_playerName, sizeof(sz_playerName), "%i", i_tokenVal + 1);
fPointer = fopen(sz_FileStr, io_write);
fwrite(fPointer, sz_playerName);
fclose(fPointer);
}
else {
fPointer = fopen(sz_FileStr, io_write);
fwrite(fPointer, "1");
}
return fclose(fPointer);
}
if (!AddReportToken(playerid))
{
// the file couldn't be opened..
}
else
{
// everything is fine
}
AddReportToken(playerid)
{
new
sz_FileStr[32 + MAX_PLAYER_NAME],
sz_playerName[MAX_PLAYER_NAME],
i_timestamp[3],
File: fPointer;
GetPlayerName(playerid, sz_playerName, MAX_PLAYER_NAME);
getdate(i_timestamp[0], i_timestamp[1], i_timestamp[2]);
format(sz_FileStr, sizeof(sz_FileStr), "admins/rtokens/%s[%d'%d'%d]", sz_playerName, i_timestamp[1], i_timestamp[2], i_timestamp[0]);
if(fexist(sz_FileStr)) // checking if exists to open the file with io_read, else it will crash the server
{
fPointer = fopen(sz_FileStr, io_read);
if (!fPointer) return 0; // return 0 and don't allow fPointer to be passed as argument and cause the crash
fread(fPointer, sz_playerName);
fclose(fPointer);
new
i_tokenVal = strval(sz_playerName);
format(sz_playerName, sizeof(sz_playerName), "%i", i_tokenVal + 1);
fPointer = fopen(sz_FileStr, io_write);
if (!fPointer) return 0; // return 0 and don't allow fPointer to be passed as argument and cause the crash
fwrite(fPointer, sz_playerName);
fclose(fPointer);
}
else
{
fPointer = fopen(sz_FileStr, io_write);
if (!fPointer) return 0; // return 0 and don't allow fPointer to be passed as argument and cause the crash
fwrite(fPointer, "1");
fclose(fPointer);
}
return 1;
}