OSDN Git Service

* syscalls.cc (open): Don't follow symlinks if O_EXCL is given.
authorcorinna <corinna>
Fri, 24 Aug 2007 14:55:55 +0000 (14:55 +0000)
committercorinna <corinna>
Fri, 24 Aug 2007 14:55:55 +0000 (14:55 +0000)
winsup/cygwin/ChangeLog
winsup/cygwin/syscalls.cc

index 0641190..5b7318f 100644 (file)
@@ -1,3 +1,7 @@
+2007-08-24  Corinna Vinschen  <corinna@vinschen.de>
+
+       * syscalls.cc (open): Don't follow symlinks if O_EXCL is given.
+
 2007-08-23  Corinna Vinschen  <corinna@vinschen.de>
 
        * ntdll.h (STATUS_NO_SUCH_FILE): Define.
index 8afa025..f3fa10d 100644 (file)
@@ -889,8 +889,9 @@ open (const char *unix_path, int flags, ...)
 
       if (fd >= 0)
        {
-         if (!(fh = build_fh_name (unix_path, NULL, (flags & O_NOFOLLOW) ?
-                                   PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
+         if (!(fh = build_fh_name (unix_path, NULL,
+                                   (flags & (O_NOFOLLOW | O_EXCL))
+                                   ?  PC_SYM_NOFOLLOW : PC_SYM_FOLLOW,
                                    transparent_exe ? stat_suffixes : NULL)))
            res = -1;           // errno already set
          else if ((flags & O_NOFOLLOW) && fh->issymlink ())