Re: [PATCH] kconfig: fix warnings in fgets/fwrite usage

Américo Wang
2010-08-17T05:42:26Z

On Thu, Aug 12, 2010 at 01:56:19AM -0400, Mike Frysinger wrote:
>Add some helper functions that abort on failure, and change the fwrite
>and fget calls to use those. This should kill off all the ugly gcc
>warnings that some distros emit about ignoring return values due to
>usage of warn_unused_result attributes.
>
>Signed-off-by: Mike Frysinger <vapier@gentoo.org>

Looks good to me,

Acked-by: WANG Cong <xiyou.wangcong@gmail.com>

>---
> scripts/kconfig/conf.c | 4 ++--
> scripts/kconfig/confdata.c | 2 +-
> scripts/kconfig/expr.c | 2 +-
> scripts/kconfig/lkc.h | 24 ++++++++++++++++++++++++
> 4 files changed, 28 insertions(+), 4 deletions(-)
>
>diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
>index 274f271..b382a39 100644
>--- a/scripts/kconfig/conf.c
>+++ b/scripts/kconfig/conf.c
>@@ -108,7 +108,7 @@ static int conf_askvalue(struct symbol *sym, const char *def)
> check_stdin();
> case oldaskconfig:
> fflush(stdout);
>- fgets(line, 128, stdin);
>+ xfgets(line, 128, stdin);
> return 1;
> default:
> break;
>@@ -306,7 +306,7 @@ static int conf_choice(struct menu *menu)
> check_stdin();
> case oldaskconfig:
> fflush(stdout);
>- fgets(line, 128, stdin);
>+ xfgets(line, 128, stdin);
> strip(line);
> if (line[0] == '?') {
> print_help(menu);
>diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
>index f81f263..7d9f271 100644
>--- a/scripts/kconfig/confdata.c
>+++ b/scripts/kconfig/confdata.c
>@@ -412,7 +412,7 @@ static void conf_write_string(bool headerfile, const char *name,
> while (1) {
> l = strcspn(str, "\"\\");
> if (l) {
>- fwrite(str, l, 1, out);
>+ xfwrite(str, l, 1, out);
> str += l;
> }
> if (!*str)
>diff --git a/scripts/kconfig/expr.c b/scripts/kconfig/expr.c
>index 8f18e37..330e7c0 100644
>--- a/scripts/kconfig/expr.c
>+++ b/scripts/kconfig/expr.c
>@@ -1087,7 +1087,7 @@ void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *
>
> static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
> {
>- fwrite(str, strlen(str), 1, data);
>+ xfwrite(str, strlen(str), 1, data);
> }
>
> void expr_fprint(struct expr *e, FILE *out)
>diff --git a/scripts/kconfig/lkc.h b/scripts/kconfig/lkc.h
>index 76db065..a3bd66a 100644
>--- a/scripts/kconfig/lkc.h
>+++ b/scripts/kconfig/lkc.h
>@@ -169,6 +169,30 @@ static inline bool sym_has_value(struct symbol *sym)
> return sym->flags & SYMBOL_DEF_USER ? true : false;
> }
>
>+#define internal_error(fmt, args...) \
>+do { \
>+ fprintf(stderr, "%s:%s:%i: %s: " fmt "\n", __FILE__, \
>+ __func__, __LINE__, _("internal error"), ## args); \
>+ exit(1); \
>+} while (0)
>+
>+#define xfwrite(ptr, size, nmemb, stream) \
>+({ \
>+ size_t _nmemb = (nmemb); \
>+ size_t ret = fwrite(ptr, size, _nmemb, stream); \
>+ if (ret != _nmemb) \
>+ internal_error("%s", _("fwrite() came up short")); \
>+ ret; \
>+})
>+
>+#define xfgets(s, size, stream) \
>+({ \
>+ char *ret = fgets(s, size, stream); \
>+ if (ret == NULL) \
>+ internal_error("%s", _("fgets() came up short")); \
>+ ret; \
>+})
>+
> #ifdef __cplusplus
> }
> #endif
>--
>1.7.2
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>Please read the FAQ at http://www.tux.org/lkml/