From: Dave Chinner <david@fromorbit.com>
To: linux-xfs@vger.kernel.org
Subject: [PATCH 41/42] mkfs: move error functions
Date: Wed, 30 Aug 2017 09:50:51 +1000 [thread overview]
Message-ID: <20170829235052.21050-42-david@fromorbit.com> (raw)
In-Reply-To: <20170829235052.21050-1-david@fromorbit.com>
From: Dave Chinner <dchinner@redhat.com>
Move all the error and helper functions like conflict() to the top
of the file so we can get rid of the forward declarations.
Signed-Off-By: Dave Chinner <dchinner@redhat.com>
---
mkfs/xfs_mkfs.c | 324 +++++++++++++++++++++++++++-----------------------------
1 file changed, 157 insertions(+), 167 deletions(-)
diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 9d087bc068a7..c01dc11882d9 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -21,16 +21,6 @@
#include "xfs_multidisk.h"
#include "libxcmd.h"
-/*
- * Prototypes for internal functions.
- */
-static void conflict(char opt, const char *tab[], int oldidx, int newidx);
-static void illegal(const char *value, const char *opt);
-static __attribute__((noreturn)) void usage (void);
-static __attribute__((noreturn)) void reqval(char opt, const char *tab[], int idx);
-static void respec(char opt, const char *tab[], int idx);
-static void unknown(char opt, char *s);
-static int ispow2(unsigned int i);
/*
* XXX: The configured block and sector sizes are defined as global variables so
@@ -896,6 +886,163 @@ struct mkfs_default_params {
*/
#define WHACK_SIZE (128 * 1024)
+static void __attribute__((noreturn))
+usage( void )
+{
+ fprintf(stderr, _("Usage: %s\n\
+/* blocksize */ [-b log=n|size=num]\n\
+/* metadata */ [-m crc=0|1,finobt=0|1,uuid=xxx,rmapbt=0|1,reflink=0|1]\n\
+/* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num,\n\
+ (sunit=value,swidth=value|su=num,sw=num|noalign),\n\
+ sectlog=n|sectsize=num\n\
+/* force overwrite */ [-f]\n\
+/* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,\n\
+ projid32bit=0|1,sparse=0|1]\n\
+/* no discard */ [-K]\n\
+/* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n\n\
+ sunit=value|su=num,sectlog=n|sectsize=num,\n\
+ lazy-count=0|1]\n\
+/* label */ [-L label (maximum 12 characters)]\n\
+/* naming */ [-n log=n|size=num,version=2|ci,ftype=0|1]\n\
+/* no-op info only */ [-N]\n\
+/* prototype file */ [-p fname]\n\
+/* quiet */ [-q]\n\
+/* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx]\n\
+/* sectorsize */ [-s log=n|size=num]\n\
+/* version */ [-V]\n\
+ devicename\n\
+<devicename> is required unless -d name=xxx is given.\n\
+<num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),\n\
+ xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).\n\
+<value> is xxx (512 byte blocks).\n"),
+ progname);
+ exit(1);
+}
+
+static void
+conflict(
+ char opt,
+ const char *tab[],
+ int oldidx,
+ int newidx)
+{
+ fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"),
+ opt, tab[oldidx], opt, tab[newidx]);
+ usage();
+}
+
+
+static void
+illegal(
+ const char *value,
+ const char *opt)
+{
+ fprintf(stderr, _("Illegal value %s for -%s option\n"), value, opt);
+ usage();
+}
+
+static int
+ispow2(
+ unsigned int i)
+{
+ return (i & (i - 1)) == 0;
+}
+
+static void __attribute__((noreturn))
+reqval(
+ char opt,
+ const char *tab[],
+ int idx)
+{
+ fprintf(stderr, _("-%c %s option requires a value\n"), opt, tab[idx]);
+ usage();
+}
+
+static void
+respec(
+ char opt,
+ const char *tab[],
+ int idx)
+{
+ fprintf(stderr, "-%c ", opt);
+ if (tab)
+ fprintf(stderr, "%s ", tab[idx]);
+ fprintf(stderr, _("option respecified\n"));
+ usage();
+}
+
+static void
+unknown(
+ char opt,
+ char *s)
+{
+ fprintf(stderr, _("unknown option -%c %s\n"), opt, s);
+ usage();
+}
+
+long long
+cvtnum(
+ unsigned int blksize,
+ unsigned int sectsize,
+ const char *s)
+{
+ long long i;
+ char *sp;
+ int c;
+
+ i = strtoll(s, &sp, 0);
+ if (i == 0 && sp == s)
+ return -1LL;
+ if (*sp == '\0')
+ return i;
+
+ if (sp[1] != '\0')
+ return -1LL;
+
+ if (*sp == 'b') {
+ if (!blksize) {
+ fprintf(stderr,
+_("Blocksize must be provided prior to using 'b' suffix.\n"));
+ usage();
+ } else {
+ return i * blksize;
+ }
+ }
+ if (*sp == 's') {
+ if (!sectsize) {
+ fprintf(stderr,
+_("Sectorsize must be specified prior to using 's' suffix.\n"));
+ usage();
+ } else {
+ return i * sectsize;
+ }
+ }
+
+ c = tolower(*sp);
+ switch (c) {
+ case 'e':
+ i *= 1024LL;
+ /* fall through */
+ case 'p':
+ i *= 1024LL;
+ /* fall through */
+ case 't':
+ i *= 1024LL;
+ /* fall through */
+ case 'g':
+ i *= 1024LL;
+ /* fall through */
+ case 'm':
+ i *= 1024LL;
+ /* fall through */
+ case 'k':
+ return i * 1024LL;
+ default:
+ break;
+ }
+ return -1LL;
+}
+
static void
check_device_type(
const char *name,
@@ -3920,160 +4067,3 @@ main(
return 0;
}
-
-static void
-conflict(
- char opt,
- const char *tab[],
- int oldidx,
- int newidx)
-{
- fprintf(stderr, _("Cannot specify both -%c %s and -%c %s\n"),
- opt, tab[oldidx], opt, tab[newidx]);
- usage();
-}
-
-
-static void
-illegal(
- const char *value,
- const char *opt)
-{
- fprintf(stderr, _("Illegal value %s for -%s option\n"), value, opt);
- usage();
-}
-
-static int
-ispow2(
- unsigned int i)
-{
- return (i & (i - 1)) == 0;
-}
-
-static void __attribute__((noreturn))
-reqval(
- char opt,
- const char *tab[],
- int idx)
-{
- fprintf(stderr, _("-%c %s option requires a value\n"), opt, tab[idx]);
- usage();
-}
-
-static void
-respec(
- char opt,
- const char *tab[],
- int idx)
-{
- fprintf(stderr, "-%c ", opt);
- if (tab)
- fprintf(stderr, "%s ", tab[idx]);
- fprintf(stderr, _("option respecified\n"));
- usage();
-}
-
-static void
-unknown(
- char opt,
- char *s)
-{
- fprintf(stderr, _("unknown option -%c %s\n"), opt, s);
- usage();
-}
-
-long long
-cvtnum(
- unsigned int blksize,
- unsigned int sectsize,
- const char *s)
-{
- long long i;
- char *sp;
- int c;
-
- i = strtoll(s, &sp, 0);
- if (i == 0 && sp == s)
- return -1LL;
- if (*sp == '\0')
- return i;
-
- if (sp[1] != '\0')
- return -1LL;
-
- if (*sp == 'b') {
- if (!blksize) {
- fprintf(stderr,
-_("Blocksize must be provided prior to using 'b' suffix.\n"));
- usage();
- } else {
- return i * blksize;
- }
- }
- if (*sp == 's') {
- if (!sectsize) {
- fprintf(stderr,
-_("Sectorsize must be specified prior to using 's' suffix.\n"));
- usage();
- } else {
- return i * sectsize;
- }
- }
-
- c = tolower(*sp);
- switch (c) {
- case 'e':
- i *= 1024LL;
- /* fall through */
- case 'p':
- i *= 1024LL;
- /* fall through */
- case 't':
- i *= 1024LL;
- /* fall through */
- case 'g':
- i *= 1024LL;
- /* fall through */
- case 'm':
- i *= 1024LL;
- /* fall through */
- case 'k':
- return i * 1024LL;
- default:
- break;
- }
- return -1LL;
-}
-
-static void __attribute__((noreturn))
-usage( void )
-{
- fprintf(stderr, _("Usage: %s\n\
-/* blocksize */ [-b log=n|size=num]\n\
-/* metadata */ [-m crc=0|1,finobt=0|1,uuid=xxx,rmapbt=0|1,reflink=0|1]\n\
-/* data subvol */ [-d agcount=n,agsize=n,file,name=xxx,size=num,\n\
- (sunit=value,swidth=value|su=num,sw=num|noalign),\n\
- sectlog=n|sectsize=num\n\
-/* force overwrite */ [-f]\n\
-/* inode size */ [-i log=n|perblock=n|size=num,maxpct=n,attr=0|1|2,\n\
- projid32bit=0|1,sparse=0|1]\n\
-/* no discard */ [-K]\n\
-/* log subvol */ [-l agnum=n,internal,size=num,logdev=xxx,version=n\n\
- sunit=value|su=num,sectlog=n|sectsize=num,\n\
- lazy-count=0|1]\n\
-/* label */ [-L label (maximum 12 characters)]\n\
-/* naming */ [-n log=n|size=num,version=2|ci,ftype=0|1]\n\
-/* no-op info only */ [-N]\n\
-/* prototype file */ [-p fname]\n\
-/* quiet */ [-q]\n\
-/* realtime subvol */ [-r extsize=num,size=num,rtdev=xxx]\n\
-/* sectorsize */ [-s log=n|size=num]\n\
-/* version */ [-V]\n\
- devicename\n\
-<devicename> is required unless -d name=xxx is given.\n\
-<num> is xxx (bytes), xxxs (sectors), xxxb (fs blocks), xxxk (xxx KiB),\n\
- xxxm (xxx MiB), xxxg (xxx GiB), xxxt (xxx TiB) or xxxp (xxx PiB).\n\
-<value> is xxx (512 byte blocks).\n"),
- progname);
- exit(1);
-}
--
2.13.3
next prev parent reply other threads:[~2017-08-29 23:51 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-29 23:50 [PATCH 00/42] mkfs: factor the crap out of the code Dave Chinner
2017-08-29 23:50 ` [PATCH 01/42] mkfs: can't specify sector size of internal log Dave Chinner
2017-08-29 23:50 ` [PATCH 02/42] mkfs: make subopt table const Dave Chinner
2017-08-29 23:50 ` [PATCH 03/42] mkfs: introduce a structure to hold CLI options Dave Chinner
2017-08-29 23:50 ` [PATCH 04/42] mkfs: add generic subopt parsing table Dave Chinner
2017-08-29 23:50 ` [PATCH 05/42] mkfs: factor block subopts parser Dave Chinner
2017-08-29 23:50 ` [PATCH 06/42] mkfs: factor data " Dave Chinner
2017-08-29 23:50 ` [PATCH 07/42] mkfs: factor inode " Dave Chinner
2017-08-29 23:50 ` [PATCH 08/42] mkfs: factor log " Dave Chinner
2017-08-29 23:50 ` [PATCH 09/42] mkfs: factor meta " Dave Chinner
2017-08-29 23:50 ` [PATCH 10/42] mkfs: factor naming " Dave Chinner
2017-08-29 23:50 ` [PATCH 11/42] mkfs: factor rt " Dave Chinner
2017-08-29 23:50 ` [PATCH 12/42] mkfs: factor sector " Dave Chinner
2017-08-29 23:50 ` [PATCH 13/42] mkfs: Introduce mkfs configuration structure Dave Chinner
2017-08-29 23:50 ` [PATCH 14/42] mkfs: factor printing of mkfs config Dave Chinner
2017-08-29 23:50 ` [PATCH 15/42] mkfs: factor in memory superblock setup Dave Chinner
2017-08-29 23:50 ` [PATCH 16/42] mkfs: factor out device preparation Dave Chinner
2017-08-29 23:50 ` [PATCH 17/42] mkfs: factor writing AG headers Dave Chinner
2017-08-29 23:50 ` [PATCH 18/42] mkfs: factor secondary superblock updates Dave Chinner
2017-08-29 23:50 ` [PATCH 19/42] mkfs: introduce default configuration structure Dave Chinner
2017-08-29 23:50 ` [PATCH 20/42] mkfs: rename top level CLI parameters Dave Chinner
2017-08-29 23:50 ` [PATCH 21/42] mkfs: factor sectorsize validation Dave Chinner
2017-08-29 23:50 ` [PATCH 22/42] mkfs: factor blocksize validation Dave Chinner
2017-08-29 23:50 ` [PATCH 23/42] mkfs: factor log sector size validation Dave Chinner
2017-08-29 23:50 ` [PATCH 24/42] mkfs: factor superblock feature validation Dave Chinner
2017-08-29 23:50 ` [PATCH 25/42] mkfs: factor directory blocksize validation Dave Chinner
2017-08-29 23:50 ` [PATCH 26/42] mkfs: factor inode size validation Dave Chinner
2017-08-29 23:50 ` [PATCH 27/42] mkfs: factor out device size calculations Dave Chinner
2017-08-29 23:50 ` [PATCH 28/42] mkfs: fix hidden parameter in DTOBT() Dave Chinner
2017-08-29 23:50 ` [PATCH 29/42] mkfs: factor rtdev extent size validation Dave Chinner
2017-08-29 23:50 ` [PATCH 30/42] mkfs: rework stripe calculations Dave Chinner
2017-08-29 23:50 ` [PATCH 31/42] mkfs: factor device opening Dave Chinner
2017-08-29 23:50 ` [PATCH 32/42] mkfs: factor data device validation Dave Chinner
2017-08-29 23:50 ` [PATCH 33/42] mkfs: factor log " Dave Chinner
2017-08-29 23:50 ` [PATCH 34/42] mkfs: factor rt " Dave Chinner
2017-08-29 23:50 ` [PATCH 35/42] mkfs: factor AG geometry calculations Dave Chinner
2017-08-29 23:50 ` [PATCH 36/42] mkfs: factor AG alignment Dave Chinner
2017-08-30 23:44 ` Dave Chinner
2017-08-29 23:50 ` [PATCH 37/42] mkfs: rework imaxpct calculation Dave Chinner
2017-08-29 23:50 ` [PATCH 38/42] mkfs: factor initial mount setup Dave Chinner
2017-08-29 23:50 ` [PATCH 39/42] mkfs: factor log size calculations Dave Chinner
2017-09-05 5:23 ` Dave Chinner
2017-08-29 23:50 ` [PATCH 40/42] mkfs: cleanup redundant temporary code Dave Chinner
2017-08-29 23:50 ` Dave Chinner [this message]
2017-08-29 23:50 ` [PATCH 42/42] mkfs: tidy up definitions Dave Chinner
2017-08-30 1:23 ` [PATCH 00/42] mkfs: factor the crap out of the code Darrick J. Wong
2017-08-30 1:57 ` Dave Chinner
2017-08-30 4:16 ` Luis R. Rodriguez
2017-08-30 5:44 ` Dave Chinner
2017-08-30 22:10 ` Luis R. Rodriguez
2017-08-30 23:22 ` Dave Chinner
2017-08-31 0:05 ` Luis R. Rodriguez
2017-08-31 16:23 ` Jan Tulak
2017-08-30 7:44 ` Martin Steigerwald
2017-09-04 12:31 ` Chandan Rajendra
2017-09-04 15:34 ` Eric Sandeen
2017-09-04 22:40 ` Dave Chinner
2017-09-07 10:31 ` Chandan Rajendra
2017-09-07 23:38 ` Dave Chinner
2017-09-09 10:24 ` Chandan Rajendra
2017-09-15 9:42 ` Jan Tulak
2017-09-16 11:29 ` Dave Chinner
2017-10-24 3:00 ` Eric Sandeen
2017-10-25 0:59 ` Dave Chinner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170829235052.21050-42-david@fromorbit.com \
--to=david@fromorbit.com \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).