From: Eric Sandeen <sandeen@sandeen.net>
To: Eric Sandeen <sandeen@redhat.com>, linux-xfs <linux-xfs@vger.kernel.org>
Subject: [PATCH 3/5] xfs_io: move inode command arg handling to top
Date: Fri, 30 Sep 2016 15:54:21 -0500 [thread overview]
Message-ID: <796ceb5c-bd7c-61b3-2c1c-031b2a41db34@sandeen.net> (raw)
In-Reply-To: <9f126dc7-3b1e-a1ed-7f23-48410a76adc2@redhat.com>
As it stands, collecting the inode number and testing args
validity is all tangled up; for example the test for
"-n" having no inode is buried in an else after a large
code block which handles something else.
Get inode number argument collection and testing out of the
way before doing anything else.
Clean up the error message if a non-numeric inode arg is given.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
io/open.c | 40 +++++++++++++++++++++-------------------
1 files changed, 21 insertions(+), 19 deletions(-)
diff --git a/io/open.c b/io/open.c
index c8c82b7..ba8b243 100644
--- a/io/open.c
+++ b/io/open.c
@@ -813,7 +813,7 @@ inode_f(
{
__s32 count = 0;
__u64 lastino = 0;
- __u64 userino = 0;
+ __u64 userino = NULLFSINO;
char *p;
int c;
int verbose = 0;
@@ -835,27 +835,32 @@ inode_f(
}
}
- /*
- * Inode number can be passed with or without extra arguments, so we
- * should handle inode numbers passed by user out of getopt()
- */
+ /* Last arg (if present) should be an inode number */
if (optind < argc) {
-
- if (ret_next) {
- cmd = XFS_IOC_FSBULKSTAT;
- } else {
- if ((argc > 2) && !verbose)
- return command_usage(&inode_cmd);
- else
- cmd = XFS_IOC_FSBULKSTAT_SINGLE;
- }
-
userino = strtoull(argv[optind], &p, 10);
if ((*p != '\0')) {
- printf(_("[num] must be a numeric value\n"));
+ printf(_("%s is not a numeric inode value\n"),
+ argv[optind]);
exitcode = 1;
return 0;
}
+ optind++;
+ }
+
+ /* Extra junk? */
+ if (optind < argc)
+ return command_usage(&inode_cmd);
+
+ /* -n option requires an inode number */
+ if (ret_next && userino == NULLFSINO)
+ return command_usage(&inode_cmd);
+
+ if (userino != NULLFSINO) {
+
+ if (ret_next) /* get next inode */
+ cmd = XFS_IOC_FSBULKSTAT;
+ else /* get this inode */
+ cmd = XFS_IOC_FSBULKSTAT_SINGLE;
bulkreq.lastip = &userino;
bulkreq.icount = 1;
@@ -885,9 +890,6 @@ inode_f(
printf("%llu\n", userino);
return 0;
- /* -n option must not be used stand alone */
- } else if (ret_next) {
- return command_usage(&inode_cmd);
}
/* We are finding last inode in use */
--
1.7.1
next prev parent reply other threads:[~2016-09-30 20:54 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-30 20:50 [PATCH 0/5] xfs_io: address various "inode" command issues Eric Sandeen
2016-09-30 20:52 ` [PATCH 1/5] xfs_io: fix inode command help and argsmax Eric Sandeen
2016-09-30 20:53 ` [PATCH 2/5] xfs_io: factor out new get_last_inode() helper Eric Sandeen
2016-09-30 20:54 ` Eric Sandeen [this message]
2016-09-30 20:56 ` [PATCH 4/5] xfs_io: refactor inode command Eric Sandeen
2016-09-30 20:57 ` [PATCH 5/5] xfs_io: fix inode command with "-n" for bogus inode Eric Sandeen
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=796ceb5c-bd7c-61b3-2c1c-031b2a41db34@sandeen.net \
--to=sandeen@sandeen.net \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.com \
/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).