On Fri, 27 Sep 2013 04:17:31 +0200 Roland Mainz wrote:
> On Fri, Sep 27, 2013 at 3:50 AM, Roland Mainz <[email protected]>
> wrote:
> > Hi!
> >
> > ----
> >
> > The following code from one of my test scripts no longer work in
> > ast-ksh.2013-09-26 on Solaris 11/AMD64/64bit:
> > -- snip --
> > $ ksh -c 'redirect {n}<. ; redirect {m}</dev/file/flags@xattr@/dev/fd/$n '
> > /home/test001/bin/ksh: /dev/file/flags@xattr@/dev/fd/11: cannot open
> > [Invalid argument]
> > -- snip --
> >
> > This fails because of the following code tries to open the parent dir
> > of an XATTR dir via:
> > -- snip --
> > 227 #if O_XATTR
> > 228 if ((f = openat(dev.fd, ".",
> > O_INTERCEPT|O_RDONLY|O_XATTR)) >= 0)
> > 229 {
> > 230 fd = openat(f, "..",
> > oflags|O_INTERCEPT, mode);
> > 231 close(f);
> > 232 return fd;
> > 233 }
> > 234 #endif
> > -- snip --
> >
> > ... erm.. I don't understand this... what is this code trying to do ?
> This patch fixes the problem:
> -- snip --
> diff -r -u original/src/lib/libast/path/pathopen.c
> build_i386_64bit_debug/src/lib/libast/path/pathopen.c
> --- src/lib/libast/path/pathopen.c 2013-08-29 07:17:52.000000000 +0200
> +++ src/lib/libast/path/pathopen.c 2013-09-27 04:06:38.362136396 +0200
> @@ -222,16 +222,12 @@
> /* preserve open() semantics if possible */
> - if (oflags & (O_DIRECTORY|O_SEARCH))
> - return openat(dev.fd, ".",
> oflags|O_INTERCEPT, mode);
> -#if O_XATTR
> - if ((f = openat(dev.fd, ".",
> O_INTERCEPT|O_RDONLY|O_XATTR)) >= 0)
> - {
> - fd = openat(f, "..", oflags|O_INTERCEPT,
> mode);
> - close(f);
> - return fd;
> - }
> + if (oflags & (O_DIRECTORY|O_SEARCH
> +#ifdef O_XATTR
> + |O_XATTR
> #endif
> + ))
> + return openat(dev.fd, ".",
> oflags|O_INTERCEPT, mode);
this patch is wrong -- don't apply it
see my previous post
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers