|
|
Message-ID: <20131115204702.GE24286@brightrain.aerifal.cx>
Date: Fri, 15 Nov 2013 15:47:02 -0500
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: sscanf(3) return value doesn't count %100c assignments
On Fri, Nov 15, 2013 at 08:23:42PM +0000, David Wuertele wrote:
> Comparing musl-0.9.14 with glibc-2.13, I find sscanf(3) behaves
> differently. In Glibc, sscanf() returns the same assignment counts when
> using %Nc compared with using %s, but in Mulsl, sscanf returns different
> assignment counts.
>
> For example, take the following two instructions:
>
> sscanf (string, "%d %s", &number, remainder);
> sscanf (string, "%d %100c", &number, remainder);
>
> If each of these makes two assignments, they should both return 2.
> Glibc works this way. But even though with Musl they both make two
> assignments, Musl sscanf() returns 2 for the %s and it returns 1 for
> the %100c version.
musl's sscanf returns 1 because only the %d was matched. %100c
requires _exactly_ 100 characters; anything shorter is a matching
failure. See C99 7.19.6.2 The fscanf function, paragraph 12:
12 The conversion specifiers and their meanings are:
....
c
Matches a sequence of characters of exactly the number specified
by the field width (1 if no field width is present in the
directive).
What you're seeing is a known bug in glibc:
https://sourceware.org/bugzilla/show_bug.cgi?id=12701
It's an old WONTFIX from the days when Ulrich Drepper was maintainer.
Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.