[lkml]   [2009]   [Sep]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    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 <>

    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)
    while (!isspace(*str) && *str)
    str++;[unhandled content-type:application/pgp-signature]
     \ /
      Last update: 2009-09-25 08:31    [W:0.055 / U:2.732 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site