2016-03-16 10:53:47

by Paul Bolle

[permalink] [raw]
Subject: [PATCH 1/2] kconfig: add chomp like helper function

Add a helper function that strips trailing new lines and carriage
returns from strings. Call it chomp, after the perl function that
inspired it.

Signed-off-by: Paul Bolle <[email protected]>
---
scripts/kconfig/confdata.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 0b7dc2fd7bac..51904c423411 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -248,6 +248,28 @@ e_out:
return -1;
}

+/*
+ * Return newly allocated copy of string "in" with all trailing new lines and
+ * carriage returns removed.
+ */
+static char *chomp(char *in)
+{
+ size_t last = strlen(in);
+ char *copy;
+
+ copy = malloc(last + 1);
+ if (!copy)
+ return NULL;
+
+ strcpy(copy, in);
+ if (last)
+ last--;
+ while (last && (copy[last] == '\r' || copy[last] == '\n'))
+ copy[last--] = '\0';
+
+ return copy;
+}
+
int conf_read_simple(const char *name, int def)
{
FILE *in = NULL;
--
2.4.3


2016-03-16 10:53:46

by Paul Bolle

[permalink] [raw]
Subject: [PATCH 2/2] kconfig: add unexpected data itself to warning

If the .config parser runs into unexpected data it emits a warnings like
.config:6911:warning: unexpected data

Add the unexpected data itself to the warning too, to make it easier to
discover what is going wrong:
.config:6911:warning: unexpected data: CONFOG_CHARGER_TPS65217=m

Signed-off-by: Paul Bolle <[email protected]>
---
scripts/kconfig/confdata.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
index 51904c423411..62df2594bc24 100644
--- a/scripts/kconfig/confdata.c
+++ b/scripts/kconfig/confdata.c
@@ -398,8 +398,12 @@ load:
if (conf_set_sym_val(sym, def, def_flags, p))
continue;
} else {
- if (line[0] != '\r' && line[0] != '\n')
- conf_warning("unexpected data");
+ if (line[0] != '\r' && line[0] != '\n') {
+ char *tmp = chomp(line);
+
+ conf_warning("unexpected data: %s", tmp);
+ free(tmp);
+ }
continue;
}
setsym:
--
2.4.3

2016-03-16 11:42:33

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH 1/2] kconfig: add chomp like helper function

On 2016-03-16 11:53, Paul Bolle wrote:
> Add a helper function that strips trailing new lines and carriage
> returns from strings. Call it chomp, after the perl function that
> inspired it.
>
> Signed-off-by: Paul Bolle <[email protected]>
> ---
> scripts/kconfig/confdata.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
> index 0b7dc2fd7bac..51904c423411 100644
> --- a/scripts/kconfig/confdata.c
> +++ b/scripts/kconfig/confdata.c
> @@ -248,6 +248,28 @@ e_out:
> return -1;
> }
>
> +/*
> + * Return newly allocated copy of string "in" with all trailing new lines and
> + * carriage returns removed.
> + */
> +static char *chomp(char *in)
> +{
> + size_t last = strlen(in);
> + char *copy;
> +
> + copy = malloc(last + 1);
> + if (!copy)
> + return NULL;
> +
> + strcpy(copy, in);
> + if (last)
> + last--;
> + while (last && (copy[last] == '\r' || copy[last] == '\n'))
> + copy[last--] = '\0';
> +
> + return copy;
> +}
> +

For this particular use, it's probably easier to just write

conf_warning("unexpected data: %.*s",
(int)strcspn(line, "\r\n"), line);

Or do you see more use cases for the chomp function?

No matter how the string is constructed, I like the verbose warning :)

Thanks,
Michal

2016-03-16 12:42:05

by Paul Bolle

[permalink] [raw]
Subject: Re: [PATCH 1/2] kconfig: add chomp like helper function

On wo, 2016-03-16 at 12:42 +0100, Michal Marek wrote:
> For this particular use, it's probably easier to just write
>
> conf_warning("unexpected data: %.*s",
> (int)strcspn(line, "\r\n"), line);

OK. (Next time I'll try listen to the voice in my head whispering:
"There must be an easier way to do this.".)

> Or do you see more use cases for the chomp function?

No.

> No matter how the string is constructed, I like the verbose warning :)

I'll respin and resend (in a few hours).

Thanks,


Paul Bolle