Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Duda <deo@logos-m.ru>2001-06-14 22:21:17 +0400
committerEgor Duda <deo@logos-m.ru>2001-06-14 22:21:17 +0400
commit96d95e535ec7ab782ea5e29555dbfe3a4d371555 (patch)
treeb747126d1f11de8858b91fb90f240d4adea4d28f
parentc66261a731cd96a10e9f0d9ba51b68a36d33e6fc (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog9
-rw-r--r--winsup/cygwin/fhandler.cc6
-rw-r--r--winsup/cygwin/fhandler.h45
-rw-r--r--winsup/cygwin/syscalls.cc1
4 files changed, 40 insertions, 21 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 66c813731..e23c2d8db 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -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
diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc
index 5c613bccd..973a1c19b 100644
--- a/winsup/cygwin/fhandler.cc
+++ b/winsup/cygwin/fhandler.cc
@@ -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;
}
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 6f193c385..856d3d632 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -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);
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index e6e48f3fc..4e96ccc1e 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -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