Took out some verbosity
[backups/.git] / filedata.cpp
index 2669b75253f354bbfb2b9440b0db0f70134c67b4..6b14517eec2125bfe80b922101328b0e33fdc364 100644 (file)
@@ -6,24 +6,6 @@
 
 using namespace std;
 
-FileData::FileData( char               _type,
-                    string             _permissions,
-                    string             _user,
-                    string             _group,
-                    unsigned long long _size,
-                    unsigned long long _modified_date,
-                    unsigned long long _last_backup,
-                    string             _name )
-: filetype( _type ),
-  permissions( _permissions ),
-  username( _user ),
-  groupname( _group ),
-  filesize( _size ),
-  modified_date( _modified_date ),
-  last_backup_date( _last_backup ),
-  filename( _name )
-{}
-
 vector<string> split( const string &line, char c, int limit = -1 ) {
   string::size_type start = 0, end = 0;
 
@@ -43,11 +25,11 @@ vector<string> split( const string &line, char c, int limit = -1 ) {
   return out;
 }
 
-ostream &operator<<( const FileData *d, ostream &o ) {
-  return operator<<( *d, o );
+ostream &operator<<( ostream &o, const FileData *d) {
+  return operator<<( o, *d );
 }
 
-ostream &operator<<( const FileData &d, ostream &o ) {
+ostream &operator<<( ostream &o, const FileData &d ) {
   o << d.getFileType()       << ' ';
   o << d.getPermissions()    << ' ';
   o << d.getUserName()       << ' ';
@@ -67,9 +49,14 @@ istream &operator>>( istream &i, FileData *d ) {
 istream &operator>>( istream &i, FileData &d ) {
   string file_string;
 
-  for( int c = i.get(); 0 != c && ! i.eof(); c = i.get() ) {
+  int c;
+  // Todo, don't use char_traits<char> directly here
+  for( c = i.get(); 0 != c && char_traits<char>::eof() != c; c = i.get() ) {
     file_string.push_back( c );
   }
+  if( char_traits<char>::eof() == c ) {
+    i.setstate( ios_base::eofbit );
+  }
 
   if( 0 != file_string.size() ) {
     // Example entry
@@ -80,11 +67,25 @@ istream &operator>>( istream &i, FileData &d ) {
     d.setPermissions(    vals[1] );
     d.setUserName(       vals[2] );
     d.setGroupName(      vals[3] );
-    d.setFileSize(       atoi( vals[4].c_str() ) );
-    d.setModifiedDate(   atoi( vals[5].c_str() ) );
-    d.setLastBackupDate( atoi( vals[6].c_str() ) );
+    d.setFileSize(       atoll( vals[4].c_str() ) );
+    d.setModifiedDate(   atoll( vals[5].c_str() ) );
+    d.setLastBackupDate( atoll( vals[6].c_str() ) );
     d.setFileName(       vals[7] );
   }
 
   return i;
 }
+
+bool needs_backup( const FileData *before, const FileData *after ) {
+  assert( before->getFileName() == after->getFileName() );
+
+  if( after->getLastBackupDate()  <  after->getModifiedDate() ) return true;
+
+  if( before->getFileType()       != after->getFileType()     ) return true;
+  if( before->getPermissions()    != after->getPermissions()  ) return true;
+  if( before->getUserName()       != after->getUserName()     ) return true;
+  if( before->getGroupName()      != after->getGroupName()    ) return true;
+  if( before->getFileSize()       != after->getFileSize()     ) return true;
+
+  return false;
+}