Date: Tue, 22 Aug 2017 20:30:09 +0200 From: Nikolaus Rath <Nikolaus@rath.org> To: freebsd-fs@freebsd.org Subject: Re: Can telldir() == 0 value be made special? Message-ID: <87lgmbfob2.fsf@vostro.rath.org> In-Reply-To: <CAG6CVpVViqnbGuVn_JETBC5Q0NoYfC4VJK7iWjEfA7tFurQ2ag@mail.gmail.com> (Conrad Meyer's message of "Tue, 22 Aug 2017 07:42:36 -0700") References: <87bmn7kf3b.fsf@vostro.rath.org> <CAG6CVpVViqnbGuVn_JETBC5Q0NoYfC4VJK7iWjEfA7tFurQ2ag@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 22 2017, Conrad Meyer <cem@freebsd.org> wrote: > Hi Nikolaus, > > As you have surmised, DIR* seekpoints are created dynamically whenever > requested by user's telldir() call: Good to know, thanks! > I believe we could special case zero without breaking ABI > compatibility of correct programs. Something like this: > > --- a/lib/libc/gen/telldir.c > +++ b/lib/libc/gen/telldir.c > @@ -70,6 +70,20 @@ telldir(DIR *dirp) > } > } > if (lp =3D=3D NULL) { > + /* Create special zero telldir entry, similar to Linux */ > + if (dirp->dd_td->td_loccnt =3D=3D 0 && dirp->dd_loc !=3D = 0) { > + lp =3D malloc(sizeof(struct ddloc)); > + if (lp =3D=3D NULL) { > + if (__isthreaded) > + _pthread_mutex_unlock(&dirp->dd_l= ock); > + return (-1); > + } > + lp->loc_index =3D dirp->dd_td->td_loccnt++; > + lp->loc_seek =3D 0; > + lp->loc_loc =3D 0; > + LIST_INSERT_HEAD(&dirp->dd_td->td_locq, lp, loc_l= qe); > + } > + > lp =3D malloc(sizeof(struct ddloc)); > if (lp =3D=3D NULL) { > if (__isthreaded) > > I don't know if there are any downsides to special-casing zero like > this, other than additional code complexity. This seems a little more complex than I would have expected. Is this maybe turning zero into a valid argument for seekdir() even if telldir() has never been called? That would be even better, but the minimal change that I need is just to ensure that telldir() either (a) never returns zero, or (b) only returns zero if called at the beginning of the stream. Best, -Nikolaus --=20 GPG Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F =C2=BBTime flies like an arrow, fruit flies like a Banana.=C2= =AB
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?87lgmbfob2.fsf>