From: David Laight <David.Laight@ACULAB.COM>
To: 'Masahiro Yamada' <masahiroy@kernel.org>,
"linux-kbuild@vger.kernel.org" <linux-kbuild@vger.kernel.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"Michal Marek" <michal.lkml@markovi.net>,
Nick Desaulniers <ndesaulniers@google.com>
Subject: RE: [PATCH] fixdep: use fflush() and ferror() to ensure successful write to files
Date: Mon, 21 Feb 2022 22:33:19 +0000 [thread overview]
Message-ID: <04d06889d8ea41589628995a6cb53874@AcuMS.aculab.com> (raw)
In-Reply-To: <20220221164316.113489-1-masahiroy@kernel.org>
From: Masahiro Yamada
> Sent: 21 February 2022 16:43
> To: linux-kbuild@vger.kernel.org
>
> Checking the return value of (v)printf does not ensure the successful
> write to the .cmd file.
>
> Call fflush() and ferror() to make sure that everything has been
> written to the file.
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Reviewed-by: David Laight <dvid.laight@aculab.com>
I'll note that you've lost the perror("fixdep").
But I suspect that isn't very meaningful.
If the disk is full it'd probably get lost anyway.
> ---
>
> scripts/basic/fixdep.c | 44 ++++++++++++++++--------------------------
> 1 file changed, 17 insertions(+), 27 deletions(-)
>
> diff --git a/scripts/basic/fixdep.c b/scripts/basic/fixdep.c
> index 44e887cff49b..fad6f29373a9 100644
> --- a/scripts/basic/fixdep.c
> +++ b/scripts/basic/fixdep.c
> @@ -105,25 +105,6 @@ static void usage(void)
> exit(1);
> }
>
> -/*
> - * In the intended usage of this program, the stdout is redirected to .*.cmd
> - * files. The return value of printf() must be checked to catch any error,
> - * e.g. "No space left on device".
> - */
> -static void xprintf(const char *format, ...)
> -{
> - va_list ap;
> - int ret;
> -
> - va_start(ap, format);
> - ret = vprintf(format, ap);
> - if (ret < 0) {
> - perror("fixdep");
> - exit(1);
> - }
> - va_end(ap);
> -}
> -
> struct item {
> struct item *next;
> unsigned int len;
> @@ -189,7 +170,7 @@ static void use_config(const char *m, int slen)
>
> define_config(m, slen, hash);
> /* Print out a dependency path from a symbol name. */
> - xprintf(" $(wildcard include/config/%.*s) \\\n", slen, m);
> + printf(" $(wildcard include/config/%.*s) \\\n", slen, m);
> }
>
> /* test if s ends in sub */
> @@ -318,13 +299,13 @@ static void parse_dep_file(char *m, const char *target)
> */
> if (!saw_any_target) {
> saw_any_target = 1;
> - xprintf("source_%s := %s\n\n",
> - target, m);
> - xprintf("deps_%s := \\\n", target);
> + printf("source_%s := %s\n\n",
> + target, m);
> + printf("deps_%s := \\\n", target);
> }
> is_first_dep = 0;
> } else {
> - xprintf(" %s \\\n", m);
> + printf(" %s \\\n", m);
> }
>
> buf = read_file(m);
> @@ -347,8 +328,8 @@ static void parse_dep_file(char *m, const char *target)
> exit(1);
> }
>
> - xprintf("\n%s: $(deps_%s)\n\n", target, target);
> - xprintf("$(deps_%s):\n", target);
> + printf("\n%s: $(deps_%s)\n\n", target, target);
> + printf("$(deps_%s):\n", target);
> }
>
> int main(int argc, char *argv[])
> @@ -363,11 +344,20 @@ int main(int argc, char *argv[])
> target = argv[2];
> cmdline = argv[3];
>
> - xprintf("cmd_%s := %s\n\n", target, cmdline);
> + printf("cmd_%s := %s\n\n", target, cmdline);
>
> buf = read_file(depfile);
> parse_dep_file(buf, target);
> free(buf);
>
> + fflush(stdout);
> +
> + /*
> + * In the intended usage, the stdout is redirected to .*.cmd files.
> + * Call ferror() to catch errors such as "No space left on device".
> + */
> + if (ferror(stdout))
> + exit(1);
> +
> return 0;
> }
> --
> 2.32.0
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
next prev parent reply other threads:[~2022-02-21 22:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-21 16:43 Masahiro Yamada
2022-02-21 22:33 ` David Laight [this message]
2022-02-22 3:44 ` Masahiro Yamada
2022-02-22 9:09 ` David Laight
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=04d06889d8ea41589628995a6cb53874@AcuMS.aculab.com \
--to=david.laight@aculab.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masahiroy@kernel.org \
--cc=michal.lkml@markovi.net \
--cc=ndesaulniers@google.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
all inboxes | Powered by JetHome®