lkml.org 
[lkml]   [2009]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] fix %*s%n in sscanf
When using %*s, sscanf should honor conversion specifiers immediately following
the %*s. For example, the following code should find the position of the end of
the string "hello".

int end;
char buf[] = "hello world";
sscanf(buf, "%*s%n", &end);
printf("%d\n", end);

Ideally, sscanf would advance the fmt and str pointers the same as it would
without the *, but the code for that is rather complicated and is not included
in the patch.

Please CC me in replies.


Signed-off-by: Andy Spencer <andy753421@gmail.com>

diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 73a14b8..da2daf2 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1766,7 +1766,7 @@ int vsscanf(const char * buf, const char * fmt, va_list args)
* advance both strings to next white space
*/
if (*fmt == '*') {
- while (!isspace(*fmt) && *fmt)
+ while (!isspace(*fmt) && *fmt != '%' && *fmt)
fmt++;
while (!isspace(*str) && *str)
str++;[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2009-09-25 08:31    [W:0.077 / U:0.992 seconds]
©2003-2014 Jasper Spaans. Advertise on this site