From 742e6c310601882dbf1048ed2973ea38cbfc3575 Mon Sep 17 00:00:00 2001 From: Steve Slaven Date: Fri, 24 Jul 2009 09:34:40 -0700 Subject: Fix a bug with writing partial blocks diff --git a/fusearchive.py b/fusearchive.py index b63f35d..f009d3b 100755 --- a/fusearchive.py +++ b/fusearchive.py @@ -14,7 +14,7 @@ from errno import * from stat import * from fuse import Fuse -#import pdb +import pdb if not hasattr(fuse, '__version__'): raise RuntimeError, \ @@ -30,6 +30,8 @@ debug_level = 0 # These control some of the file output magic_blocksize = 1024 * 128 +# Use a tiny block size to debug writes, so you can use a smaller test file +#magic_blocksize = 1024 magic_depth = 5 gzip_compress_level = 6 @@ -493,12 +495,17 @@ class FuseArchive(Fuse): dmsg( 3, "Writing final " + str( buf_remain ) + " bytes" ) this_len = buf_remain + dmsg( 3, "Bytes to copy: " + str(this_len) ) + dmsg( 3, " buf offset: " + str(buf_offset) ) + dmsg( 3, " chunk offset: " + str(rest) ) + # Since python doesn't do in-place reassignment like you # can with splice() we will reconstruct the data by joining # stuff by offsets (first chars to skip, then our joining # buf chunk, the everything that would have been after it) + #pdb.set_trace() self.chunk = self.chunk[ :rest ] + \ - buf[ buf_offset:this_len ] + \ + buf[ buf_offset:(buf_offset+this_len) ] + \ self.chunk[ (rest + this_len): ] buf_offset += this_len @@ -509,6 +516,7 @@ class FuseArchive(Fuse): self.chunk_modified = True self.modified = True + dmsg( 3, "Chunk size is now: " + str(len(self.chunk)) ) return len(buf) # BUG: If you cp -a a file then quickly ls -l sometimes it doesn't show -- cgit v0.10.2