]> git.mxchange.org Git - simgear.git/blobdiff - simgear/io/sg_file.cxx
remove old .cvsignore files
[simgear.git] / simgear / io / sg_file.cxx
index 60d553cd10d36152962850e277aea7c020b41aab..67fbda3eb9547f107a768cfaf64791a228a94742 100644 (file)
@@ -23,9 +23,9 @@
 
 #include <simgear/compiler.h>
 
-#include STL_STRING
+#include <string>
 
-#if defined(_MSC_VER) || defined(__MINGW32__)
+#ifdef _WIN32
 #  include <io.h>
 #endif
 
 
 #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 );
 }
@@ -55,7 +55,7 @@ bool SGFile::open( const SGProtocolDir d ) {
     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;
@@ -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 {