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