kobject sample code

Rastislav Barlik barlik at zoho.com
Wed Dec 17 18:35:18 EST 2014


On Wed, 17 Dec 2014 22:31:21 +0100
Paul Bolle <pebolle at tiscali.nl> wrote:

> On Sat, 2014-12-13 at 13:01 -0500, John de la Garza wrote:
> > On Tue, Dec 09, 2014 at 10:26:03AM +0100, Paul Bolle wrote:
> > > On Mon, 2014-12-08 at 21:20 -0500, John de la Garza wrote:
> > > > I'm looking at samples/kobject/kobject-example.c
> > > > 
> > > > at line 39 foo is read:
> > > > 
> > > >         sscanf(buf, "%du", &foo);
> > > > 
> > > > foo is an int so why is it read using %du not %d?
> > > 
> > > My reading of lib/vsprintf.c:vsscanf() is that a "%du" format
> > > expects "buf" to contain an integer followed by a literal 'u'
> > > char. Is that your reading too?
> > > 
> > After reading the code and the man page for vsscanf, it seems like
> > it is not expecting the 'u', but rather ignores it.
> 
> The manpage _probably_ describes intended behavior. But I'm not sure
> whether the kernel's vsscanf() tries to emulate it all that
> faithfully. (And, besides, that manpage would gain quite a bit with a
> few examples.) Anyhow, the net effect of "%du" appears to be to
> ignore any non digit trailing input. So I think you're reading the
> code correctly.
> 
> > vsscanf is a bit complicated for me, so I may be missing something.
> 
> I wouldn't have bothered replying if I had not noticed
> https://lkml.org/lkml/2014/12/17/386 . You might like to have a look
> at that patch. My primary observation is that its commit explanation
> is not very helpful. (That's why I CC-ed Ratislav.)
> 
> Paul Bolle

My understanding is that sscanf() would ignore any trailing input
anyway. So I think that "%du" is just a typo and should have been "%d"
instead. There should also be check for return value from sscanf().
I send a patch which uses kstrtoint() as it is preferred to single
variable sscanf().

-- 
Kind regards
Rastislav Barlik




More information about the Kernelnewbies mailing list