[klibc] [PATCH] losetup: use stdout and return 0 for -h

maximilian attems max at stro.at
Tue Jul 5 14:34:20 PDT 2011


From: Karel Zak <kzak at redhat.com>

ported to klibc losetup version from util-linux
108591d2b7860ca0b8d27d114bed1e504a31fa72,
also add -h option. -maks

Reported-by: Kamalesh Babulal <kamalesh at linux.vnet.ibm.com>
Signed-off-by: Karel Zak <kzak at redhat.com>
Signed-off-by: maximilian attems <max at stro.at>
---

Other patches might be useful too, that one just triggered
the easy to port and useful treshold. (:

 usr/utils/losetup.c |   29 +++++++++++++++++------------
 1 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/usr/utils/losetup.c b/usr/utils/losetup.c
index 59030d7..9deacd4 100644
--- a/usr/utils/losetup.c
+++ b/usr/utils/losetup.c
@@ -353,14 +353,16 @@ int del_loop (const char *device)
 int verbose = 0;
 char *progname;
 
-static void usage(void) {
-	fprintf(stderr, "usage:\n\
+static void usage(FILE *f)
+{
+	fprintf(f, "usage:\n\
   %s loop_device                                       # give info\n\
   %s -d loop_device                                    # delete\n\
   %s -f                                                # find unused\n\
+  %s -h                                                # this help\n\
   %s [-e encryption] [-o offset] {-f|loop_device} file # setup\n",
-		progname, progname, progname, progname);
-	exit(1);
+		progname, progname, progname, progname, progname);
+	exit(f == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
 }
 
 char * xstrdup (const char *s) {
@@ -407,7 +409,7 @@ int main(int argc, char **argv)
 	if ((p = strrchr(progname, '/')) != NULL)
 		progname = p+1;
 
-	while ((c = getopt(argc, argv, "de:E:fo:p:v")) != -1) {
+	while ((c = getopt(argc, argv, "de:E:fho:p:v")) != -1) {
 		switch (c) {
 		case 'd':
 			delete = 1;
@@ -419,6 +421,9 @@ int main(int argc, char **argv)
 		case 'f':
 			find = 1;
 			break;
+		case 'h':
+			usage(stdout);
+			break;
 		case 'o':
 			offset = optarg;
 			break;
@@ -429,21 +434,21 @@ int main(int argc, char **argv)
 			verbose = 1;
 			break;
 		default:
-			usage();
+			usage(stderr);
 		}
 	}
 
 	if (argc == 1) {
-		usage();
+		usage(stderr);
 	} else if (delete) {
 		if (argc != optind+1 || encryption || offset || find)
-			usage();
+			usage(stderr);
 	} else if (find) {
 		if (argc < optind || argc > optind+1)
-			usage();
+			usage(stderr);
 	} else {
 		if (argc < optind+1 || argc > optind+2)
-			usage();
+			usage(stderr);
 	}
 
 	if (find) {
@@ -471,9 +476,9 @@ int main(int argc, char **argv)
 		res = show_loop(device);
 	else {
 		if (offset && sscanf(offset, "%llu", &off) != 1)
-			usage();
+			usage(stderr);
 		if (passfd && sscanf(passfd, "%d", &pfd) != 1)
-			usage();
+			usage(stderr);
 		res = set_loop(device, file, off, encryption, pfd, &ro);
 	}
 	return res;
-- 
1.7.5.4



More information about the klibc mailing list