summaryrefslogtreecommitdiffstats
path: root/partx/addpart.c
diff options
context:
space:
mode:
authorSami Kerola2012-03-17 18:04:37 +0100
committerKarel Zak2012-03-30 16:48:12 +0200
commit791130208506f50be63672fa733a70db871900da (patch)
tree2e340a78404adce814507ebf6f74c187120d3e4c /partx/addpart.c
parentpartx: add --version option (diff)
downloadkernel-qcow2-util-linux-791130208506f50be63672fa733a70db871900da.tar.gz
kernel-qcow2-util-linux-791130208506f50be63672fa733a70db871900da.tar.xz
kernel-qcow2-util-linux-791130208506f50be63672fa733a70db871900da.zip
addpart: align with util-linux coding standards
Add long options and usage function, use gnu errror printing facilities and validate inputs. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'partx/addpart.c')
-rw-r--r--partx/addpart.c78
1 files changed, 55 insertions, 23 deletions
diff --git a/partx/addpart.c b/partx/addpart.c
index 84770320f..be9b0792c 100644
--- a/partx/addpart.c
+++ b/partx/addpart.c
@@ -1,31 +1,63 @@
+#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
+#include "c.h"
+#include "nls.h"
#include "partx.h"
+#include "strutils.h"
-int
-main(int argc, char **argv)
+static void __attribute__ ((__noreturn__)) usage(FILE * out)
{
- int fd;
-
- if (argc != 5) {
- fprintf(stderr,
- "usage: %s diskdevice partitionnr start length\n",
- argv[0]);
- exit(1);
- }
- if ((fd = open(argv[1], O_RDONLY)) < 0) {
- perror(argv[1]);
- exit(1);
- }
-
- if (partx_add_partition(fd, atoi(argv[2]),
- atoll(argv[3]),
- atoll(argv[4]))) {
- perror("BLKPG");
- exit(1);
- }
-
- return 0;
+ fputs(USAGE_HEADER, out);
+ fprintf(out, _(" %s <disk device> <partition number> <start> <length>\n"),
+ program_invocation_short_name);
+ fputs(USAGE_OPTIONS, out);
+ fputs(USAGE_HELP, out);
+ fputs(USAGE_VERSION, out);
+ fprintf(out, USAGE_MAN_TAIL("addpart(8)"));
+ exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
+}
+
+int main(int argc, char **argv)
+{
+ int c, fd;
+
+ static const struct option longopts[] = {
+ {"help", no_argument, 0, 'h'},
+ {"version", no_argument, 0, 'V'},
+ {NULL, no_argument, 0, '0'},
+ };
+
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, LOCALEDIR);
+ textdomain(PACKAGE);
+
+ while ((c = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1)
+ switch (c) {
+ case 'V':
+ printf(UTIL_LINUX_VERSION);
+ return EXIT_SUCCESS;
+ case 'h':
+ usage(stdout);
+ default:
+ usage(stderr);
+ }
+
+ if (argc != 5)
+ usage(stderr);
+ if ((fd = open(argv[1], O_RDONLY)) < 0)
+ err(EXIT_FAILURE, "%s", argv[1]);
+
+ if (partx_add_partition(fd,
+ strtol_or_err(argv[2],
+ _("failed to parse argument")),
+ strtoll_or_err(argv[3],
+ _("failed to parse argument")),
+ strtoll_or_err(argv[4],
+ _("failed to parse argument"))))
+ err(EXIT_FAILURE, "BLKPG");
+
+ return EXIT_SUCCESS;
}