X-Git-Url: http://git.pippins.net/embedvideo/.git/static/gitweb.js?a=blobdiff_plain;f=filedata.cpp;h=2a9840a7756717aec032566d93f1fc92f16b73b4;hb=7ddfd60aef5e67058e1e6cb70debd3da01317825;hp=c3a88403f8054b4a2469ec13d2280a53201a9405;hpb=c1af9697acaf6dbc98afa5ffe18d2c5c7ab12c59;p=backups%2F.git diff --git a/filedata.cpp b/filedata.cpp index c3a8840..2a9840a 100644 --- a/filedata.cpp +++ b/filedata.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include "filedata.hpp" @@ -8,13 +10,73 @@ FileData::FileData( char _type, string _permissions, string _user, string _group, - unsigned int _size, + unsigned long long _size, unsigned long long _modified_date, + unsigned long long _last_backup, string _name ) -: type( _type ), +: filetype( _type ), permissions( _permissions ), - user( _user ), - group( _group ), - size( _size ), + username( _user ), + groupname( _group ), + filesize( _size ), modified_date( _modified_date ), - name( _name ) {} + last_backup_date( _last_backup ), + filename( _name ) +{} + +vector split( const string &line, char c, int limit = -1 ) { + string::size_type start = 0, end = 0; + + vector out; + while( 0 != limit-- && end != line.size() ) { + if( 0 == limit ) { + end = line.size(); + } else { + end = line.find( c, start ); + if( end == string::npos ) { + end = line.size(); + } + } + out.push_back( line.substr( start, end-start ) ); + start = end + 1; + } + return out; +} + +ostream &operator<<( const FileData &d, ostream &o ) { + o << d.getFileType() << ' '; + o << d.getPermissions() << ' '; + o << d.getUserName() << ' '; + o << d.getGroupName() << ' '; + o << d.getFileSize() << ' '; + o << d.getModifiedDate() << ' '; + o << d.getLastBackupDate() << ' '; + o << d.getFileName() << '\0'; + + return o; +} + +istream &operator>>( istream &i, FileData &d ) { + string file_string; + + for( int c = i.get(); 0 != c && ! i.eof(); c = i.get() ) { + file_string.push_back( c ); + } + + if( 0 != file_string.size() ) { + // Example entry + // type perms user group size datemodified name (8 total) + // f 0600 cnb cnb 424 20051015205340 0 ./.git/index + vector vals = split( file_string, ' ', 8 ); + d.setFileType( vals[0][0] ); + 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.setFileName( vals[7] ); + } + + return i; +}