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);
/* see if the filesystem groks
.../[<pid>]/<fd>/... paths */
-- snip --
----
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [email protected]
\__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer
/O /==\ O\ TEL +49 641 3992797
(;O/ \/ \O;)
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers