Don't return error code if a file to be removed does not exist.

Improved error handling in addons.xml download.
This commit is contained in:
hiker 2014-01-16 15:29:47 +11:00
parent 472274561d
commit da7bad92e6
3 changed files with 1103 additions and 5 deletions

View File

@ -1037,11 +1037,16 @@ void FileManager::checkAndCreateDirForAddons(const std::string &dir)
} // checkAndCreateDirForAddons
// ----------------------------------------------------------------------------
/** Removes the specified file, returns true if successful, or false
* if the file is not a regular file or can not be removed.
/** Removes the specified file.
* \return True if successful, or false if the file is not a regular file or
* can not be removed.
*/
bool FileManager::removeFile(const std::string &name) const
{
// If the file does not exists, everything is fine
if(!fileExists(name))
return true;
struct stat mystat;
if(stat(name.c_str(), &mystat) < 0) return false;
if( S_ISREG(mystat.st_mode))

1087
src/io/file_manager.cpp~ Normal file

File diff suppressed because it is too large Load Diff

View File

@ -227,14 +227,20 @@ namespace Online
Log::info("HTTPRequest", "Download successful.");
// The behaviour of rename is unspecified if the target
// file should already exist - so remove it.
file_manager->removeFile(m_filename);
bool ok = file_manager->removeFile(m_filename);
if(!ok)
{
Log::error("addons",
"Could not removed existing addons.xml file.");
m_curl_code = CURLE_WRITE_ERROR;
}
int ret = rename((m_filename+".part").c_str(),
m_filename.c_str() );
// In case of an error, set the status to indicate this
if(ret!=0)
{
if(UserConfigParams::logAddons())
Log::error("addons", "Could not rename downloaded file!");
Log::error("addons",
"Could not rename downloaded addons.xml file!");
m_curl_code = CURLE_WRITE_ERROR;
}
} // m_curl_code ==CURLE_OK