On Thu, Jun 27, 2024 at 4:31 PM <devel-requ...@lists.crash-utility.osci.io>
wrote:

> Date: Thu, 27 Jun 2024 11:18:29 +0800
> From: Li Zhijian <lizhij...@fujitsu.com>
> Subject: [Crash-utility] [PATCH] list: fatal if -r isn't used in
>         conjunction with -H or -h
> To: devel@lists.crash-utility.osci.io
> Cc: Li Zhijian <lizhij...@fujitsu.com>
> Message-ID: <20240627031829.235256-1-lizhij...@fujitsu.com>
>
> Per the code, -r(LIST_HEAD_REVERSE) only work with LIST_HEAD_FORMAT
> which is set by -H or -h.
>
> Previously, if LIST_HEAD_FORMAT was not set, `list -r` will traverse the
> list in order, that doesn't obey the -r(reverse) semantics.
>
>
According to the above descriptions, I guess that it should be:

diff --git a/tools.c b/tools.c
index 0f2db108838a..1022d579071a 100644
--- a/tools.c
+++ b/tools.c
@@ -3370,6 +3370,7 @@ cmd_list(void)
                        break;

                case 'r':
+                       ld->flags |= LIST_HEAD_FORMAT;
                         ld->flags |= LIST_HEAD_REVERSE;
                        break;

 Also let's see the following code:

        if (ld->flags & LIST_HEAD_FORMAT) {
                ld->list_head_offset = ld->member_offset;
                if (ld->flags & LIST_HEAD_REVERSE)
                        ld->member_offset = sizeof(void *);
                else
                        ld->member_offset = 0;

Furthermore, the help page is:
SYNOPSIS
  list [[-o] offset][-e end][-[s|S] struct[.member[,member] [-l offset]]
-[x|d]]
       [-r|-B] [-h [-O head_offset]|-H] start

The '-r' looks like an optional option, just like '-h' and '-H'.

Can you help double check?

Thanks
Lianbo


> Add a further check to ensure -r is used in conjunction with -H or -h.
>
> Signed-off-by: Li Zhijian <lizhij...@fujitsu.com>
> ---
>  help.c  | 3 ++-
>  tools.c | 3 +++
>  2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/help.c b/help.c
> index d80e843703c1..6f7e093cbef1 100644
> --- a/help.c
> +++ b/help.c
> @@ -5977,7 +5977,8 @@ char *help__list[] = {
>  " ",
>  "           -x  Override the default output format with hexadecimal
> format.",
>  "           -d  Override the default output format with decimal format.",
> -"           -r  For a list linked with list_head structures, traverse the
> list",
> +"           -r  Must be used in conjunction with either -H or -h.",
> +"               For a list linked with list_head structures, traverse the
> list",
>  "               in the reverse order by using the \"prev\" pointer
> instead",
>  "               of \"next\".",
>  "           -B  Use the algorithm from R. P. Brent to detect loops
> instead of",
> diff --git a/tools.c b/tools.c
> index 0f2db108838a..67977605c276 100644
> --- a/tools.c
> +++ b/tools.c
> @@ -3451,6 +3451,9 @@ cmd_list(void)
>                 }
>         }
>
> +       if (ld->flags & LIST_HEAD_REVERSE && !(ld->flags &
> LIST_HEAD_FORMAT))
> +               error(FATAL, "-r must be used in conjunction with -H or
> -h\n");
> +
>         if (argerrs)
>                 cmd_usage(pc->curcmd, SYNOPSIS);
>
> --
> 2.29.2
>
--
Crash-utility mailing list -- devel@lists.crash-utility.osci.io
To unsubscribe send an email to devel-le...@lists.crash-utility.osci.io
https://${domain_name}/admin/lists/devel.lists.crash-utility.osci.io/
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to