]> git.mxchange.org Git - simgear.git/commitdiff
Add an eof() method to SGFile.
authorcurt <curt>
Fri, 23 Sep 2005 20:13:43 +0000 (20:13 +0000)
committercurt <curt>
Fri, 23 Sep 2005 20:13:43 +0000 (20:13 +0000)
simgear/io/sg_file.cxx
simgear/io/sg_file.hxx

index cd7fa1d5b558ee0282eccd37bd572d3ae30c89bb..079fefec7283dd90c54c12d991605ad7a915f050 100644 (file)
@@ -39,6 +39,7 @@ SG_USING_STD(string);
 SGFile::SGFile( const string &file) {
     set_type( sgFileType );
     file_name = file;
+    eof_flag = true;
 }
 
 
@@ -70,6 +71,7 @@ bool SGFile::open( const SGProtocolDir d ) {
        return false;
     }
 
+    eof_flag = false;
     return true;
 }
 
@@ -77,7 +79,11 @@ bool SGFile::open( const SGProtocolDir d ) {
 // read a block of data of specified size
 int SGFile::read( char *buf, int length ) {
     // read a chunk
-    return ::read( fp, buf, length );
+    ssize_t result = ::read( fp, buf, length );
+    if ( result == 0 ) {
+        eof_flag = true;
+    }
+    return result;
 }
 
 
@@ -87,7 +93,10 @@ int SGFile::readline( char *buf, int length ) {
     int pos = lseek( fp, 0, SEEK_CUR );
 
     // read a chunk
-    int result = ::read( fp, buf, length );
+    ssize_t result = ::read( fp, buf, length );
+    if ( result == 0 ) {
+        eof_flag = true;
+    }
 
     // find the end of line and reset position
     int i;
@@ -130,5 +139,6 @@ bool SGFile::close() {
        return false;
     }
 
+    eof_flag = true;
     return true;
 }
index f029763338d9e8fad576bd3b63552ba3e2b1baf9..ab3f7be0d061f2c134c6fbebcb3d3a1f11aefaab 100644 (file)
@@ -54,6 +54,7 @@ class SGFile : public SGIOChannel {
 
     string file_name;
     int fp;
+    bool eof_flag;
 
 public:
 
@@ -89,6 +90,9 @@ public:
 
     /** @return the name of the file being manipulated. */
     inline string get_file_name() const { return file_name; }
+
+    /** @return true of eof conditions exists */
+    inline bool eof() const { return eof_flag; };
 };