public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "Kurtis D. Rader" <kdrader@us.ibm.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Linux Kernel list <linux-kernel@vger.kernel.org>
Subject: Re: Platform device matching, & weird strncmp usage
Date: Sat, 7 Jan 2006 11:24:58 -0800	[thread overview]
Message-ID: <20060107192458.GA12409@us.ibm.com> (raw)
In-Reply-To: <1136527179.4840.120.camel@localhost.localdomain>

On Fri, 2006-01-06 16:59:39, Benjamin Herrenschmidt wrote:
> In 2.6.15, platform device matching works according to this comment in
> the code, or rather are supposed to:
> 
>  *	Platform device IDs are assumed to be encoded like this:
>  *	"<name><instance>", where <name> is a short description of the
>  *	type of device, like "pci" or "floppy", and <instance> is the
>  *	enumerated instance of the device, like '0' or '42'.
> 
> However, looking a few lines below, I see the actual implemetation:
> 
> static int platform_match(struct device * dev, struct device_driver * drv)
> {
> 	struct platform_device *pdev = container_of(dev, struct platform_device, dev);
> 
> 	return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
> }
> 
> As far as I know, strncmp() is _NOT_ supposed to return 0 if one string
> is shorter than the other and they match until that point. Thus the
> above will never match unless the <name> portion of pdev->name is
> exactly of size BUS_ID_SIZE which is obviously not the case...
> 
> Did I miss something or do we expect a "special" semantic for strncmp in
> the kernel ?

I can't speak to the correctness of that code but your understanding of
strncmp() is incorrect. From "GNU C Library Application Fundamentals":

    This function is the [sic] similar to strcmp, except that no more
    than size wide characters are compared. In other words, if the two
    strings are the same in their first size wide characters, the return
    value is zero.

And this has been may experience for the past 20 years and is confirmed by
this trivial program which prints zero in both cases:

#include <string.h>
#include <stdio.h>
int main() {
    printf("%d\n", strncmp("abc","abcd",3));
    printf("%d\n", strncmp("abcd","abc",3));
}

  parent reply	other threads:[~2006-01-07 19:25 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-06  5:59 Platform device matching, & weird strncmp usage Benjamin Herrenschmidt
2006-01-06  6:04 ` Benjamin Herrenschmidt
2006-01-06 18:53 ` Russell King
2006-01-06 21:38   ` Benjamin Herrenschmidt
2006-01-07 19:24 ` Kurtis D. Rader [this message]
2006-01-07 19:42   ` Bob Copeland
2006-01-07 22:14   ` Benjamin Herrenschmidt

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=20060107192458.GA12409@us.ibm.com \
    --to=kdrader@us.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox