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