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;
return out;
}
-ostream &operator<<( const FileData *d, ostream &o ) {
- return operator<<( *d, o );
+const FileData::LastBackupCmp FileData::lastbackupcmp = FileData::LastBackupCmp();
+const FileData::SizeCmp FileData::sizecmp = FileData::SizeCmp();
+const FileData::NameCmp FileData::namecmp = FileData::NameCmp();
+
+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() << ' ';
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
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;
+}