Fix BufferefFile test on Windows.

This commit is contained in:
Victor Zverovich 2014-08-28 12:13:03 -07:00
parent 564da25932
commit 2dad1690c8
2 changed files with 9 additions and 10 deletions

View File

@ -71,13 +71,9 @@ fmt::BufferedFile::~BufferedFile() FMT_NOEXCEPT(true) {
}
fmt::BufferedFile::BufferedFile(fmt::StringRef filename, fmt::StringRef mode) {
for (;;) {
file_ = FMT_SYSTEM(fopen(filename.c_str(), mode.c_str()));
if (file_)
return;
if (errno != EINTR)
FMT_RETRY_VAL(file_, FMT_SYSTEM(fopen(filename.c_str(), mode.c_str())), 0);
if (!file_)
throw SystemError(errno, "cannot open file");
}
}
void fmt::BufferedFile::close() {

View File

@ -63,16 +63,19 @@
# endif
#endif
// Retries the expression while it evaluates to -1 and error equals to EINTR.
// Retries the expression while it evaluates to error_result and errno
// equals to EINTR.
#ifndef _WIN32
# define FMT_RETRY(result, expression) \
# define FMT_RETRY_VAL(result, expression, error_result) \
do { \
result = (expression); \
} while (result == -1 && errno == EINTR)
} while (result == error_result && errno == EINTR)
#else
# define FMT_RETRY(result, expression) result = (expression)
#endif
#define FMT_RETRY(result, expression) FMT_RETRY_VAL(result, expression, -1)
namespace fmt {
// An error code.