static const unsigned int bytes_in_block = 0x800;
static const char * dbname = "/var/lib/backups/backups.db";
-unsigned long long current_time() {
- unsigned long long rc = 0;
- time_t now_tt = time( 0 );
- tm *now = localtime( &now_tt );
- rc += ( now->tm_year + 1900ULL ) * 10000000000ULL;
- rc += ( now->tm_mon + 1ULL ) * 100000000ULL;
- rc += now->tm_mday * 1000000ULL;
- rc += now->tm_hour * 10000ULL;
- rc += now->tm_min * 100ULL;
- rc += now->tm_sec;
-
- return rc;
+unsigned long long read_time( istream &i ) {
+ string date_string;
+
+ 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() ) {
+ date_string.push_back( c );
+ }
+ if( char_traits<char>::eof() == c ) { i.setstate( ios_base::eofbit ); }
+
+ return atoll( date_string.c_str() );
}
template<class I, class O, class INT>
}
int main() {
+ // Get the date on stdin
+ unsigned long long now = read_time( cin );
+
// Parse the list of current files on stdin
file_set current;
populate_set( cin, current );
unsigned long long total_blocks, total_bytes;
sizes( final.begin(), final.end(), total_blocks, total_bytes );
- unsigned long long now = current_time();
updateLastBackupDate( final.begin(), final.end(), now );
// Write the 'current' list to the dbfile
export PATH=$scriptsdir:$bindir:$PATH
# file locations and other values
+today=$(date +%Y%m%d%H%M%S)
datadir="/var/lib/backups"
tmpdir="/dev/shm/backups"
currentfiles="$tmpdir/files.db"
find-cmd.sh /home > $currentfiles
echo "Determining list of files to backup with lsbackups"
-cat $currentfiles | lsbackups > $backups 2>$statusfile
+{
+ # lsbackups expects the current date followed by a null before the list of files
+ printf "$today\0"
+ cat $currentfiles
+} | lsbackups > $backups 2>$statusfile
echo "Running rsync to pack the image"
cat $backups | rsync-cmd.sh $isomountdir