mirror of
https://git.yoctoproject.org/poky
synced 2026-09-19 18:49:32 +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:
|
except ErrorNotSupp:
|
||||||
return FilemapSeek(image, log)
|
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."""
|
"""Efficiently copy sparse file to or into another file."""
|
||||||
if not api:
|
if not api:
|
||||||
api = filemap
|
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 = open(dst_fname, 'wb')
|
||||||
dst_file.truncate(os.path.getsize(src_fname))
|
dst_file.truncate(os.path.getsize(src_fname))
|
||||||
|
|
||||||
|
written = 0
|
||||||
for first, last in fmap.get_mapped_ranges(0, fmap.blocks_cnt):
|
for first, last in fmap.get_mapped_ranges(0, fmap.blocks_cnt):
|
||||||
start = first * fmap.block_size
|
start = first * fmap.block_size
|
||||||
end = (last + 1) * 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:
|
while read < to_read:
|
||||||
if read + chunk_size > to_read:
|
if read + chunk_size > to_read:
|
||||||
chunk_size = to_read - 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)
|
dst_file.write(chunk)
|
||||||
read += chunk_size
|
read += size
|
||||||
|
written += size
|
||||||
|
if written == length:
|
||||||
|
dst_file.close()
|
||||||
|
return
|
||||||
dst_file.close()
|
dst_file.close()
|
||||||
|
|||||||
Reference in New Issue
Block a user