[PATCH 3/5] ls.summary_bytes: fix case where major/minor string was undefined

0 views
Skip to first unread message

Rob Browning

unread,
Mar 14, 2026, 4:57:44 PM (10 days ago) Mar 14
to bup-...@googlegroups.com
Always define the device major/minor string for a character or block
device. (If meta.rdev is 0, either the real value was 0, or it's not
a character or block device (see _add_common).)

Signed-off-by: Rob Browning <r...@defaultvalue.org>
Tested-by: Rob Browning <r...@defaultvalue.org>
---
lib/bup/metadata.py | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/bup/metadata.py b/lib/bup/metadata.py
index 3ed2f103..4431ad74 100644
--- a/lib/bup/metadata.py
+++ b/lib/bup/metadata.py
@@ -258,6 +258,10 @@ class Metadata:
# during restore. On some platforms (i.e. kFreeBSD), it isn't
# stable for other file types. For example "cp -a" will
# change it for a plain file.
+ #
+ # FIXME: should we always collect rdev, and just handle
+ # suppressing it for the relevant types where appropriate
+ # (cf. summary_bytes() size_or_dev_str).
if stat.S_ISCHR(st.st_mode) or stat.S_ISBLK(st.st_mode):
self.rdev = st.st_rdev
else:
@@ -1126,9 +1130,8 @@ def summary_bytes(meta, numeric_ids = False, classification = None,
elif meta.gid is not None:
group_str = str(meta.gid).encode()
if stat.S_ISCHR(meta.mode) or stat.S_ISBLK(meta.mode):
- if meta.rdev:
- size_or_dev_str = ('%d,%d' % (os.major(meta.rdev),
- os.minor(meta.rdev))).encode()
+ size_or_dev_str = ('%d,%d' % (os.major(meta.rdev),
+ os.minor(meta.rdev))).encode()
elif meta.size is not None:
if human_readable:
size_or_dev_str = format_filesize(meta.size).encode()
--
2.47.3

Reply all
Reply to author
Forward
0 new messages