From: Rodrigo Campos <rodrigo@sdfg.com.ar>
To: util-linux@vger.kernel.org
Cc: Rodrigo Campos <rodrigo@sdfg.com.ar>
Subject: [PATCH 2/3] fallocate: Hide #ifdef tricks to call fallocate in a function
Date: Sat, 25 Jan 2014 19:17:27 +0000 [thread overview]
Message-ID: <1390677448-7173-3-git-send-email-rodrigo@sdfg.com.ar> (raw)
In-Reply-To: <1390677448-7173-1-git-send-email-rodrigo@sdfg.com.ar>
Future patches will add more calls to fallocate(), so it will be useful to have
all these tricks inside a function.
The error message when fallocate is not supported is slightly changed: the file
name is not printed as a prefix because is not available in the context of the
function. Also, to only print one of the two possible errors (as happens when
using directly exit()), an else clause was added.
Signed-off-by: Rodrigo Campos <rodrigo@sdfg.com.ar>
---
sys-utils/fallocate.c | 43 ++++++++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 15 deletions(-)
diff --git a/sys-utils/fallocate.c b/sys-utils/fallocate.c
index 55e8411..5c66553 100644
--- a/sys-utils/fallocate.c
+++ b/sys-utils/fallocate.c
@@ -82,6 +82,30 @@ static loff_t cvtnum(char *s)
return x;
}
+static int xfallocate(int fd, int mode, off_t offset, off_t length)
+{
+ int error;
+
+#ifdef HAVE_FALLOCATE
+ error = fallocate(fd, mode, offset, length);
+#else
+ error = syscall(SYS_fallocate, fd, mode, offset, length);
+#endif
+ /*
+ * EOPNOTSUPP: The FALLOC_FL_KEEP_SIZE is unsupported
+ * ENOSYS: The filesystem does not support sys_fallocate
+ */
+ if (error < 0) {
+ if ((mode & FALLOC_FL_KEEP_SIZE) && errno == EOPNOTSUPP) {
+ fputs(_("keep size mode (-n option) unsupported\n"),
+ stderr);
+ } else {
+ fputs(_("fallocate failed\n"), stderr);
+ }
+ }
+ return error;
+}
+
int main(int argc, char **argv)
{
char *fname;
@@ -153,21 +177,10 @@ int main(int argc, char **argv)
if (fd < 0)
err(EXIT_FAILURE, _("cannot open %s"), fname);
-#ifdef HAVE_FALLOCATE
- error = fallocate(fd, mode, offset, length);
-#else
- error = syscall(SYS_fallocate, fd, mode, offset, length);
-#endif
- /*
- * EOPNOTSUPP: The FALLOC_FL_KEEP_SIZE is unsupported
- * ENOSYS: The filesystem does not support sys_fallocate
- */
- if (error < 0) {
- if ((mode & FALLOC_FL_KEEP_SIZE) && errno == EOPNOTSUPP)
- errx(EXIT_FAILURE,
- _("keep size mode (-n option) unsupported"));
- err(EXIT_FAILURE, _("%s: fallocate failed"), fname);
- }
+ error = xfallocate(fd, mode, offset, length);
+
+ if (error < 0)
+ exit(EXIT_FAILURE);
if (close_fd(fd) != 0)
err(EXIT_FAILURE, _("write failed: %s"), fname);
--
1.8.5.2
next prev parent reply other threads:[~2014-01-25 19:20 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-25 19:17 fallocate: Add "--dig-holes" options and minor fixes Rodrigo Campos
2014-01-25 19:17 ` [PATCH 1/3] fallocate: Clarify that space can also be deallocated Rodrigo Campos
2014-01-25 19:17 ` Rodrigo Campos [this message]
2014-01-25 19:17 ` [PATCH 3/3] fallocate: Add "--dig-holes" option Rodrigo Campos
2014-01-26 14:43 ` [PATCH v2] " Rodrigo Campos
2014-01-26 15:06 ` [PATCH v3] " Rodrigo Campos
2014-02-14 10:47 ` Karel Zak
2014-02-14 11:34 ` Karel Zak
2014-02-14 13:16 ` Rodrigo Campos
2014-02-14 13:07 ` Rodrigo Campos
2014-02-14 13:30 ` Karel Zak
2014-02-14 13:35 ` Rodrigo Campos
2014-02-17 10:32 ` Karel Zak
2014-02-17 14:15 ` Rodrigo Campos
2014-02-17 14:49 ` Karel Zak
2014-02-17 15:42 ` Rodrigo Campos
2014-01-25 19:23 ` fallocate: Add "--dig-holes" options and minor fixes Rodrigo Campos
[not found] ` <20140201040414.GA23360@sdfg.com.ar>
2014-02-11 11:31 ` Rodrigo Campos
2014-02-11 18:34 ` Karel Zak
2014-02-11 18:43 ` Rodrigo Campos
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=1390677448-7173-3-git-send-email-rodrigo@sdfg.com.ar \
--to=rodrigo@sdfg.com.ar \
--cc=util-linux@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