Date: Mon, 14 Jan 2008 04:44:08 +1100 (EST) From: Bruce Evans <brde@optusnet.com.au> To: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no> Cc: cvs-src@FreeBSD.org, Maxim Konovalov <maxim@macomnet.ru>, src-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/usr.sbin/iostat iostat.c Message-ID: <20080114042508.X11683@besplex.bde.org> In-Reply-To: <86ve5xq142.fsf@ds4.des.no> References: <200801122037.m0CKb6CS009262@repoman.freebsd.org> <20080112205254.GB3090@VARK.MIT.EDU> <20080112235350.C10888@mp2.macomnet.net> <20080112211919.GA3408@VARK.MIT.EDU> <86ve5xq142.fsf@ds4.des.no>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 13 Jan 2008, [utf-8] Dag-Erling Smørgrav wrote: > David Schultz <das@FreeBSD.ORG> writes: >> I don't think it always does set errno, but you can set errno to 0 >> before the call, and you'll get either the real error message from >> err() or "unknown error". > > If asprintf() fails because malloc() failed, malloc() will have set > errno to ENOMEM. I can't think of any other failure mode for asprintf() > that won't either be silently ignored (error in format string) or result > in a segmentation fault (bogus argument to %s). FreeBSD vfprintf.c doesn't touch errno directly, but POSIX with XSI bugfeatures says that it sets errno to EILSEQ or EINVAL if it fails with certain errors. Also, when the printf variant is printf or fprintf, it may set errno to ENOMEM, and when it is snprintf it may set errno to EOVERFLOW for the non-error of passing a buffer size of > INT_MAX (with a buffer that large) or for the error of the the result wanting to be larger than INT_MAX. POSIX is standardizing the behaviour in the latter case and might require it to set errno (FreeBSD vfprintf.c just returns EOF). Bruce
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080114042508.X11683>
