Otherwise, `fdisk` fails silently with "Bad file descriptor" when writing the partition table. Signed-off-by: Maciej Małecki <me@xxxxxxxxxxxx> --- libfdisk/src/context.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index c405403..40f9080 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -248,17 +248,26 @@ static int warn_wipe(struct fdisk_context *cxt) int fdisk_context_assign_device(struct fdisk_context *cxt, const char *fname, int readonly) { - int fd; + int fd, mode; DBG(CONTEXT, dbgprint("assigning device %s", fname)); assert(cxt); reset_context(cxt); - if (readonly == 1 || (fd = open(fname, O_RDWR|O_CLOEXEC)) < 0) { - if ((fd = open(fname, O_RDONLY|O_CLOEXEC)) < 0) +retry: + mode = (readonly ? O_RDONLY : O_RDWR) | O_CLOEXEC; + fd = open(fname, mode); + if (fd < 0) { + if (readonly) return -errno; - readonly = 1; + else { + fdisk_warn(cxt, + _("%s: opening device in read write mode failed"), + fname); + readonly = 1; + goto retry; + } } cxt->dev_fd = fd; -- 1.9.0 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html