On Fri, Sep 27, 2013 at 4:17 AM, Roland Mainz <[email protected]> wrote:
> On Fri, Sep 27, 2013 at 3:50 AM, Roland Mainz <[email protected]> 
> wrote:
>> 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
[snip]
> -- snip --

Attached (as "astksh20130926_devflagsxattr_open_fix001.diff.txt") is
the same fix in attachment form (to avoid the Gmail issues with
whitespaces getting "eaten") ...

----

Bye,
Roland

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

Reply via email to