bin/181152: %i fails with negative hex numbers with sscanf

Andrey Chernov ache at freebsd.org
Fri Aug 9 02:10:01 UTC 2013


The following reply was made to PR kern/181152; it has been noted by GNATS.

From: Andrey Chernov <ache at freebsd.org>
To: Garrett Cooper <yaneurabeya at gmail.com>
Cc: freebsd-gnats-submit at FreeBSD.org
Subject: Re: bin/181152: %i fails with negative hex numbers with sscanf
Date: Fri, 09 Aug 2013 06:05:04 +0400

 On 09.08.2013 4:15, Garrett Cooper wrote:
 > #define NUM     -0x1234
 > #define STRNUM  __STRING(NUM)
 > 
 > ATF_TC(sscanf_neghex);
 > ATF_TC_HEAD(sscanf_neghex, tc)
 > {
 >         atf_tc_set_md_var(tc, "descr",
 >             "PR lib/21691: %%i and %%x fail with negative hex numbers");
 > }
 > 
 > ATF_TC_BODY(sscanf_neghex, tc)
 > {
 >         int i;
 > 
 >         sscanf(STRNUM, "%i", &i);
 >         ATF_REQUIRE(i == NUM);
 > 
 >         sscanf(STRNUM, "%x", &i);
 >         ATF_REQUIRE(i == NUM);
 > }
 
 Probably something is wrong with your ATF way, this example works:
 
 #include <stdio.h>
 
 int main() {
 int i;
 i = 0;
 sscanf("-0x1234", "%i", &i);
 printf("%d\n", i);
 i = 0;
 sscanf("-0x1234", "%x", &i);
 printf("%d\n", i);
 }
 
 -4660
 -4660
 (which is -0x1234)
 
 Please do not post more ATF examples, use plain ones, many developers
 (including me) don't have ATF installed.
 
 -- 
 http://ache.vniz.net/
 bitcoin:1G6ugdNY6e5jx1GVnAU2ntj2NEfmjKG85r


More information about the freebsd-bugs mailing list