1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
/*
* mkfs A simple generic frontend for the for the mkfs program
* under Linux. See the manual page for details.
*
* Authors: David Engel, <david@ods.com>
* Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
* Ron Sommeling, <sommel@sci.kun.nl>
*
* Mon Jul 1 18:52:58 1996: janl@math.uio.no (Nicolai Langfeldt):
* Incorporated fix by Jonathan Kamens <jik@annex-1-slip-jik.cam.ov.com>
* 1999-02-22 Arkadiusz MiĆkiewicz <misiek@pld.ORG.PL>
* - added Native Language Support
*
*/
/*
* This command is deprecated. The utility is in maintenance mode,
* meaning we keep them in source tree for backward compatibility
* only. Do not waste time making this command better, unless the
* fix is about security or other very critical issue.
*
* See Documentation/deprecated.txt for more information.
*/
#include <getopt.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "c.h"
#include "closestream.h"
#include "nls.h"
#include "xalloc.h"
#ifndef DEFAULT_FSTYPE
#define DEFAULT_FSTYPE "ext2"
#endif
static void __attribute__((__noreturn__)) usage(void)
{
FILE *out = stdout;
fputs(USAGE_HEADER, out);
fprintf(out, _(" %s [options] [-t <type>] [fs-options] <device> [<size>]\n"),
program_invocation_short_name);
fputs(USAGE_SEPARATOR, out);
fputs(_("Make a Linux filesystem.\n"), out);
fputs(USAGE_OPTIONS, out);
fprintf(out, _(" -t, --type=<type> filesystem type; when unspecified, ext2 is used\n"));
fprintf(out, _(" fs-options parameters for the real filesystem builder\n"));
fprintf(out, _(" <device> path to the device to be used\n"));
fprintf(out, _(" <size> number of blocks to be used on the device\n"));
fprintf(out, _(" -V, --verbose explain what is being done;\n"
" specifying -V more than once will cause a dry-run\n"));
printf(USAGE_HELP_OPTIONS(20));
printf(USAGE_MAN_TAIL("mkfs(8)"));
exit(EXIT_SUCCESS);
}
static void __attribute__ ((__noreturn__)) print_version(void)
{
printf(UTIL_LINUX_VERSION);
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;
enum { VERSION_OPTION = CHAR_MAX + 1 };
static const struct option longopts[] = {
{"type", required_argument, NULL, 't'},
{"version", no_argument, NULL, VERSION_OPTION},
{"verbose", no_argument, NULL, 'V'},
{"help", no_argument, NULL, 'h'},
{NULL, 0, NULL, 0}
};
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
atexit(close_stdout);
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();
case VERSION_OPTION:
print_version();
default:
optind--;
more = 1;
break; /* start of specific arguments */
}
if (optind == argc) {
warnx(_("no device specified"));
errtryhelp(EXIT_FAILURE);
}
/* If -t wasn't specified, use the default */
if (fstype == NULL)
fstype = DEFAULT_FSTYPE;
xasprintf(&progname, "mkfs.%s", fstype);
argv[--optind] = progname;
if (verbose) {
printf(UTIL_LINUX_VERSION);
i = optind;
while (argv[i])
printf("%s ", argv[i++]);
printf("\n");
if (verbose > 1)
return EXIT_SUCCESS;
}
/* Execute the program */
execvp(progname, argv + optind);
err(EXIT_FAILURE, _("failed to execute %s"), progname);
}
|