[git pull] mkfs fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 37b94458bd0f4a178233ad0366a727bf5bde879f:

  sfdisk: fix coding style. (2011-06-29 12:47:38 +0200)

are available in the git repository at:
  https://github.com/kerolasa/lelux-utiliteetit mkfs

Sami Kerola (4):
      mkfs: add long options
      docs: add long options to mkfs.8
      mkfs: include-what-you-use header check
      mkfs: coding style fixes

 disk-utils/mkfs.8 |   44 ++++++-------
 disk-utils/mkfs.c |  189 +++++++++++++++++++++++++++++++---------------------
 2 files changed, 133 insertions(+), 100 deletions(-)

diff --git a/disk-utils/mkfs.8 b/disk-utils/mkfs.8
index 6a39633..88699c1 100644
--- a/disk-utils/mkfs.8
+++ b/disk-utils/mkfs.8
@@ -1,15 +1,12 @@
 .\" -*- nroff -*-
 .TH MKFS 8 "Jun 1995" "Version 1.9"
+.TH MKFS "8" "June 2011" "util-linux" "System Administration Utilities"
 .SH NAME
 mkfs \- build a Linux file system
 .SH SYNOPSIS
+.SH SYNOPSIS
 .B mkfs
-.RB [ \-V ]
-.RB [ \-t
-.IR fstype ]
-.RI [ fs-options ]
-.I filesys
-.RI [ blocks ]
+[\fIoptions\fR] [\fI-t type fs-options\fR] \fIdevice \fR[\fIsize\fR]
 .SH DESCRIPTION
 .B mkfs
 is used to build a Linux file system on a device, usually
@@ -19,8 +16,9 @@ is either the device name (e.g.
 .IR /dev/hda1 ,
 .IR /dev/sdb2 ),
 or a regular file that shall contain the file system.
-.I blocks
-is the number of blocks to be used for the file system.
+The
+.I size
+argument is the number of blocks to be used for the file system.
 .PP
 The exit code returned by
 .B mkfs
@@ -49,14 +47,7 @@ Please see the file system-specific builder manual pages for
 further details.
 .SH OPTIONS
 .TP
-.B -V
-Produce verbose output, including all file system-specific commands
-that are executed.
-Specifying this option more than once inhibits execution of any
-file system-specific commands.
-This is really only useful for testing.
-.TP
-.BI -t \ fstype
+\fB\-t\fR, \fB\-\-type\fR=\fITYPE\fR
 Specifies the type of file system to be built.
 If not specified, the default file system type
 (currently ext2) is used.
@@ -67,20 +58,25 @@ system builder.
 Although not guaranteed, the following options are supported
 by most file system builders.
 .TP
-.B -c
-Check the device for bad blocks before building the file system.
+\fB\-V\fR, \fB\-\-verbose\fR
+Produce verbose output, including all file system-specific commands
+that are executed.
+Specifying this option more than once inhibits execution of any
+file system-specific commands.
+This is really only useful for testing.
 .TP
-.BI -l \ filename
-Read the bad blocks list from
-.I filename
+\fB\-V\fR, \fB\-\-version\fR
+output version information and exit
+\fB\-V\fR will output version information only when it is the
+only parameter.
 .TP
-.B -v
-Produce verbose output.
+\fB\-h\fR, \fB\-\-help\fR
+Display help and exit.
 .SH BUGS
 All generic options must precede and not be combined with
 file system-specific options.
 Some file system-specific programs do not support the
-.I -v
+.I -V
 (verbose) option, nor return meaningful exit codes.
 Also, some file system-specific programs do not automatically
 detect the device size and require the
diff --git a/disk-utils/mkfs.c b/disk-utils/mkfs.c
index e22c512..ce845a5 100644
--- a/disk-utils/mkfs.c
+++ b/disk-utils/mkfs.c
@@ -2,8 +2,6 @@
  * mkfs		A simple generic frontend for the for the mkfs program
  *		under Linux.  See the manual page for details.
  *
- * Usage:	mkfs [-V] [-t fstype] [fs-options] device [size]
- *
  * Authors:	David Engel, <david@xxxxxxx>
  *		Fred N. van Kempen, <waltje@xxxxxxxxxxxxxxxxxxx>
  *		Ron Sommeling, <sommel@xxxxxxxxxx>
@@ -15,91 +13,130 @@
  *	
  */

-
+#include <getopt.h>
+#include <limits.h>
 #include <stdio.h>
-#include <unistd.h>
+#include <stdlib.h>
 #include <string.h>
-#include <nls.h>
+#include <unistd.h>

+#include "c.h"
+#include "nls.h"
 #include "xalloc.h"

 #ifndef DEFAULT_FSTYPE
-# define DEFAULT_FSTYPE		"ext2"
+#define DEFAULT_FSTYPE	"ext2"
 #endif

 #define SEARCH_PATH	"PATH=" FS_SEARCH_PATH
 #define PROGNAME	"mkfs.%s"


