public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Max Staudt <max@enpas.org>
To: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: Vincent Mailhol <vincent.mailhol@gmail.com>,
	Wolfgang Grandegger <wg@grandegger.com>,
	linux-can@vger.kernel.org, Oliver Neukum <oneukum@suse.com>,
	linux-kernel@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jslaby@suse.com>
Subject: Re: [PATCH v3] can, tty: elmcan CAN/ldisc driver for ELM327 based OBD-II adapters
Date: Thu, 17 Mar 2022 22:05:28 +0100	[thread overview]
Message-ID: <20220317220528.4cd8efaa.max@enpas.org> (raw)
In-Reply-To: <20220315102135.evgt4es7yb23sabb@pengutronix.de>

On Tue, 15 Mar 2022 11:21:35 +0100
Marc Kleine-Budde <mkl@pengutronix.de> wrote:

> On 12.03.2022 22:21:42, Max Staudt wrote:
> > @Vincent - two more things have remained, and I hope it's okay once
> > I explain them:
> > 
> > 1. _memstrcmp() - memcmp() vs. str(n)cmp()
> > 
> > The _memstrcmp() function does not compare strings, it compares raw
> > buffers. I am just using C strings for the fixed buffers to compare
> > against, as that allows for shorter and easier to read code. The NUL
> > byte at the end of those strings goes unused.
> > 
> > Also, I have not looked at the assembly produced, since the
> > semantics are different: str(n)cmp() needs to look for NUL bytes in
> > the buffer(s), which is unnecessary here. As a bonus, NUL will
> > never even occur because my code filters those bytes out upon
> > reception from the UART (it's a documented quirk of the ELM327).
> > 
> > Finally, even if I were to use strcmp(), the code would still look
> > just as ugly. Except the machine would also look for NUL bytes, and
> > the next human to read the code would wonder why I'm comparing
> > strings and not buffers.
> > 
> > Hence memcmp(), to help the code self-document and the compiler
> > optimise - I hope that's okay.  
> 
> Looking at the code:
> 
> > +/* Compare a buffer to a fixed string */
> > +static inline int _memstrcmp(const u8 *mem, const char *str)
> > +{
> > +     return memcmp(mem, str, strlen(str));  
> 
> The _memstrcmp is sometimes directly used. Where's the check that mem
> is valid for strlen(len)? Better only use _len_memstrcmp().

It's implicit in the code that calls it.

Anyway, you're the second reviewer to trip upon this (after Vincent),
so my take away is that my code is too confusing. I'll check if I can
just strncmp() it, to keep it simple.

Sorry for what's in large part a premature optimisation.

  reply	other threads:[~2022-03-17 21:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-07 21:43 [PATCH v3] can, tty: elmcan CAN/ldisc driver for ELM327 based OBD-II adapters Max Staudt
2022-03-07 21:57 ` Greg Kroah-Hartman
2022-03-07 22:00   ` Max Staudt
2022-03-08  7:01 ` Vincent Mailhol
2022-03-09 12:54   ` Max Staudt
2022-03-09 13:49     ` Vincent Mailhol
2022-03-12 21:21       ` Max Staudt
2022-03-15 10:21         ` Marc Kleine-Budde
2022-03-17 21:05           ` Max Staudt [this message]
2022-03-14 22:04       ` Marc Kleine-Budde
2022-03-17 20:23         ` Max Staudt
2022-03-17 20:57           ` Marc Kleine-Budde
2022-03-17 21:08             ` Max Staudt
2022-03-14 22:00   ` Marc Kleine-Budde
2022-03-14 21:58 ` Marc Kleine-Budde
2022-03-17 20:18   ` Max Staudt
2022-03-17 20:55     ` Marc Kleine-Budde
2022-03-21  2:06       ` Max Staudt

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=20220317220528.4cd8efaa.max@enpas.org \
    --to=max@enpas.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.com \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    --cc=oneukum@suse.com \
    --cc=vincent.mailhol@gmail.com \
    --cc=wg@grandegger.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox