Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Apr 2008 20:05:26 +0200
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        Kostik Belousov <kostikbel@gmail.com>
Cc:        Roman Divacky <rdivacky@freebsd.org>, Alfred Perlstein <alfred@freebsd.org>, Robert Watson <rwatson@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: final decision about *at syscalls
Message-ID:  <20080416180526.GA32235@garage.freebsd.pl>
In-Reply-To: <20080416175832.GX18958@deviant.kiev.zoral.com.ua>
References:  <20071218092222.GA9695@freebsd.org> <200712201138.56423.jhb@freebsd.org> <20080412112019.GI45299@garage.freebsd.pl> <200804161014.41025.jhb@freebsd.org> <20080416165612.GA31094@garage.freebsd.pl> <20080416170341.GN95731@elvis.mu.org> <20080416184522.F1046@fledge.watson.org> <20080416175832.GX18958@deviant.kiev.zoral.com.ua>

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

--XsQoSWH+UP9D9v3l
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Apr 16, 2008 at 08:58:32PM +0300, Kostik Belousov wrote:
> On Wed, Apr 16, 2008 at 06:52:12PM +0100, Robert Watson wrote:
> > NDINIT() is already aware of the file descriptor array because it uses =
that=20
> > to get the current working and root directories.  And what the *at() sy=
stem=20
> > calls are effectively doing is substituting another directory for the=
=20
> > current working directory.  The exact expression of all this doesn't ma=
tter=20
> > all that much to me, but I think evaluating the file descriptor array f=
or=20
> > directory stuff all in one place, rather than spread over the caller an=
d=20
> > NDINIT(), is cleaner and avoids a lot of code everywhere.  Nothing says=
 you=20
> > can't have:
> >=20
> >      void
> >      NDINIT(struct nameidata *ndp, u_long op, u_long flags,
> >          enum uio_seg segflg, const char *namep, struct thread *td);
> >=20
> >      void
> >      NDINIT_AT(struct nameidata *ndp, u_long op, u_long flags,
> >          enum uio_seg segflg, const char *namep, int fd, struct thread =
*td);
> >=20
> >      NDINIT_DVP(struct nameidata *ndp, u_long op, u_long flags,
> >          enum uio_seg segflg, const char *namep, struct vnode *vp,
> >          struct thread *td);
> >=20
> > However, I think I wouldn't want NDINIT_AT() to be a wrapper for=20
> > NDINIT_DVP(), because I'd like all that fdp following to occur together.
>=20
> I already mailed the patch implementing all the above, modulo
> s/_DVP/_ATVP/. I want to get the response from Pawel and others. If
> positive, the patch is to be tested and committed.

Back when we discussed NDINIT_AT(), I was a bit opposed, because I was
afraid that we will grow more NDINIT_<arg>() functions. I preferred to
just initialize additional arguments directly, eg.

	NDINIT(&nd, foo, bar);
	nd.ni_dirfd =3D fd;
	nd.ni_startvp =3D dvp;
	namei(&nd);

At this point I don't really care, I can use NDINIT_DVP/NDINIT_ATVP.

> I see no reason for heating the debate.

Agreed.

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

--XsQoSWH+UP9D9v3l
Content-Type: application/pgp-signature
Content-Disposition: inline

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

iD8DBQFIBj/jForvXbEpPzQRAgO6AKDWUm3ngdma89OX/Ce7THAgKcJL7gCggABl
fAyvTnNC1/DocpuLfJc6qhU=
=DzdD
-----END PGP SIGNATURE-----

--XsQoSWH+UP9D9v3l--



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