> Yes, for systems with O_NOFOLLOW, that is a perfect (efficient, race
> free) solution.  For systems without O_NOFOLLOW, just moving the
> lstat() and the open() close to each other

Actually moving the lstat() _after_ the open() totally removes the
race for inode-less filesystems.  The following should be equivalent
to open(O_NOFOLLOW):

        fd = open(path);
        lstat(path, &st1);
        fstat(fd, &st2);
        if (st1.st_ino != st2.st_ino)
                /* ELOOP */;

The above should be no less efficient than what applications do now:

        lstat(path, &st1)
        /* ... */ 
        fd = open(path)
        fstat(fd, &st2)
        if (st1.st_ino != st2.st_ino)
                /* ELOOP */;

Miklos


_______________________________________________
Bug-findutils mailing list
Bug-findutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-findutils

Reply via email to