int fdisk_missing_geometry(struct fdisk_context *cxt) { int rc; assert(cxt); rc = (fdisk_require_geometry(cxt) && (!cxt->geom.heads || !cxt->geom.sectors || !cxt->geom.cylinders)); if (rc && !fdisk_context_listonly(cxt)) fdisk_warnx(cxt, _("Incomplete geometry setting.")); return rc; }
/** * fdisk_context_assign_device: * @fname: path to the device to be handled * @readonly: how to open the device * * If the @readonly flag is set to false, fdisk will attempt to open * the device with read-write mode and will fallback to read-only if * unsuccessful. * * Returns: 0 on success, < 0 on error. */ int fdisk_context_assign_device(struct fdisk_context *cxt, const char *fname, int readonly) { int fd; 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) return -errno; readonly = 1; } cxt->dev_fd = fd; cxt->dev_path = strdup(fname); if (!cxt->dev_path) goto fail; fdisk_discover_topology(cxt); fdisk_discover_geometry(cxt); if (fdisk_read_firstsector(cxt) < 0) goto fail; /* detect labels and apply labes specific stuff (e.g geomery) * to the context */ fdisk_probe_labels(cxt); /* let's apply user geometry *after* label prober * to make it possible to override in-label setting */ fdisk_apply_user_device_properties(cxt); /* warn about obsolete stuff on the device if we aren't in * list-only mode and there is not PT yet */ if (!fdisk_context_listonly(cxt) && !fdisk_dev_has_disklabel(cxt)) warn_wipe(cxt); DBG(CONTEXT, dbgprint("context %p initialized for %s [%s]", cxt, fname, readonly ? "READ-ONLY" : "READ-WRITE")); return 0; fail: DBG(CONTEXT, dbgprint("failed to assign device")); return -errno; }