Date: Fri, 4 Feb 2011 08:09:09 +1100 From: Peter Jeremy <peterjeremy@acm.org> To: Jeremy Chadwick <freebsd@jdc.parodius.com> Cc: freebsd-fs@freebsd.org Subject: Re: ext2fs crash in -current (r218056) Message-ID: <20110203210909.GA28604@server.vk2pj.dyndns.org> In-Reply-To: <20110203151318.GA9986@icarus.home.lan> References: <4D47B954.3010600@FreeBSD.org> <201102021704.04274.jhb@freebsd.org> <20110202222023.GA45401@icarus.home.lan> <201102030753.55820.jhb@freebsd.org> <20110203140142.GH78089@deviant.kiev.zoral.com.ua> <20110203151318.GA9986@icarus.home.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
--k+w/mQv8wyuph6w0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2011-Feb-03 07:13:18 -0800, Jeremy Chadwick <freebsd@jdc.parodius.com> w= rote: >The offset and the length are both explicitly casted and printed as >signed numbers here. > >For me anyway, the next question is "what are bio_offset and bio_length >defined as?" (indirectly, "why the explicit cast?"). They're both >declared as part of struct bio in src/sys/sys/bio.h as shown: > > 71 struct bio { >... > 78 off_t bio_offset; /* Offset into file. */ >... > 92 off_t bio_length; /* Like bio_bcount */ >... off_t is always a 64-bit signed int and there's no printf(9) length modifier to handle this particular situation (it's typically 'long' on 64-bit archs and 'long long' on 32-bit archs). Instead it's cast to a signed int which is at least as large that does have a suitable length modifier (intmax_t can be printed using %jd). --=20 Peter Jeremy --k+w/mQv8wyuph6w0 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.15 (FreeBSD) iEYEARECAAYFAk1LGXUACgkQ/opHv/APuIfMugCeO07MLbXR438w/Cadukt6L8G8 9LwAoIsx9enpFWLkEPV+hlc63xoOybS1 =ig5f -----END PGP SIGNATURE----- --k+w/mQv8wyuph6w0--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110203210909.GA28604>