summaryrefslogtreecommitdiffstats
path: root/disk-utils/sfdisk.c
diff options
context:
space:
mode:
authorKarel Zak2014-09-05 14:11:12 +0200
committerKarel Zak2014-10-07 14:55:31 +0200
commit254b1dfcc396cb2e2cd2bdeb5d3e0a5b6dd4b504 (patch)
tree9dbbef334063ae1b677c919ac9e618cfd81c2e98 /disk-utils/sfdisk.c
parentsfdisk: add --activate (diff)
downloadkernel-qcow2-util-linux-254b1dfcc396cb2e2cd2bdeb5d3e0a5b6dd4b504.tar.gz
kernel-qcow2-util-linux-254b1dfcc396cb2e2cd2bdeb5d3e0a5b6dd4b504.tar.xz
kernel-qcow2-util-linux-254b1dfcc396cb2e2cd2bdeb5d3e0a5b6dd4b504.zip
sfdisk: cleanup comments and command_activate()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
-rw-r--r--disk-utils/sfdisk.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
index 65b2d48ba..8908c6517 100644
--- a/disk-utils/sfdisk.c
+++ b/disk-utils/sfdisk.c
@@ -215,6 +215,9 @@ static int command_show_size(struct sfdisk *sf __attribute__((__unused__)),
return 0;
}
+/*
+ * sfdisk --activate <device> [<partno> ...]
+ */
static int command_activate(struct sfdisk *sf, int argc, char **argv)
{
int rc, nparts, i;
@@ -263,7 +266,11 @@ static int command_activate(struct sfdisk *sf, int argc, char **argv)
for (i = 1; i < argc; i++) {
int n = strtou32_or_err(argv[i], _("failed to parse partition number"));
- fdisk_partition_toggle_flag(sf->cxt, n - 1, DOS_FLAG_ACTIVE);
+ rc = fdisk_partition_toggle_flag(sf->cxt, n - 1, DOS_FLAG_ACTIVE);
+ if (rc)
+ errx(EXIT_FAILURE,
+ _("%s: #%d: failed to toggle bootable flag"),
+ devname, i + 1);
}
fdisk_unref_partition(pa);
@@ -305,15 +312,19 @@ static int command_dump(struct sfdisk *sf, int argc, char **argv)
return 0;
}
-/* default command */
-static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
+/*
+ * sfdisk <device> [[-N] <partno>]
+ *
+ * Note that the option -N is there for backward compatibility only.
+ */
+static int command_fdisk(struct sfdisk *sf, int argc, char **argv, int partno)
{
- int rc, partno;
+ int rc;
const char *devname = NULL;
if (argc)
devname = argv[0];
- if (argc > 1)
+ if (partno < 0 && argc > 1)
partno = strtou32_or_err(argv[1],
_("failed to parse partition number"));
if (!devname)
@@ -323,7 +334,12 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
if (rc)
err(EXIT_FAILURE, _("cannot open %s"), devname);
- fdisk_deassign_device(sf->cxt, 1);
+
+
+ if (!rc)
+ rc = fdisk_write_disklabel(sf->cxt);
+ if (!rc)
+ rc = fdisk_deassign_device(sf->cxt, 1);
return rc;
}
@@ -355,7 +371,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out)
int main(int argc, char *argv[])
{
struct sfdisk _sf = { .act = 0 }, *sf = &_sf;
- int rc = -EINVAL, c;
+ int rc = -EINVAL, c, partno = 1;
static const struct option longopts[] = {
{ "activate",no_argument, NULL, 'a' },
@@ -363,6 +379,7 @@ int main(int argc, char *argv[])
{ "dump", no_argument, NULL, 'd' },
{ "help", no_argument, NULL, 'h' },
{ "show-size", no_argument, NULL, 's' },
+ { "partno", required_argument, NULL, 'N' },
{ "version", no_argument, NULL, 'v' },
{ NULL, 0, 0, 0 },
};
@@ -372,7 +389,7 @@ int main(int argc, char *argv[])
textdomain(PACKAGE);
atexit(close_stdout);
- while ((c = getopt_long(argc, argv, "adhlsv", longopts, NULL)) != -1) {
+ while ((c = getopt_long(argc, argv, "adhlNsv", longopts, NULL)) != -1) {
switch(c) {
case 'a':
sf->act = ACT_ACTIVATE;
@@ -386,6 +403,9 @@ int main(int argc, char *argv[])
case 'd':
sf->act = ACT_DUMP;
break;
+ case 'N':
+ partno = strtou32_or_err(optarg, _("failed to parse partition number"));
+ break;
case 's':
sf->act = ACT_SHOW_SIZE;
break;
@@ -408,7 +428,7 @@ int main(int argc, char *argv[])
break;
case ACT_FDISK:
- rc = command_fdisk(sf, argc - optind, argv + optind);
+ rc = command_fdisk(sf, argc - optind, argv + optind, partno);
break;
case ACT_DUMP: