Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 31 Aug 2010 20:57:52 +0200
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        Fabian Keil <freebsd-listen@fabiankeil.de>
Cc:        svn-src-all@freebsd.org
Subject:   Re: svn commit: r212050 - head/cddl/contrib/opensolaris/cmd/zpool
Message-ID:  <20100831185752.GA1932@garage.freebsd.pl>
In-Reply-To: <20100831204421.4ad0a99a@r500.local>
References:  <201008311041.o7VAfrAF028012@svn.freebsd.org> <20100831204421.4ad0a99a@r500.local>

next in thread | previous in thread | raw e-mail | index | archive | help

--17pEHd4RhPHOinZp
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Tue, Aug 31, 2010 at 08:44:21PM +0200, Fabian Keil wrote:
> Pawel Jakub Dawidek <pjd@FreeBSD.org> wrote:
> >  static int
> > +is_root_pool(zpool_handle_t *zhp)
> > +{
> > +	static struct statfs sfs;
> > +	static char *poolname =3D NULL;
> > +	static boolean_t stated =3D B_FALSE;
>=20
> Why are those variables static? They all seem to be (re)initialized
> before first-use in the function.

Not really. We enter while () loop only if stated is false and it will
be false only for the first call. By having those variables static we
statfs(2) the root file system only once.

> > +	while (!stated) {
> > +		stated =3D B_TRUE;
> > +		if (statfs("/", &sfs) =3D=3D -1) {
> > +			(void) fprintf(stderr,
> > +			    "Unable to stat root file system: %s.\n",
> > +			    strerror(errno));
> > +			break;
> > +		}
> > +		if (strcmp(sfs.f_fstypename, "zfs") !=3D 0)
> > +			break;
> > +		poolname =3D sfs.f_mntfromname;
> > +		if ((slash =3D strchr(poolname, '/')) !=3D NULL)
> > +			*slash =3D '\0';
> > +		break;
> > +	}
> > +	return (poolname !=3D NULL && strcmp(poolname, zpool_get_name(zhp)) =
=3D=3D 0);
> > +}
>=20
> This while "loop" doesn't seem to loop at all, is this intended?

Yes. This is a trick to avoid goto. I don't like tricks in code in
general, but I hope the code is readable.

--=20
Pawel Jakub Dawidek                       http://www.wheelsystems.com
pjd@FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

--17pEHd4RhPHOinZp
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)

iEYEARECAAYFAkx9UK8ACgkQForvXbEpPzS7dQCdFIZ6wn6CO5YwpH7oBq1qQ7j1
j3AAnRKDz8NOiea4PBltE+8JpIvjSzqs
=jP5a
-----END PGP SIGNATURE-----

--17pEHd4RhPHOinZp--



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