mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
Few optimizations and code improvements. Also added one missing fclose in error handling code (Patch rom G10H4ck)
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7818 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
1fa3f1febd
commit
a29a8c8a49
@ -218,59 +218,68 @@ HashCache::HashCache(const std::string& path)
|
|||||||
|
|
||||||
void HashCache::save()
|
void HashCache::save()
|
||||||
{
|
{
|
||||||
if(_changed)
|
if(!_changed)
|
||||||
{
|
{
|
||||||
#ifdef FIM_DEBUG
|
#ifdef FIM_DEBUG
|
||||||
std::cerr << "Saving Hash Cache to file " << _path << "..." << std::endl ;
|
|
||||||
#endif
|
|
||||||
std::ostringstream f ;
|
|
||||||
|
|
||||||
for(std::map<std::string,HashCacheInfo>::const_iterator it(_files.begin());it!=_files.end();++it)
|
|
||||||
{
|
|
||||||
f << it->first << std::endl ;
|
|
||||||
f << it->second.size << std::endl;
|
|
||||||
f << it->second.time_stamp << std::endl;
|
|
||||||
f << it->second.modf_stamp << std::endl;
|
|
||||||
f << it->second.hash << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *encryptedData = NULL ;
|
|
||||||
int encDataLen = 0 ;
|
|
||||||
|
|
||||||
if(!AuthSSL::getAuthSSL()->encrypt(encryptedData, encDataLen, f.str().c_str(), f.str().length(), AuthSSL::getAuthSSL()->OwnId()))
|
|
||||||
{
|
|
||||||
std::cerr << "Cannot encrypt hash cache. Something's wrong." << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FILE *F = fopen( (_path+".bin.tmp").c_str(),"wb" ) ;
|
|
||||||
|
|
||||||
if(F == NULL)
|
|
||||||
{
|
|
||||||
std::cerr << "Cannot open encrypted file cache for writing: " << _path+".bin.tmp" << std::endl;
|
|
||||||
free(encryptedData) ;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
if(fwrite(encryptedData,1,encDataLen,F) != encDataLen)
|
|
||||||
{
|
|
||||||
std::cerr << "Could not write entire encrypted hash cache file. Out of disc space??" << std::endl;
|
|
||||||
free(encryptedData) ;
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
fclose(F) ;
|
|
||||||
free(encryptedData) ;
|
|
||||||
|
|
||||||
RsDirUtil::renameFile(_path+".bin.tmp",_path+".bin") ;
|
|
||||||
#ifdef FIM_DEBUG
|
|
||||||
std::cerr << "done." << std::endl ;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_changed = false ;
|
|
||||||
}
|
|
||||||
#ifdef FIM_DEBUG
|
|
||||||
else
|
|
||||||
std::cerr << "Hash cache not changed. Not saving." << std::endl ;
|
std::cerr << "Hash cache not changed. Not saving." << std::endl ;
|
||||||
#endif
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef FIM_DEBUG
|
||||||
|
std::cerr << "Saving Hash Cache to file " << _path << "..." << std::endl ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::ostringstream f ;
|
||||||
|
for(std::map<std::string,HashCacheInfo>::const_iterator it(_files.begin());
|
||||||
|
it != _files.end();
|
||||||
|
++it)
|
||||||
|
{
|
||||||
|
f << it->first << std::endl ;
|
||||||
|
f << it->second.size << std::endl;
|
||||||
|
f << it->second.time_stamp << std::endl;
|
||||||
|
f << it->second.modf_stamp << std::endl;
|
||||||
|
f << it->second.hash << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *encryptedData = NULL ;
|
||||||
|
int encDataLen = 0 ;
|
||||||
|
|
||||||
|
if(!AuthSSL::getAuthSSL()->encrypt(
|
||||||
|
encryptedData,
|
||||||
|
encDataLen,
|
||||||
|
f.str().c_str(),
|
||||||
|
f.str().length(),
|
||||||
|
AuthSSL::getAuthSSL()->OwnId()))
|
||||||
|
{
|
||||||
|
std::cerr << "Cannot encrypt hash cache. Something's wrong." << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE *F = fopen( (_path+".bin.tmp").c_str(),"wb" ) ;
|
||||||
|
|
||||||
|
if(!F)
|
||||||
|
{
|
||||||
|
std::cerr << "Cannot open encrypted file cache for writing: " << _path+".bin.tmp" << std::endl;
|
||||||
|
goto save_free;
|
||||||
|
}
|
||||||
|
if(fwrite(encryptedData,1,encDataLen,F) != encDataLen)
|
||||||
|
{
|
||||||
|
std::cerr << "Could not write entire encrypted hash cache file. Out of disc space??" << std::endl;
|
||||||
|
goto save_close;
|
||||||
|
}
|
||||||
|
|
||||||
|
RsDirUtil::renameFile(_path+".bin.tmp",_path+".bin") ;
|
||||||
|
#ifdef FIM_DEBUG
|
||||||
|
std::cerr << "done." << std::endl ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_changed = false;
|
||||||
|
|
||||||
|
save_close:
|
||||||
|
fclose(F);
|
||||||
|
save_free:
|
||||||
|
free(encryptedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HashCache::find(const std::string& full_path,uint64_t size,time_t time_stamp,RsFileHash& hash)
|
bool HashCache::find(const std::string& full_path,uint64_t size,time_t time_stamp,RsFileHash& hash)
|
||||||
@ -430,7 +439,7 @@ bool FileIndexMonitor::findLocalFile(const RsFileHash& hash,FileSearchFlags hint
|
|||||||
/* search through the fileIndex */
|
/* search through the fileIndex */
|
||||||
fi.searchHash(hash, results);
|
fi.searchHash(hash, results);
|
||||||
|
|
||||||
if (results.size() > 0)
|
if ( !results.empty() )
|
||||||
{
|
{
|
||||||
/* find the full path for the first entry */
|
/* find the full path for the first entry */
|
||||||
FileEntry *fe = results.front();
|
FileEntry *fe = results.front();
|
||||||
@ -516,7 +525,6 @@ bool FileIndexMonitor::convertSharedFilePath(std::string path, std::string &f
|
|||||||
|
|
||||||
bool FileIndexMonitor::loadLocalCache(const RsCacheData &data) /* called with stored data */
|
bool FileIndexMonitor::loadLocalCache(const RsCacheData &data) /* called with stored data */
|
||||||
{
|
{
|
||||||
bool ok = false;
|
|
||||||
|
|
||||||
#ifdef FIM_DEBUG
|
#ifdef FIM_DEBUG
|
||||||
std::cerr << "FileIndexMonitor::loadLocalCache(): subid = " << data.cid.subid << ", filename=" << data.name << ", peer id = " << data.pid << std::endl;
|
std::cerr << "FileIndexMonitor::loadLocalCache(): subid = " << data.cid.subid << ", filename=" << data.name << ", peer id = " << data.pid << std::endl;
|
||||||
@ -530,7 +538,7 @@ bool FileIndexMonitor::loadLocalCache(const RsCacheData &data) /* called with s
|
|||||||
|
|
||||||
std::string name = data.name ;
|
std::string name = data.name ;
|
||||||
|
|
||||||
if ((ok = fi.loadIndex(data.path + '/' + name, RsFileHash(), data.size)))
|
if ( fi.loadIndex(data.path + '/' + name, RsFileHash(), data.size) )
|
||||||
{
|
{
|
||||||
#ifdef FIM_DEBUG
|
#ifdef FIM_DEBUG
|
||||||
std::cerr << "FileIndexMonitor::loadCache() Success!";
|
std::cerr << "FileIndexMonitor::loadCache() Success!";
|
||||||
@ -585,12 +593,6 @@ bool FileIndexMonitor::loadLocalCache(const RsCacheData &data) /* called with s
|
|||||||
else
|
else
|
||||||
std::cerr << "FileIndexMonitor:: not loading cache item " << data.name << std::endl;
|
std::cerr << "FileIndexMonitor:: not loading cache item " << data.name << std::endl;
|
||||||
#endif
|
#endif
|
||||||
#ifdef REMOVED
|
|
||||||
if (ok)
|
|
||||||
{
|
|
||||||
return updateCache(data);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -648,20 +650,9 @@ void FileIndexMonitor::run()
|
|||||||
|
|
||||||
if(i < abs(updatePeriod) || autoCheckEnabled())
|
if(i < abs(updatePeriod) || autoCheckEnabled())
|
||||||
updateCycle();
|
updateCycle();
|
||||||
|
|
||||||
#ifdef FIM_DEBUG
|
|
||||||
// {
|
|
||||||
// RsStackMutex mtx(fiMutex) ;
|
|
||||||
// std::cerr <<"*********** FileIndex **************" << std::endl ;
|
|
||||||
// fi.printFileIndex(std::cerr) ;
|
|
||||||
// std::cerr <<"************** END *****************" << std::endl ;
|
|
||||||
// std::cerr << std::endl ;
|
|
||||||
// }
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//void FileIndexMonitor::updateCycle(std::string& current_job)
|
|
||||||
void FileIndexMonitor::updateCycle()
|
void FileIndexMonitor::updateCycle()
|
||||||
{
|
{
|
||||||
time_t startstamp = time(NULL);
|
time_t startstamp = time(NULL);
|
||||||
@ -724,8 +715,6 @@ void FileIndexMonitor::updateCycle()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
FileEntry fe;
|
FileEntry fe;
|
||||||
/* entries that need to be checked properly */
|
|
||||||
std::list<FileEntry>::iterator hit;
|
|
||||||
|
|
||||||
/* determine the full root path */
|
/* determine the full root path */
|
||||||
std::string dirpath = olddir->path;
|
std::string dirpath = olddir->path;
|
||||||
@ -1495,7 +1484,6 @@ bool FileIndexMonitor::inDirectoryCheck()
|
|||||||
|
|
||||||
bool FileIndexMonitor::internal_setSharedDirectories()
|
bool FileIndexMonitor::internal_setSharedDirectories()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -1533,7 +1521,7 @@ bool FileIndexMonitor::internal_setSharedDirectories()
|
|||||||
|
|
||||||
/* if unique -> add, else add modifier */
|
/* if unique -> add, else add modifier */
|
||||||
bool unique = false;
|
bool unique = false;
|
||||||
for(i = 0; !unique; ++i)
|
for(int i = 0; !unique; ++i)
|
||||||
{
|
{
|
||||||
std::string tst_dir = top_dir;
|
std::string tst_dir = top_dir;
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user