diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2004-04-16 21:22:13 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2004-04-16 21:22:13 +0000 |
commit | e859706578ba60d3fcc011dd0e5d77b10342ae3f (patch) | |
tree | f0389a758d5de16c41d4275ae53d040e09ede040 /winsup/cygwin/fhandler_raw.cc | |
parent | e2c248c18bcfa7ceed603f92bc8085c7e1bd10b0 (diff) | |
download | cygnal-e859706578ba60d3fcc011dd0e5d77b10342ae3f.tar.gz cygnal-e859706578ba60d3fcc011dd0e5d77b10342ae3f.tar.bz2 cygnal-e859706578ba60d3fcc011dd0e5d77b10342ae3f.zip |
* autoload.cc (NtCreateFile): Add.
* dir.cc (mkdir): Change set_file_attribute call to indicate that
NT security isn't used.
* fhandler.cc (fhandler_base::open_9x): New method, created from
fhandler_base::open.
(fhandler_base::open): Rearrange to use NtCreateFile instead of
CreateFile.
* fhandler.h (enum query_state): Redefine query_null_access to
query_stat_control. query_null_access isn't allowed in NtCreateFile.
(fhandler_base::open_9x): Declare.
* fhandler_disk_file.cc (fhandler_base::fstat_fs): Use
query_stat_control first, query_read_control if that fails.
(fhandler_disk_file::fchmod): Call enable_restore_privilege before
trying to open for query_write_control. Don't fall back to
opening for query_read_control.
(fhandler_disk_file::fchown): Ditto.
(fhandler_disk_file::facl): Only request restore privilege and query
access necessary for given cmd.
* fhandler_raw.cc (fhandler_dev_raw::open): Call fhandler_base::open
instead of opening device here.
* ntdll.h (NtCreateFile): Declare.
* path.cc (symlink_worker): Change set_file_attribute call to indicate
that NT security isn't used.
* sec_acl.cc (getacl): Fix bracketing.
* sec_helper.cc (enable_restore_privilege): New function.
* security.cc (str2buf2uni_cat): New function.
(write_sd): Don't request restore permission here.
* security.h (set_process_privileges): Drop stale declaration.
(str2buf2uni): Declare.
(str2buf2uni_cat): Declare.
(enable_restore_privilege): Declare.
* syscalls.cc (fchown32): Return immediate success on 9x.
Diffstat (limited to 'winsup/cygwin/fhandler_raw.cc')
-rw-r--r-- | winsup/cygwin/fhandler_raw.cc | 33 |
1 files changed, 4 insertions, 29 deletions
diff --git a/winsup/cygwin/fhandler_raw.cc b/winsup/cygwin/fhandler_raw.cc index 5a05e704f..4fafe20cf 100644 --- a/winsup/cygwin/fhandler_raw.cc +++ b/winsup/cygwin/fhandler_raw.cc @@ -144,41 +144,16 @@ fhandler_dev_raw::open (int flags, mode_t) flags &= ~(O_CREAT | O_TRUNC); flags |= O_BINARY; - DWORD access = GENERIC_READ | SYNCHRONIZE; if (get_major () == DEV_TAPE_MAJOR || (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_WRONLY || (flags & (O_RDONLY | O_WRONLY | O_RDWR)) == O_RDWR) - access |= GENERIC_WRITE; - - extern void str2buf2uni (UNICODE_STRING &, WCHAR *, const char *); - UNICODE_STRING dev; - WCHAR devname[CYG_MAX_PATH + 1]; - str2buf2uni (dev, devname, get_win32_name ()); - OBJECT_ATTRIBUTES attr; - ULONG options = FILE_SYNCHRONOUS_IO_NONALERT; - /* The O_TEXT flag is used to indicate write-through on tape devices */ - if (get_major () == DEV_TAPE_MAJOR && (flags & O_TEXT)) - options |= FILE_WRITE_THROUGH; - flags &= ~O_TEXT; - InitializeObjectAttributes (&attr, &dev, OBJ_CASE_INSENSITIVE, NULL, NULL); - - HANDLE h; - IO_STATUS_BLOCK io; - NTSTATUS status = NtOpenFile (&h, access, &attr, &io, 0 /* excl. access */, - options); - if (!NT_SUCCESS (status)) - { - __seterrno_from_win_error (RtlNtStatusToDosError (status)); - return 0; - } + flags = ((flags & ~(O_WRONLY | O_RDWR)) | O_RDWR); - set_io_handle (h); - set_flags ((flags & ~O_TEXT) | O_BINARY); - - if (devbufsiz > 1L) + int res = fhandler_base::open (flags, 0); + if (res && devbufsiz > 1L) devbuf = new char [devbufsiz]; - return 1; + return res; } int |