Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 Jul 2004 07:20:13 GMT
From:      Steven Smith <sos22@cantab.net>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: misc/69788: The processing result of strtoul() cannot judge whether it is an error.
Message-ID:  <200407300720.i6U7KDix069001@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/69788; it has been noted by GNATS.

From: Steven Smith <sos22@cantab.net>
To: Takayuki Sakuma <takayuki@finet.fujitsu.com>
Cc: freebsd-gnats-submit@FreeBSD.org, sos22@srcf.ucam.org
Subject: Re: misc/69788: The processing result of strtoul() cannot judge whether it is an error.
Date: Fri, 30 Jul 2004 08:12:42 +0100

 --liOOAslEiF7prFVr
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 Content-Transfer-Encoding: quoted-printable
 
 >         errno=3D0;
 >         ul =3D strtoul("4294967295", &p, 10);
 >         printf("ul=3D%lu,*p=3D%x,errno=3D%d(%s)\n", ul, *p, errno, strerr=
 or(errno));
 >=20
 > result:
 > ul=3D4294967295,*p=3D0,errno=3D22(Unknown error: 0)
 
 In my tests, strtoul correctly leaves errno at 0:
 	errno=3D0;
 	ul =3D strtoul("4294967295", &p, 10);
 	o_errno =3D errno;=09
 	printf("ul=3D%lu,*p=3D%x,errno=3D%d(%s)\n", ul, *p, o_errno,strerror(errno=
 ));
 =20
 gives the result ``ul=3D4294967295,*p=3D0,errno=3D0(Unknown error: 0)'', as
 expected.  The problem with the original test case is that strerror()
 is setting errno to EINVAL (because 0 isn't a valid error number)
 before errno is pushed on the stack for printf (the order in which
 function arguments are evaluated is undefined in C).
 
 Steven Smith,
 sos22@cantab.net.
 --=20
 One day, I'm going to get an Alice-bot to answer all my email for me,
 and see how long it takes people to notice.
 
 --liOOAslEiF7prFVr
 Content-Type: application/pgp-signature
 Content-Disposition: inline
 
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.2.4 (FreeBSD)
 
 iD8DBQFBCfTqO4S8/gLNrjcRAjpOAJ9NjV/uXuyDyTVjZgSo3vO3NubF2gCfVHo6
 wmgzDCyCrVNPkA9VvQTbwi8=
 =etGX
 -----END PGP SIGNATURE-----
 
 --liOOAslEiF7prFVr--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200407300720.i6U7KDix069001>