Date: Wed, 14 Aug 2002 09:56:06 -0700 From: Brooks Davis <brooks@one-eyed-alien.net> To: Bruce Evans <bde@zeta.org.au> Cc: Brooks Davis <brooks@one-eyed-alien.net>, "M. Warner Losh" <imp@bsdimp.com>, net@FreeBSD.ORG Subject: Re: switching to if_xname from if_name and if_unit Message-ID: <20020814095606.A32608@Odin.AC.HMC.Edu> In-Reply-To: <20020731041621.H56544-100000@gamplex.bde.org>; from bde@zeta.org.au on Wed, Jul 31, 2002 at 04:22:23AM %2B1000 References: <20020730101533.A29988@Odin.AC.HMC.Edu> <20020731041621.H56544-100000@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Wed, Jul 31, 2002 at 04:22:23AM +1000, Bruce Evans wrote:
> On Tue, 30 Jul 2002, Brooks Davis wrote:
>
> > On Mon, Jul 29, 2002 at 10:38:34PM -0600, M. Warner Losh wrote:
> > > : @@ -280,8 +280,7 @@ ep_attach(sc)
> > > : attached = (ifp->if_softc != 0);
> > > :
> > > : ifp->if_softc = sc;
> > > : - ifp->if_unit = sc->unit;
> > > : - ifp->if_name = "ep";
> > > : + sprintf(ifp->if_xname, "ep%d", sc->unit);
> > >
> > > strcpy(ifp->if_xname, device_get_name(sc->dev));
> > >
> > > might be better, don't you think?
>
> I think this point has already been covered better by noticing that the
> name is already stored in several other places (not just new-bus).
>
> > Yes, that's probably better. At least it's one less place that needs to
> > know the name of the device.
>
> Except it gets the name wrong (it should use device_get_nameunit()), and
> it is not so clear that the name fits in the buffer.
I'm trying to figure out what the best idiom would be. While a >15
character name seems unlikely, we probably shouldn't trust
device_get_nameunit(). In that case, I'm not sure what the best thing
to use. The obvious thing is strlcpy, but I don't think we have that in
the kernel. We could use strncpy with the usual tricks or snprintf.
Another option would be something like in if.[ch]:
void
if_setxnamefromdev(struct ifnet *ifp, device_t dev)
{
KASSERT(strlen(device_get_nameunit(dev)) < sizeof(ifp->if_xname),
("%s: name too big for if_xname", device_get_nameunit(dev)));
strncpy(ifp->if_xname, device_get_nameunit(dev),
sizeof(ifp->if_xname) - 1);
ifp->if_xname[sizeof(ifp->if_xname) - 1] = '\0';
}
I kind of like that idea because it means we've got one function to hide
the mess and we find out if someone does manage to make a name that's
too long.
-- Brooks
--
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
iD8DBQE9WoulXY6L6fI4GtQRAhBgAJ0SYXvqqNY/ywImSNBkv5FcYPGEIgCfXEag
nGawHEIyrTdXHGaD5J53P+o=
=PDKs
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020814095606.A32608>
