X-Git-Url: http://git.pippins.net/embedvideo/.git/?a=blobdiff_plain;f=filedata.cpp;h=6b14517eec2125bfe80b922101328b0e33fdc364;hb=03f192444fbb9c458170149cfd5c609c922bf65b;hp=2a9840a7756717aec032566d93f1fc92f16b73b4;hpb=7ddfd60aef5e67058e1e6cb70debd3da01317825;p=backups%2F.git diff --git a/filedata.cpp b/filedata.cpp index 2a9840a..6b14517 100644 --- a/filedata.cpp +++ b/filedata.cpp @@ -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 split( const string &line, char c, int limit = -1 ) { string::size_type start = 0, end = 0; @@ -43,7 +25,11 @@ vector split( const string &line, char c, int limit = -1 ) { return out; } -ostream &operator<<( const FileData &d, ostream &o ) { +ostream &operator<<( ostream &o, const FileData *d) { + return operator<<( o, *d ); +} + +ostream &operator<<( ostream &o, const FileData &d ) { o << d.getFileType() << ' '; o << d.getPermissions() << ' '; o << d.getUserName() << ' '; @@ -56,12 +42,21 @@ ostream &operator<<( const FileData &d, ostream &o ) { return o; } +istream &operator>>( istream &i, FileData *d ) { + return operator>>( i, *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 directly here + for( c = i.get(); 0 != c && char_traits::eof() != c; c = i.get() ) { file_string.push_back( c ); } + if( char_traits::eof() == c ) { + i.setstate( ios_base::eofbit ); + } if( 0 != file_string.size() ) { // Example entry @@ -72,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; +}