Re: d_path to be removed?

Linus Torvalds (torvalds@transmeta.com)
Sat, 26 Jul 1997 22:10:05 -0700 (PDT)


On Sat, 26 Jul 1997 torvalds@penguin.transmeta.com wrote:
>
> I suspect the code will look something like this:
>
> /*
> * "buflen" should be PAGE_SIZE or more.
> */
> char * d_path(struct dentry *dentry, char *buffer, int buflen)
> {
> char * end = buffer+buflen;
> char * retval;
> struct dentry * root = current->fs->root;
>
> *--end = '\0';
> buflen--;
>
> /* Get '/' right */
> retval = end-1;
> *retval = '/';
>
> for (;;) {
> struct dentry * parent;
> int namelen;
>
> parent = dentry->d_covers->d_parent;
> if (dentry == root || dentry == parent)
> break;
> namelen = dentry->d_name.len;
> buflen -= namelen + 1;
> if (buflen < 0)
> break;
> end -= namelen;
> memcpy(end, dentry->d_name.name, namelen);
> *--end = '/';
> retval = end;
> }
> return retval;
> }
>
> The above is what I currently have, but it's untested. Feel free to
> test.

I warned you.

Anyway, the loop obviously needs a "dentry = parent;" at the end,
otherwise it will never move downwards in the directory tree.

It still isn't tested, though.

Linus