mirror of
https://git.yoctoproject.org/poky
synced 2026-04-18 21:32:12 +02:00
filemap: add parameter 'length' to sparse_copy
Added parameter 'length' to specify amount of data to write into destination file. This is useful when only part of source file should be written into destination file. (From OE-Core rev: cc44e2eb3b5027a3531e6349937a23d73313b3c6) Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
ce7895a61c
commit
16562e7672
@@ -530,7 +530,8 @@ def filemap(image, log=None):
|
||||
except ErrorNotSupp:
|
||||
return FilemapSeek(image, log)
|
||||
|
||||
def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
|
||||
def sparse_copy(src_fname, dst_fname, offset=0, skip=0,
|
||||
length=0, api=None):
|
||||
"""Efficiently copy sparse file to or into another file."""
|
||||
if not api:
|
||||
api = filemap
|
||||
@@ -541,6 +542,7 @@ def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
|
||||
dst_file = open(dst_fname, 'wb')
|
||||
dst_file.truncate(os.path.getsize(src_fname))
|
||||
|
||||
written = 0
|
||||
for first, last in fmap.get_mapped_ranges(0, fmap.blocks_cnt):
|
||||
start = first * fmap.block_size
|
||||
end = (last + 1) * fmap.block_size
|
||||
@@ -561,7 +563,14 @@ def sparse_copy(src_fname, dst_fname, offset=0, skip=0, api=None):
|
||||
while read < to_read:
|
||||
if read + chunk_size > to_read:
|
||||
chunk_size = to_read - read
|
||||
chunk = fmap._f_image.read(chunk_size)
|
||||
size = chunk_size
|
||||
if length and written + size > length:
|
||||
size = length - written
|
||||
chunk = fmap._f_image.read(size)
|
||||
dst_file.write(chunk)
|
||||
read += chunk_size
|
||||
read += size
|
||||
written += size
|
||||
if written == length:
|
||||
dst_file.close()
|
||||
return
|
||||
dst_file.close()
|
||||
|
||||
Reference in New Issue
Block a user