From: AKASHI Takahiro <takahiro.akashi@linaro.org>
To: Heinrich Schuchardt <xypron.glpk@gmx.de>
Cc: Simon Glass <sjg@chromium.org>,
U-Boot Mailing List <u-boot@lists.denx.de>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Daniel Schwierzeck <daniel.schwierzeck@gmail.com>,
Dennis Gilmore <dennis@ausil.us>,
Steffen Jaeckel <jaeckel-floss@eyet-services.de>,
Lukas Auer <lukas.auer@aisec.fraunhofer.de>,
Michal Simek <michal.simek@xilinx.com>,
Tom Rini <trini@konsulko.com>
Subject: Re: [PATCH v3 04/31] lib: Add a way to find the postiion of a trailing number
Date: Thu, 20 Jan 2022 12:16:05 +0900 [thread overview]
Message-ID: <20220120031605.GC42867@laputa> (raw)
In-Reply-To: <8d8796be-f5ad-15ed-4a03-97519f9c172c@gmx.de>
On Wed, Jan 19, 2022 at 12:27:09PM +0100, Heinrich Schuchardt wrote:
> On 1/19/22 02:42, Simon Glass wrote:
> > At present it is not possible to find out which part of the string is the
> > number part and which is before it. Add a new variant which provides this
> > feature, so we can separate the two in the caller.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > ---
> >
> > Changes in v3:
> > - Change the function to return a pointer to the first digit
> > - Add some tests, including one for 'abc123def456'
> >
> > include/vsprintf.h | 18 ++++++++++++++++++
> > lib/strto.c | 14 ++++++++++++--
> > test/str_ut.c | 13 ++++++++++++-
> > 3 files changed, 42 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/vsprintf.h b/include/vsprintf.h
> > index 01d2248e04d..ce7a7aaa1cc 100644
> > --- a/include/vsprintf.h
> > +++ b/include/vsprintf.h
> > @@ -118,6 +118,24 @@ long trailing_strtol(const char *str);
> > */
> > long trailing_strtoln(const char *str, const char *end);
> >
> > +/**
> > + * trailing_strtoln_end() - extract trailing integer from a fixed-length string
> > + *
> > + * Given a fixed-length string this finds a trailing number on the string
> > + * and returns it. For example, "abc123" would return 123. Only the
> > + * characters between @str and @end - 1 are examined. If @end is NULL, it is
> > + * set to str + strlen(str).
> > + *
> > + * @str: String to exxamine
> > + * @end: Pointer to end of string to examine, or NULL to use the
> > + * whole string
> > + * @endp: If non-NULL, this is set to point to the character where the
> > + * number starts, e.g. for "mmc0" this would be point to the '0'; if no
> > + * trailing number is found, it is set to the end of the string
> > + * @return training number if found, else -1
>
> Return:
>
> https://www.kernel.org/doc/html/latest/doc-guide/kernel-doc.html#function-documentation
One of other common mistakes(?) that I can see in the repository is
a violation of the rule below:
===8<===
Function parameters
~~~~~~~~~~~~~~~~~~~
Each function argument should be described in order, immediately following
^^^^^^^^^^^^^^^^^^^^^
the short function description. Do not leave a blank line between the
function description and the arguments, nor between the arguments.
===>8===
For instance, in this patch,
> > +/**
> > + * trailing_strtoln_end() - extract trailing integer from a fixed-length string
> > + *
> > + * Given a fixed-length string this finds a trailing number on the string
> > + * and returns it. For example, "abc123" would return 123. Only the
> > + * characters between @str and @end - 1 are examined. If @end is NULL, it is
> > + * set to str + strlen(str).
> > + *
> > + * @str: String to exxamine
(snip)
The structure of trailing_strtoln_end() looks like:
<short function description>
<blank line>
<long function description>
<blank line>
<function arguments>
Doesn't this matter so far in formatting Sphinx texts?
-Takahiro Akashi
> Best regards
>
> Heinrich
>
> > + */
> > +long trailing_strtoln_end(const char *str, const char *end, char const **endp);
> > +
> > /**
> > * panic() - Print a message and reset/hang
> > *
> > diff --git a/lib/strto.c b/lib/strto.c
> > index 58fc10ecaea..72cfef660fc 100644
> > --- a/lib/strto.c
> > +++ b/lib/strto.c
> > @@ -183,7 +183,7 @@ long long simple_strtoll(const char *cp, char **endp, unsigned int base)
> > return simple_strtoull(cp, endp, base);
> > }
> >
> > -long trailing_strtoln(const char *str, const char *end)
> > +long trailing_strtoln_end(const char *str, const char *end, char const **endp)
> > {
> > const char *p;
> >
> > @@ -192,14 +192,24 @@ long trailing_strtoln(const char *str, const char *end)
> > p = end - 1;
> > if (p > str && isdigit(*p)) {
> > do {
> > - if (!isdigit(p[-1]))
> > + if (!isdigit(p[-1])) {
> > + if (endp)
> > + *endp = p;
> > return dectoul(p, NULL);
> > + }
> > } while (--p > str);
> > }
> > + if (endp)
> > + *endp = end;
> >
> > return -1;
> > }
> >
> > +long trailing_strtoln(const char *str, const char *end)
> > +{
> > + return trailing_strtoln_end(str, end, NULL);
> > +}
> > +
> > long trailing_strtol(const char *str)
> > {
> > return trailing_strtoln(str, NULL);
> > diff --git a/test/str_ut.c b/test/str_ut.c
> > index 058b3594379..5a844347c2b 100644
> > --- a/test/str_ut.c
> > +++ b/test/str_ut.c
> > @@ -244,7 +244,9 @@ STR_TEST(str_xtoa, 0);
> >
> > static int str_trailing(struct unit_test_state *uts)
> > {
> > - char str1[] = "abc123def";
> > + const char str1[] = "abc123def";
> > + const char str2[] = "abc123def456";
> > + const char *end;
> >
> > ut_asserteq(-1, trailing_strtol(""));
> > ut_asserteq(-1, trailing_strtol("123"));
> > @@ -259,6 +261,15 @@ static int str_trailing(struct unit_test_state *uts)
> >
> > ut_asserteq(3, trailing_strtol("a3"));
> >
> > + ut_asserteq(123, trailing_strtoln_end(str1, str1 + 6, &end));
> > + ut_asserteq(3, end - str1);
> > +
> > + ut_asserteq(-1, trailing_strtoln_end(str1, str1 + 7, &end));
> > + ut_asserteq(7, end - str1);
> > +
> > + ut_asserteq(456, trailing_strtoln_end(str2, NULL, &end));
> > + ut_asserteq(9, end - str2);
> > +
> > return 0;
> > }
> > STR_TEST(str_trailing, 0);
>
next prev parent reply other threads:[~2022-01-20 3:16 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-19 1:42 [PATCH v3 00/31] Initial implementation of standard boot Simon Glass
2022-01-19 1:42 ` [PATCH v3 01/31] str: Move string tests to the string module Simon Glass
2022-01-19 11:15 ` Heinrich Schuchardt
2022-03-06 3:08 ` Simon Glass
2022-01-19 1:42 ` [PATCH v3 02/31] test: Add tests for trailing_strtol() Simon Glass
2022-01-19 11:26 ` Heinrich Schuchardt
2022-01-19 1:42 ` [PATCH v3 03/31] str: Fix a few bugs in trailing_strtoln() Simon Glass
2022-01-31 9:44 ` Rasmus Villemoes
2022-01-31 16:13 ` Simon Glass
2022-01-19 1:42 ` [PATCH v3 04/31] lib: Add a way to find the postiion of a trailing number Simon Glass
2022-01-19 11:27 ` Heinrich Schuchardt
2022-01-19 14:37 ` Simon Glass
2022-01-19 15:11 ` Tom Rini
2022-01-19 17:23 ` Heinrich Schuchardt
2022-01-20 3:16 ` AKASHI Takahiro [this message]
2022-03-06 3:08 ` Simon Glass
2022-01-19 1:42 ` [PATCH v3 05/31] dm: core: Rename uclass_get_by_name_len() Simon Glass
2022-01-19 11:28 ` Heinrich Schuchardt
2022-01-19 1:42 ` [PATCH v3 06/31] dm: core: Allow finding a uclass device by partial name Simon Glass
2022-01-19 11:28 ` Heinrich Schuchardt
2022-01-19 1:42 ` [PATCH v3 07/31] test: fastboot: Avoid using mmc1 Simon Glass
2022-01-19 1:42 ` [PATCH v3 08/31] test: dm: Restart USB before assuming it is stopped Simon Glass
2022-01-19 1:42 ` [PATCH v3 09/31] dm: blk: Add a function to return the device type Simon Glass
2022-01-19 11:30 ` Heinrich Schuchardt
2022-01-19 1:42 ` [PATCH v3 10/31] bootstd: Add the concept of a bootflow Simon Glass
2022-01-19 1:42 ` [PATCH v3 11/31] bootstd: Add the bootstd uclass and core implementation Simon Glass
2022-01-19 1:42 ` [PATCH v3 12/31] bootstd: Add the bootdev uclass Simon Glass
2022-01-19 1:42 ` [PATCH v3 13/31] bootstd: Add the bootmeth uclass and helpers Simon Glass
2022-01-19 1:42 ` [PATCH v3 14/31] bootstd: Add support for bootflows Simon Glass
2022-01-19 1:42 ` [PATCH v3 15/31] bootstd: Add a bootdev command Simon Glass
2022-01-19 1:43 ` [PATCH v3 16/31] bootstd: Add a bootflow command Simon Glass
2022-01-19 1:43 ` [PATCH v3 17/31] bootstd: Add a bootmeth command Simon Glass
2022-01-19 1:43 ` [PATCH v3 18/31] bootstd: Add an implementation of distro boot Simon Glass
2022-01-19 1:43 ` [PATCH v3 19/31] bootstd: mmc: Add a bootdev driver Simon Glass
2022-01-19 1:43 ` [PATCH v3 20/31] bootstd: ethernet: " Simon Glass
2022-01-19 1:43 ` [PATCH v3 21/31] bootstd: Add an implementation of distro PXE boot Simon Glass
2022-01-19 1:43 ` [PATCH v3 22/31] bootstd: Add an implementation of EFI boot Simon Glass
2022-01-19 8:08 ` Michael Walle
2022-01-19 11:45 ` Heinrich Schuchardt
2022-03-06 3:08 ` Simon Glass
2022-03-07 9:03 ` Michael Walle
2022-01-19 1:43 ` [PATCH v3 23/31] bootstd: Add a system bootdev for strange boot methods Simon Glass
2022-01-19 1:43 ` [PATCH v3 24/31] bootstd: Add an implementation of EFI bootmgr Simon Glass
2022-01-19 11:47 ` Heinrich Schuchardt
2022-03-06 3:08 ` Simon Glass
2022-03-12 9:36 ` Ilias Apalodimas
2022-03-12 17:58 ` Simon Glass
2022-01-19 1:43 ` [PATCH v3 25/31] bootstd: Add a sandbox bootmeth driver Simon Glass
2022-01-19 1:43 ` [PATCH v3 26/31] bootstd: Add an implementation of script boot Simon Glass
2022-01-19 1:43 ` [PATCH v3 27/31] bootstd: usb: Add a bootdev driver Simon Glass
2022-01-19 1:43 ` [PATCH v3 28/31] bootstd: Add tests for bootstd including all uclasses Simon Glass
2022-01-19 1:43 ` [PATCH v3 29/31] bootstd: Add setup for the bootflow tests Simon Glass
2022-01-19 1:43 ` [PATCH v3 30/31] bootstd: doc: Add documentation Simon Glass
2022-01-19 11:39 ` Heinrich Schuchardt
2022-01-21 15:08 ` Tom Rini
2022-01-21 15:20 ` Simon Glass
2022-01-21 15:31 ` Tom Rini
2022-01-21 16:02 ` Simon Glass
2022-01-21 18:09 ` Tom Rini
2022-01-21 19:14 ` Simon Glass
2022-01-21 19:23 ` Tom Rini
2022-01-21 21:15 ` Simon Glass
2022-01-21 21:46 ` Tom Rini
2022-01-21 22:18 ` Simon Glass
2022-01-30 0:48 ` Ilias Apalodimas
2022-01-21 16:03 ` Mark Kettenis
2022-01-21 16:53 ` Simon Glass
2022-01-21 18:22 ` Mark Kettenis
2022-01-21 18:41 ` Tom Rini
2022-01-21 19:17 ` Simon Glass
2022-01-21 22:05 ` Heinrich Schuchardt
2022-01-21 22:13 ` Simon Glass
2022-01-22 11:44 ` Mark Kettenis
2022-01-19 1:43 ` [PATCH v3 31/31] RFC: Switch rpi over to use bootstd Simon Glass
2022-01-19 14:04 ` Tom Rini
2022-01-19 14:37 ` Simon Glass
2022-01-19 15:01 ` Tom Rini
2022-01-19 16:09 ` Simon Glass
2022-01-19 16:21 ` Tom Rini
2022-01-19 16:38 ` Mark Kettenis
2022-01-19 23:26 ` Simon Glass
2022-01-20 8:35 ` Michael Walle
2022-01-20 10:28 ` Mark Kettenis
2022-01-20 18:16 ` Simon Glass
2022-01-20 18:30 ` Tom Rini
2022-01-20 18:56 ` Mark Kettenis
2022-01-20 19:56 ` Simon Glass
2022-01-20 19:56 ` Simon Glass
2022-01-20 20:08 ` Tom Rini
2022-01-20 20:47 ` Simon Glass
2022-01-20 23:23 ` Tom Rini
2022-01-21 0:59 ` Simon Glass
2022-01-21 1:08 ` Tom Rini
2022-01-21 3:12 ` Simon Glass
2022-01-21 9:36 ` Mark Kettenis
2022-01-21 15:25 ` Simon Glass
2022-01-21 15:05 ` Tom Rini
2022-01-21 15:23 ` Simon Glass
2022-01-19 23:23 ` Simon Glass
2022-01-19 8:09 ` [PATCH v3 00/31] Initial implementation of standard boot Michael Walle
2022-01-19 14:56 ` Simon Glass
2022-01-20 8:38 ` Michael Walle
2022-01-20 18:16 ` Simon Glass
2022-03-06 3:08 ` Simon Glass
2022-03-06 11:03 ` Michael Walle
2022-03-06 13:24 ` Simon Glass
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=20220120031605.GC42867@laputa \
--to=takahiro.akashi@linaro.org \
--cc=daniel.schwierzeck@gmail.com \
--cc=dennis@ausil.us \
--cc=ilias.apalodimas@linaro.org \
--cc=jaeckel-floss@eyet-services.de \
--cc=lukas.auer@aisec.fraunhofer.de \
--cc=michal.simek@xilinx.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/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.