mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-06-21 12:54:26 -04:00
added code to avoid corruption of bdboot.txt: first write to tmp file then move the file. Refers on Windows utf16ToUtf8 from libretroshare. This forward reference can be improved.
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5434 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
21e97a47df
commit
c3db4dacf7
4 changed files with 68 additions and 1 deletions
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
#include "bitdht/bdstore.h"
|
#include "bitdht/bdstore.h"
|
||||||
#include "util/bdnet.h"
|
#include "util/bdnet.h"
|
||||||
|
#include "util/bdfile.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -213,8 +214,9 @@ void bdStore::writeStore(std::string file)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string filetmp = file + ".tmp" ;
|
||||||
|
|
||||||
FILE *fd = fopen(file.c_str(), "w");
|
FILE *fd = fopen(filetmp.c_str(), "w");
|
||||||
|
|
||||||
if (!fd)
|
if (!fd)
|
||||||
{
|
{
|
||||||
|
@ -234,6 +236,11 @@ void bdStore::writeStore(std::string file)
|
||||||
|
|
||||||
}
|
}
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
|
||||||
|
if(!bdFile::renameFile(filetmp,file))
|
||||||
|
std::cerr << "Could not rename file !!" << std::endl;
|
||||||
|
else
|
||||||
|
std::cerr << "Successfully renamed file " << filetmp << " to " << file << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bdStore::writeStore()
|
void bdStore::writeStore()
|
||||||
|
|
|
@ -115,6 +115,7 @@ HEADERS += \
|
||||||
util/bdnet.h \
|
util/bdnet.h \
|
||||||
util/bdthreads.h \
|
util/bdthreads.h \
|
||||||
util/bdrandom.h \
|
util/bdrandom.h \
|
||||||
|
util/bdfile.h \
|
||||||
util/bdstring.h \
|
util/bdstring.h \
|
||||||
udp/udplayer.h \
|
udp/udplayer.h \
|
||||||
udp/udpstack.h \
|
udp/udpstack.h \
|
||||||
|
@ -141,6 +142,7 @@ SOURCES += \
|
||||||
util/bdnet.cc \
|
util/bdnet.cc \
|
||||||
util/bdthreads.cc \
|
util/bdthreads.cc \
|
||||||
util/bdrandom.cc \
|
util/bdrandom.cc \
|
||||||
|
util/bdfile.cc \
|
||||||
util/bdstring.cc \
|
util/bdstring.cc \
|
||||||
udp/udplayer.cc \
|
udp/udplayer.cc \
|
||||||
udp/udpstack.cc \
|
udp/udpstack.cc \
|
||||||
|
|
49
libbitdht/src/util/bdfile.cc
Normal file
49
libbitdht/src/util/bdfile.cc
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include "bdfile.h"
|
||||||
|
|
||||||
|
namespace librs {
|
||||||
|
namespace util {
|
||||||
|
bool ConvertUtf8ToUtf16(const std::string& source, std::wstring& dest) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool bdFile::renameFile(const std::string& from, const std::string& to)
|
||||||
|
{
|
||||||
|
int loops = 0;
|
||||||
|
|
||||||
|
#ifdef WINDOWS_SYS
|
||||||
|
std::wstring f;
|
||||||
|
librs::util::ConvertUtf8ToUtf16(from, f);
|
||||||
|
std::wstring t;
|
||||||
|
librs::util::ConvertUtf8ToUtf16(to, t);
|
||||||
|
|
||||||
|
while (!MoveFileEx(f.c_str(), t.c_str(), MOVEFILE_REPLACE_EXISTING))
|
||||||
|
#else
|
||||||
|
std::string f(from),t(to) ;
|
||||||
|
|
||||||
|
while (rename(from.c_str(), to.c_str()) < 0)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
if (GetLastError() != ERROR_ACCESS_DENIED)
|
||||||
|
#else
|
||||||
|
if (errno != EACCES)
|
||||||
|
#endif
|
||||||
|
/* set errno? */
|
||||||
|
return false ;
|
||||||
|
#ifdef WIN32
|
||||||
|
Sleep(100000); /* us */
|
||||||
|
#else
|
||||||
|
usleep(100000); /* us */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (loops >= 30)
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
loops++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
9
libbitdht/src/util/bdfile.h
Normal file
9
libbitdht/src/util/bdfile.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
class bdFile
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static bool renameFile(const std::string& from, const std::string& to) ;
|
||||||
|
} ;
|
Loading…
Add table
Add a link
Reference in a new issue