]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler.cc (fhandler_base::open): Set win32 access flags
authorEgor Duda <deo@logos-m.ru>
Thu, 14 Jun 2001 18:21:17 +0000 (18:21 +0000)
committerEgor Duda <deo@logos-m.ru>
Thu, 14 Jun 2001 18:21:17 +0000 (18:21 +0000)
to 0, when requested.
* fhandler.h: New status flag FH_QUERYOPEN.
(fhandler::get_query_open): New function.
(fhandler::set_query_open): Ditto.
* syscalls.cc (stat_worker): Request query-only open mode.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.cc
winsup/cygwin/fhandler.h
winsup/cygwin/syscalls.cc

index 66c813731272242ea80359e2764df3f1a00cfcc6..e23c2d8db06faab05961d97fc4368f0ed5028e9f 100644 (file)
@@ -1,3 +1,12 @@
+2001-06-14  Egor Duda  <deo@logos-m.ru>
+
+       * fhandler.cc (fhandler_base::open): Set win32 access flags
+       to 0, when requested.
+       * fhandler.h: New status flag FH_QUERYOPEN.
+       (fhandler::get_query_open): New function.
+       (fhandler::set_query_open): Ditto.
+       * syscalls.cc (stat_worker): Request query-only open mode.
+
 2001-06-12  Egor Duda  <deo@logos-m.ru>
 
        * environ.cc (set_file_api_mode): New function. Move setting
index 5c613bccd8b8b97b5388b3cb0ad4409422b410c1..973a1c19badf424beb9074bfc3f4e1e774787ca5 100644 (file)
@@ -308,7 +308,11 @@ fhandler_base::open (int flags, mode_t mode)
       goto done;
     }
 
-  if (get_device () == FH_TAPE)
+  if (get_query_open ())
+    {
+      access = 0;
+    }
+  else if (get_device () == FH_TAPE)
     {
       access = GENERIC_READ | GENERIC_WRITE;
     }
index 6f193c385db1de1fda3f894a98de50ca87b532c8..856d3d6323a8d584af6236c77b3a57a9aa94de03 100644 (file)
@@ -50,30 +50,32 @@ details. */
 
 enum
 {
-  FH_RBINARY = 0x00001000,     /* binary read mode */
-  FH_WBINARY = 0x00002000,     /* binary write mode */
-  FH_CLOEXEC = 0x00004000,     /* close-on-exec */
-  FH_RBINSET = 0x00008000,     /* binary read mode has been explicitly set */
-  FH_WBINSET = 0x00010000,     /* binary write mode has been explicitly set */
-  FH_APPEND  = 0x00020000,     /* always append */
-  FH_ASYNC   = 0x00040000,     /* async I/O */
-  FH_HADEOF  = 0x00080000,     /* EOF seen */
-
-  FH_SYMLINK = 0x00100000,     /* is a symlink */
-  FH_EXECABL = 0x00200000,     /* file looked like it would run:
+  FH_RBINARY   = 0x00001000,   /* binary read mode */
+  FH_WBINARY   = 0x00002000,   /* binary write mode */
+  FH_CLOEXEC   = 0x00004000,   /* close-on-exec */
+  FH_RBINSET   = 0x00008000,   /* binary read mode has been explicitly set */
+  FH_WBINSET   = 0x00010000,   /* binary write mode has been explicitly set */
+  FH_APPEND    = 0x00020000,   /* always append */
+  FH_ASYNC     = 0x00040000,   /* async I/O */
+  FH_HADEOF    = 0x00080000,   /* EOF seen */
+
+  FH_SYMLINK   = 0x00100000,   /* is a symlink */
+  FH_EXECABL   = 0x00200000,   /* file looked like it would run:
                                 * ends in .exe or .bat or begins with #! */
-  FH_W95LSBUG= 0x00400000,     /* set when lseek is called as a flag that
+  FH_W95LSBUG  = 0x00400000,   /* set when lseek is called as a flag that
                                 * _write should check if we've moved beyond
                                 * EOF, zero filling if so. */
-  FH_NOFRNAME= 0x00800000,     /* Set if shouldn't free unix_path_name and
+  FH_NOFRNAME  = 0x00800000,   /* Set if shouldn't free unix_path_name and
                                   windows_path_name_ on destruction. */
-  FH_NOEINTR = 0x01000000,     /* Set if I/O should be uninterruptible. */
-  FH_FFIXUP  = 0x02000000,     /* Set if need to fixup after fork. */
-  FH_LOCAL   = 0x04000000,     /* File is unix domain socket */
-  FH_FIFO    = 0x08000000,     /* File is FIFO */
-  FH_ISREMOTE= 0x10000000,     /* File is on a remote drive */
-  FH_DCEXEC  = 0x20000000,     /* Don't care if this is executable */
-  FH_HASACLS = 0x40000000,     /* True if fs of file has ACLS */
+  FH_NOEINTR   = 0x01000000,   /* Set if I/O should be uninterruptible. */
+  FH_FFIXUP    = 0x02000000,   /* Set if need to fixup after fork. */
+  FH_LOCAL     = 0x04000000,   /* File is unix domain socket */
+  FH_FIFO      = 0x08000000,   /* File is FIFO */
+  FH_ISREMOTE  = 0x10000000,   /* File is on a remote drive */
+  FH_DCEXEC    = 0x20000000,   /* Don't care if this is executable */
+  FH_HASACLS   = 0x40000000,   /* True if fs of file has ACLS */
+  FH_QUERYOPEN = 0x80000000,   /* open file without requesting either read
+                                  or write access */
 
   /* Device flags */
 
@@ -252,6 +254,9 @@ public:
   void set_append_p (int val) { FHCONDSETF (val, APPEND); }
   void set_append_p () { FHSETF (APPEND); }
 
+  int get_query_open () { return FHISSETF (QUERYOPEN); }
+  void set_query_open (int val) { FHCONDSETF (val, QUERYOPEN); }
+
   int get_readahead_valid () { return raixget < ralen; }
   int puts_readahead (const char *s, size_t len = (size_t) -1);
   int put_readahead (char value);
index e6e48f3fc60fcdb48cb4e4858e0fe7cc48ea4015..4e96ccc1ed19ecdd10762e2c0bea8f0822b2cc5f 100644 (file)
@@ -1048,6 +1048,7 @@ stat_worker (const char *caller, const char *name, struct stat *buf,
        && dtype != DRIVE_NO_ROOT_DIR
        && dtype != DRIVE_UNKNOWN)))
     {
+      fh.set_query_open (TRUE);
       oret = fh.open (real_path, O_RDONLY | O_BINARY | O_DIROPEN |
                                 (nofollow ? O_NOSYMLINK : 0), 0);
       /* Check a special case here. If ntsec is ON it happens
This page took 0.040863 seconds and 5 git commands to generate.