diff --git a/osbuild/loop.py b/osbuild/loop.py index 74133870..96dab6fc 100644 --- a/osbuild/loop.py +++ b/osbuild/loop.py @@ -38,6 +38,11 @@ class LoopInfo(ctypes.Structure): ('lo_init', ctypes.c_uint64 * 2) ] + @property + def autoclear(self) -> bool: + """Return if `LO_FLAGS_AUTOCLEAR` is set in `lo_flags`""" + return bool(self.lo_flags & Loop.LO_FLAGS_AUTOCLEAR) + class Loop: """Loopback device diff --git a/test/mod/test_loop.py b/test/mod/test_loop.py index e5f9f730..e6800821 100644 --- a/test/mod/test_loop.py +++ b/test/mod/test_loop.py @@ -35,7 +35,7 @@ def test_basic(tempdir): f = open(path, "wb+") f.truncate(1024) f.flush() - lo = ctl.loop_for_fd(f.fileno()) + lo = ctl.loop_for_fd(f.fileno(), autoclear=True) sb = os.fstat(f.fileno()) @@ -46,6 +46,13 @@ def test_basic(tempdir): assert info.lo_inode == sb.st_ino assert info.lo_number == lo.minor + # check for autoclear flags setting and helpers + assert info.autoclear + + lo.set_status(autoclear=False) + info = lo.get_status() + assert not info.autoclear + finally: if lo: with contextlib.suppress(OSError):