All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masahiro Yamada <yamada.masahiro@socionext.com>
To: "Leonardo Brás" <leobras.c@gmail.com>
Cc: lkcamp@lists.libreplanetbr.org, Borislav Petkov <bp@alien8.de>,
	David.Laight@aculab.com, Andy Lutomirski <luto@kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	helen@koikeco.de, Michal Marek <michal.lkml@markovi.net>,
	Linux Kbuild mailing list <linux-kbuild@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 3/5] Creates macro to avoid variable shadowing
Date: Mon, 29 Oct 2018 01:37:44 +0900	[thread overview]
Message-ID: <CAK7LNAT4uJiR8Nm1agBQwjGFDY81_7O0o6fxuqh=55WizwvhYQ@mail.gmail.com> (raw)
In-Reply-To: <20181023011042.GA6582@WindFlash>

On Tue, Oct 23, 2018 at 10:11 AM Leonardo Brás <leobras.c@gmail.com> wrote:
>
> Creates DEF_FIELD_ADDR_VAR as a more generic version of the DEF_FIELD_ADD
> macro, allowing usage of a variable name other than the struct element name.
> Also, sets DEF_FIELD_ADDR as a specific usage of DEF_FILD_ADDR_VAR in which
> the var name is the same as the struct element name.
>
> Signed-off-by: Leonardo Brás <leobras.c@gmail.com>
> ---


Applied to linux-kbuild.



>  scripts/mod/file2alias.c | 24 +++++++++++++++++-------
>  1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
> index 7be43697ff84..3015c0bdecb2 100644
> --- a/scripts/mod/file2alias.c
> +++ b/scripts/mod/file2alias.c
> @@ -95,12 +95,20 @@ extern struct devtable *__start___devtable[], *__stop___devtable[];
>   */
>  #define DEF_FIELD(m, devid, f) \
>         typeof(((struct devid *)0)->f) f = TO_NATIVE(*(typeof(f) *)((m) + OFF_##devid##_##f))
> +
> +/* Define a variable v that holds the address of field f of struct devid
> + * based at address m.  Due to the way typeof works, for a field of type
> + * T[N] the variable has type T(*)[N], _not_ T*.
> + */
> +#define DEF_FIELD_ADDR_VAR(m, devid, f, v) \
> +       typeof(((struct devid *)0)->f) *v = ((m) + OFF_##devid##_##f)
> +
>  /* Define a variable f that holds the address of field f of struct devid
>   * based at address m.  Due to the way typeof works, for a field of type
>   * T[N] the variable has type T(*)[N], _not_ T*.
>   */
>  #define DEF_FIELD_ADDR(m, devid, f) \
> -       typeof(((struct devid *)0)->f) *f = ((m) + OFF_##devid##_##f)
> +       DEF_FIELD_ADDR_VAR(m, devid, f, f)
>
>  /* Add a table entry.  We test function type matches while we're here. */
>  #define ADD_TO_DEVTABLE(device_id, type, function) \
> @@ -641,25 +649,27 @@ static void do_pnp_card_entries(void *symval, unsigned long size,
>         unsigned int i;
>
>         device_id_check(mod->name, "pnp", size, id_size, symval);
> +       DEF_FIELD_ADDR(symval, pnp_card_device_id, devs);
> +       typeof(devs) devs_last;
>
>         for (i = 0; i < count; i++) {
>                 unsigned int j;
> -               DEF_FIELD_ADDR(symval + i*id_size, pnp_card_device_id, devs);
> +               devs_last = devs + i * id_size;
>
>                 for (j = 0; j < PNP_MAX_DEVICES; j++) {
> -                       const char *id = (char *)(*devs)[j].id;
> -                       int i2, j2;
> +                       const char *id = (char *)(*devs_last)[j].id;
> +                       int j2;
>                         int dup = 0;
>
>                         if (!id[0])
>                                 break;
>
>                         /* find duplicate, already added value */
> -                       for (i2 = 0; i2 < i && !dup; i2++) {
> -                               DEF_FIELD_ADDR(symval + i2*id_size, pnp_card_device_id, devs);
> +                       while ((devs_last -= id_size) >= devs && !dup) {
>
>                                 for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) {
> -                                       const char *id2 = (char *)(*devs)[j2].id;
> +                                       const char *id2 =
> +                                               (char *)(*devs_last)[j2].id;
>
>                                         if (!id2[0])
>                                                 break;
> --
> 2.19.1
>


-- 
Best Regards
Masahiro Yamada

  parent reply	other threads:[~2018-10-28 16:38 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-23  1:10 [PATCH v2 3/5] Creates macro to avoid variable shadowing Leonardo Brás
2018-10-23 21:14 ` Helen Koike
2018-10-23 21:35 ` Helen Koike
2018-10-24  1:48   ` Leonardo Bras
2018-10-28 16:37 ` Masahiro Yamada [this message]
2018-10-30  0:32   ` Leonardo Bras

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='CAK7LNAT4uJiR8Nm1agBQwjGFDY81_7O0o6fxuqh=55WizwvhYQ@mail.gmail.com' \
    --to=yamada.masahiro@socionext.com \
    --cc=David.Laight@aculab.com \
    --cc=bp@alien8.de \
    --cc=helen@koikeco.de \
    --cc=leobras.c@gmail.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkcamp@lists.libreplanetbr.org \
    --cc=luto@kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=mingo@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.