Before this patch API like `ped_disk_new()` were unconditionally opening
the disk in O_RDWR mode. Now it may be opened in readonly mode by
setting `read_only = 1` field of `PedDevice` before calling the
function.

This allows to avoid kernel/udev events like "remove/add" and "change"
in cases, where users are only interested in read-only functional, like
reading a partitions list.

Signed-off-by: Konstantin Kharlamov <[email protected]>
---
 libparted/arch/beos.c  | 2 +-
 libparted/arch/linux.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libparted/arch/beos.c b/libparted/arch/beos.c
index 91664ad..a2d94db 100644
--- a/libparted/arch/beos.c
+++ b/libparted/arch/beos.c
@@ -334,7 +334,7 @@ beos_open (PedDevice* dev)
        BEOSSpecific* arch_specific = BEOS_SPECIFIC(dev);
 
 retry:
-       arch_specific->fd = open(dev->path, O_RDWR);
+       arch_specific->fd = open(dev->path, dev->read_only ? RD_MODE : RW_MODE);
        if (arch_specific->fd == -1) {
                char* rw_error_msg = strerror(errno);
 
diff --git a/libparted/arch/linux.c b/libparted/arch/linux.c
index 09ec781..1010c70 100644
--- a/libparted/arch/linux.c
+++ b/libparted/arch/linux.c
@@ -1708,7 +1708,7 @@ _device_open_ro (PedDevice* dev)
 static int
 linux_open (PedDevice* dev)
 {
-    return _device_open (dev, RW_MODE);
+    return _device_open (dev, dev->read_only ? RD_MODE : RW_MODE);
 }
 
 static int
-- 
2.39.0


Reply via email to