mirror of
git://projects.qi-hardware.com/gmenu2x.git
synced 2024-11-16 17:08:25 +02:00
Improved handling of platform specific open flags
There was support for platforms without O_DIRECTORY, but O_CLOEXEC is also Linux specific and was hardcoded, making the whole thing not portable.
This commit is contained in:
parent
e12c896b99
commit
fe790b1c8d
@ -82,11 +82,17 @@ string readFileAsString(string const& filename) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr int writeOpenFlags =
|
||||||
|
#ifdef O_CLOEXEC
|
||||||
|
O_CLOEXEC | // Linux
|
||||||
|
#endif
|
||||||
|
O_CREAT | O_WRONLY | O_TRUNC;
|
||||||
|
|
||||||
// Use C functions since STL doesn't seem to have any way of applying fsync().
|
// Use C functions since STL doesn't seem to have any way of applying fsync().
|
||||||
bool writeStringToFile(string const& filename, string const& data) {
|
bool writeStringToFile(string const& filename, string const& data) {
|
||||||
// Open temporary file.
|
// Open temporary file.
|
||||||
string tempname = filename + '~';
|
string tempname = filename + '~';
|
||||||
int fd = open(tempname.c_str(), O_CREAT | O_WRONLY | O_TRUNC | O_CLOEXEC);
|
int fd = open(tempname.c_str(), writeOpenFlags);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -126,10 +132,12 @@ bool writeStringToFile(string const& filename, string const& data) {
|
|||||||
|
|
||||||
constexpr int dirOpenFlags =
|
constexpr int dirOpenFlags =
|
||||||
#ifdef O_DIRECTORY
|
#ifdef O_DIRECTORY
|
||||||
O_DIRECTORY | O_RDONLY; // Linux specific
|
O_DIRECTORY | // Linux
|
||||||
#else
|
|
||||||
O_RDONLY;
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef O_CLOEXEC
|
||||||
|
O_CLOEXEC | // Linux
|
||||||
|
#endif
|
||||||
|
O_RDONLY;
|
||||||
|
|
||||||
bool syncDir(string const& dirname)
|
bool syncDir(string const& dirname)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user