Date: Mon, 08 Jun 1998 00:18:04 -0700 From: Mike Smith <mike@smith.net.au> To: Mike Smith <mike@smith.net.au> Cc: Willem Jan Withagen <wjw@surf.IAEhv.nl>, current@FreeBSD.ORG Subject: Re: Variant Link implementation (Was: Re: lorder problem: ....... ) Message-ID: <199806080718.AAA09778@antipodes.cdrom.com> In-Reply-To: Your message of "Mon, 08 Jun 1998 00:12:57 PDT." <199806080712.AAA09745@antipodes.cdrom.com>
next in thread | previous in thread | raw e-mail | index | archive | help
>
> buf = zalloc(namei_zone);
> si = 0, ci = 0, di = 0;
> while (si < linklen) {
> /* component leader? */
> if ((cp[si] == '$') &&
> (si < (linklen - 2)) &&
> (cp[si + 1] == '{')) {
> ci = si + 2;
> while (ci < linklen) {
> if (cp[si] == '}') {
> cp[ci] = 0;
> switch (vlink_xlate(cp + si + 2,
> buf, &di)) {
> case 0: /* OK */
> si = ci + 1;
> di += k;
> continue;
> case 1: /* no room to expand */
> return ENAMETOOLONG;
> default:/* not found */
> break;
> }
> }
> }
> }
> buf[di++] = cp[si++];
> }
> linklen = di;
> if (ndp->ni_pathlen > 1)
> zfree(cp);
> }
> cp = buf;
>
> Note that the memory management here is actually bogus; you should
> *always* zalloc the buffer for the VOP_READLINK, and assign buf based
> on ndp->ni_pathlen as is currently done for cp. Once you hand it over,
> the management for cp as it currently is is fine. (remember to dispose
> of buf as well as cp in the error case).
>
> The vlink_xlate function is where the lookup is done; you will probably
> want to pass p (current proc) to it as well at some stage.
Whoops; just to clarify; vlink_xlate(tok, dbuf, &dbofs) copies the
value of the token at (tok) into (dbuf) at (dbofs) presuming that
(dbofs) would not exceed the allowed size, updates (dbofs) and returns
0 (all OK), 1 (not enough room) or 2 (no translation for tok available).
--
\\ Sometimes you're ahead, \\ Mike Smith
\\ sometimes you're behind. \\ mike@smith.net.au
\\ The race is long, and in the \\ msmith@freebsd.org
\\ end it's only with yourself. \\ msmith@cdrom.com
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199806080718.AAA09778>
