From f33f401917c7c40b17b3667fc8f29133e77c6523 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Fri, 14 May 2010 12:39:36 -0400 Subject: [PATCH] dm6: use Base64 encoding for inode numbers --- dm6 | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/dm6 b/dm6 index 44dcb91..a25804b 100755 --- a/dm6 +++ b/dm6 @@ -7,6 +7,7 @@ use File::Compare; use File::Path; use File::Temp; use File::stat; +use MIME::Base64; # Copyright (C) 2010 Zygo Blaxell @@ -103,6 +104,22 @@ sub prepare_parents { return "$parent/$suffix"; } +sub name_quad { + my ($int64) = @_; + my $packed = pack('Q', $int64); + $packed =~ s/^\0+//os; + my $base64_packed = encode_base64($packed, ''); + # Don't strip off the trailing padding since it makes the string + # so short we end up just putting it back on again. + # $base64_packed =~ s/=+$//os; + return $base64_packed; +} + +sub name_ino { + my ($ino) = @_; + return name_quad($ino) . 'I'; +} + # ext3 cannot handle more than 32000 links to a file. Leave some headroom. # Arguably this should be configurable, but the losses are miniscule and # the coding for option support is not. @@ -127,7 +144,7 @@ while () { next if ($st->nlink > $link_count_max); # Check link to inode - my $inode_link = prepare_parents($link_dir, $st->ino . 'I'); + my $inode_link = prepare_parents($link_dir, name_ino($st->ino)); print STDERR 'I'; my $inode_st = lstat($inode_link); my $update_links; @@ -191,7 +208,7 @@ while () { } # A link to the inode indicates we are done, so do it last - $inode_link = prepare_parents($link_dir, "${keep_ino}I"); + $inode_link = prepare_parents($link_dir, name_ino($keep_ino)); print STDERR ' '; link_files($digest_link, $inode_link); -- 2.30.2