-int main(int argc, char *argv[])
+static void __attribute__ ((__noreturn__)) usage(FILE * out)
+{
+	fprintf(out,
+		_("Usage: %s [options] [-t type fs-options] device [size]\n"),
+		program_invocation_short_name);
+
+	fprintf(out, _("\nOptions:\n"
+		       " -t, --type=TYPE  file system type, when undefined ext2 is used\n"
+		       "     fs-options   parameters to real file system builder\n"
+		       "     device       path to a device\n"
+		       "     size         number of blocks on the device\n"
+		       " -V, --verbose    explain what is done\n"
+		       "                  defining -V more than once will cause a dry-run\n"
+		       " -V, --version    output version information and exit\n"
+		       "                  -V as version must be only option\n"
+		       " -h, --help       display this help and exit\n"));
+
+	fprintf(out, _("\nFor more information see mkfs(8).\n"));
+
+	exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
+}
+
+static void __attribute__ ((__noreturn__)) print_version(void)
+{
+	printf(_("%s (%s)\n"),
+	       program_invocation_short_name, PACKAGE_STRING);
+	exit(EXIT_SUCCESS);
+}
+
+int main(int argc, char **argv)
 {
-  char *progname;	/* name of executable to be called */
-  char *fstype = NULL;
-  int i, more = 0, verbose = 0;
-  char *oldpath, *newpath;
-  char *program_name, *p;
-
-  program_name = argv[0];
-  if ((p = strrchr(program_name, '/')) != NULL)
-	  program_name = p+1;
-
-  setlocale(LC_ALL, "");
-  bindtextdomain(PACKAGE, LOCALEDIR);
-  textdomain(PACKAGE);
-
-  if (argc == 2 &&
-      (!strcmp(argv[1], "-V") || !strcmp(argv[1], "--version"))) {
-	  printf(_("%s (%s)\n"), program_name, PACKAGE_STRING);
-	  exit(EXIT_SUCCESS);
-  }
-
-  /* Check commandline options. */
-  opterr = 0;
-  while ((more == 0) && ((i = getopt(argc, argv, "Vt:")) != -1))
-    switch (i) {
-    case 'V':
-      verbose++;
-      break;
-    case 't':
-      fstype = optarg;
-      break;
-    default:
-      optind--;
-      more = 1;
-      break;		/* start of specific arguments */
-    }
-  if (optind == argc)
-	  errx(EXIT_FAILURE, _("Usage: mkfs [-V] [-t fstype] [fs-options]
device [size]"));
-
-  /* If -t wasn't specified, use the default */
-  if (fstype == NULL)
-    fstype = DEFAULT_FSTYPE;
-
-  /* Set PATH and program name */
-  oldpath = getenv("PATH");
-  if (!oldpath)
-	  oldpath = "/bin";
-
-  newpath = xmalloc(strlen(oldpath) + sizeof(SEARCH_PATH) + 3);
-  sprintf(newpath, "%s:%s\n", SEARCH_PATH, oldpath);
-  putenv(newpath);
-
-  progname = xmalloc(sizeof(PROGNAME) + strlen(fstype) + 1);
-  sprintf(progname, PROGNAME, fstype);
-  argv[--optind] = progname;
-
-  if (verbose) {
-    printf(_("mkfs (%s)\n"), PACKAGE_STRING);
-    i = optind;
-    while (argv[i])
-      printf("%s ", argv[i++]);
-    printf("\n");
-    if (verbose > 1)
-      return 0;
-  }
-
-  /* Execute the program */
-  execvp(progname, argv+optind);
-  perror(progname);
-  return 1;
+	char *progname;		/* name of executable to be called */
+	char *fstype = NULL;
+	int i, more = 0, verbose = 0;
+	char *oldpath, *newpath;
+
+	enum { VERSION_OPTION = CHAR_MAX + 1 };
+
+	static const struct option longopts[] = {
+		{"type", required_argument, NULL, 't'},
+		{"version", no_argument, NULL, VERSION_OPTION},
+		{"help", no_argument, NULL, 'h'},
+		{NULL, 0, NULL, 0}
+	};
+
+	setlocale(LC_ALL, "");
+	bindtextdomain(PACKAGE, LOCALEDIR);
+	textdomain(PACKAGE);
+
+	if (argc == 2 && !strcmp(argv[1], "-V"))
+		print_version();
+
+	/* Check commandline options. */
+	opterr = 0;
+	while ((more == 0)
+	       && ((i = getopt_long(argc, argv, "Vt:h", longopts, NULL))
+		   != -1))
+		switch (i) {
+		case 'V':
+			verbose++;
+			break;
+		case 't':
+			fstype = optarg;
+			break;
+		case 'h':
+			usage(stdout);
+		case VERSION_OPTION:
+			print_version();
+		default:
+			optind--;
+			more = 1;
+			break;	/* start of specific arguments */
+		}
+	if (optind == argc)
+		usage(stderr);
+
+	/* If -t wasn't specified, use the default */
+	if (fstype == NULL)
+		fstype = DEFAULT_FSTYPE;
+
+	/* Set PATH and program name */
+	oldpath = getenv("PATH");
+	if (!oldpath)
+		oldpath = "/bin";
+
+	newpath = xmalloc(strlen(oldpath) + sizeof(SEARCH_PATH) + 3);
+	sprintf(newpath, "%s:%s\n", SEARCH_PATH, oldpath);
+	putenv(newpath);
+
+	progname = xmalloc(sizeof(PROGNAME) + strlen(fstype) + 1);
+	sprintf(progname, PROGNAME, fstype);
+	argv[--optind] = progname;
+
+	if (verbose) {
+		printf(_("mkfs (%s)\n"), PACKAGE_STRING);
+		i = optind;
+		while (argv[i])
+			printf("%s ", argv[i++]);
+		printf("\n");
+		if (verbose > 1)
+			return EXIT_SUCCESS;
+	}
+
+	/* Execute the program */
+	execvp(progname, argv + optind);
+	perror(progname);
+	return EXIT_FAILURE;
 }

-- 
   Sami Kerola
   http://www.iki.fi/kerolasa/
--
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


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux