I meant to track open(O_search) fds by keep in cdt indexed by <dev,ino>
and returning the corresponding path -- then openat(fd, ...) will
convert fd to <dev,ino> and the look up the path in the cdt
if not in the cdt then it would use the pwd algorithm to determine
a path and add it to the cdt -- a problem would be knowing when to
purge the cdt -- not really workable but maybe as a last resort

On Thu, 16 Aug 2012 02:18:08 +0200 =?KOI8-R?B?z8zYx8Egy9LZ1sHOz9fTy8HR?= wrote:
> Glenn, I think the only portable way is to do a open(".", O_RDONLY),
> and if that fails save the name from getcwd(), and restore that, if
> neither /dev/fd or /proc/${pid}/fd/${dirfd} are working. As far as I
> know there is no way to open a file using <dev,ino>, and <dev,ino> may
> not be reliable for all kinds of file systems, such like as fuse
> (http://en.wikipedia.org/wiki/Filesystem_in_Userspace).

> Olga

> On Thu, Aug 16, 2012 at 1:24 AM, ольга крыжановская
> <olga.kryzhanov...@gmail.com> wrote:
> > Glenn, how to an application obtain a fd just using <dev,ino>?
> >
> > The alternative, if no /proc or /dev/fd is available, is to save the
> > cwd, do a temporary cwd using fchdir(), and restore the old cwd. This
> > is now glibc did it, with a mutex around the whole sequence to make it
> > thread safe.
> >
> > Olga
> >
> > On Thu, Aug 16, 2012 at 1:20 AM, Glenn Fowler <g...@research.att.com> wrote:
> >>
> >> On Thu, 16 Aug 2012 01:09:29 +0200 =?KOI8-R?B?z8zYx8Egy9LZ1sHOz9fTy8HR?= 
> >> wrote:
> >>> Glenn, have you ever considered putting an openat(), fstatat(),
> >>> mkfifoat() emulation into libast, if the base operating system does
> >>> not have such calls? I have been trying more tests with the at() apis
> >>> but I am not happy to trash much of libshell with lots of #ifdef
> >>> AT_CWD tests if there is a better option.
> >>
> >>> AFAIK a lot of the at() calls can be emulated by using
> >>> /dev/fd/${dirfd}/${path} or /proc/${pid}/fd/${dirfd}/${path}. I just
> >>> do not know, are there cases where /dev/fd or /proc/${pid}/fd are not
> >>> available (chroot environments?)?
> >>
> >> there are a lot of systems with lame or no /proc
> >> and it will be hard to work around systems with no O_search
> >>
> >> but let me think a bit on that
> >> if we didn't have to worry about dir fd's across exec (probably rare right 
> >> now)
> >> we might be able to cache emulated open(O_search) paths with <dev,ino> keys
> >> on systems that don't support /dev/fd/<FD>/<PATH> pr 
> >> /proc/<PID>/fd/<FD>/<PATH>
> >>> Olga
> >>> --
> >>>       ,   _                                    _   ,
> >>>      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> >>> .----'-/`-/     olga.kryzhanov...@gmail.com   \-`\-'----.
> >>>  `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
> >>>       /\/\     Solaris/BSD//C/C++ programmer   /\/\
> >>>       `--`                                      `--`
> >>
> >
> >
> >
> > --
> >       ,   _                                    _   ,
> >      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> > .----'-/`-/     olga.kryzhanov...@gmail.com   \-`\-'----.
> >  `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
> >       /\/\     Solaris/BSD//C/C++ programmer   /\/\
> >       `--`                                      `--`

> -- 
>       ,   _                                    _   ,
>      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> .----'-/`-/     olga.kryzhanov...@gmail.com   \-`\-'----.
>  `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
>       /\/\     Solaris/BSD//C/C++ programmer   /\/\
>       `--`                                      `--`

_______________________________________________
ast-developers mailing list
ast-developers@research.att.com
https://mailman.research.att.com/mailman/listinfo/ast-developers

Reply via email to