#include <string>
-#if defined(_MSC_VER) || defined(__MINGW32__)
+#ifdef _WIN32
# include <io.h>
#endif
using std::string;
-SGFile::SGFile(const string &file, bool repeat_)
- : file_name(file), fp(-1), eof_flag(true), repeat(repeat_)
+SGFile::SGFile(const string &file, int repeat_)
+ : file_name(file), fp(-1), eof_flag(true), repeat(repeat_), iteration(0)
{
set_type( sgFileType );
}
set_dir( d );
if ( get_dir() == SG_IO_OUT ) {
-#if defined(_MSC_VER) || defined(__MINGW32__)
+#ifdef _WIN32
int mode = 00666;
#else
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
// read a chunk
ssize_t result = ::read( fp, buf, length );
if ( length > 0 && result == 0 ) {
- if (repeat) {
+ if (repeat < 0 || iteration < repeat - 1) {
+ iteration++;
// loop reading the file, unless it is empty
off_t fileLen = ::lseek(fp, 0, SEEK_CUR);
if (fileLen == 0) {
// read a chunk
ssize_t result = ::read( fp, buf, length );
if ( length > 0 && result == 0 ) {
- if (repeat && pos != 0) {
+ if ((repeat < 0 || iteration < repeat - 1) && pos != 0) {
+ iteration++;
pos = ::lseek(fp, 0, SEEK_SET);
result = ::read(fp, buf, length);
} else {