X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fio%2Fsg_file.cxx;h=bbfc324707b4d132ec8344f1719df9bbf218900f;hb=aefe9bc11682f39b3936b9f01a0d37e9d6428078;hp=df96aa8e80d68b243a27932356d6014938bff710;hpb=733e6fa14ff507a1022ecab8d55cc9bf587bee40;p=simgear.git diff --git a/simgear/io/sg_file.cxx b/simgear/io/sg_file.cxx index df96aa8e..bbfc3247 100644 --- a/simgear/io/sg_file.cxx +++ b/simgear/io/sg_file.cxx @@ -36,11 +36,11 @@ #include "sg_file.hxx" -SG_USING_STD(string); +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 ); } @@ -84,7 +84,8 @@ int SGFile::read( char *buf, int length ) { // 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) { @@ -110,7 +111,8 @@ int SGFile::readline( char *buf, int length ) { // 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 {