for KB 2393802. Adjust comments throughout.
(struct _FAST_CWD_OLD): Rename former definition.
(cwdstuff::override_win32_cwd): Check if the OS is using the old or the
new FAST_CWD structure layout and handle accordingly.
(cygheap_init): Just zero cygheap structure.
* cygwin.sc: Keep 16 byte alignment but drop all other alignments related to
cygheap. Eliminate unused __cygheap_end1.
and __BYTE_ORDER into ...
* include/bits/endian.h: New file.
* include/arpa/nameser_compat.h: Include endian.h rather than defining
BYTE_ORDER here.
* include/asm/byteorder.h: Include bits/endian.h. Drop definition of
__LITTLE_ENDIAN.
* include/netinet/ip.h: Include bits/endian.h. Drop definitions of
BIG_ENDIAN, LITTLE_ENDIAN, and BYTE_ORDER. Use underscored variants
of aforementioned constants.
* include/netinet/tcp.h: Ditto.
* include/sys/param.h: Drop disabled definitions of BIG_ENDIAN,
LITTLE_ENDIAN, and BYTE_ORDER.
* include/netinet/ip.h: Reformat. Define setsockopt IP_TOS options
matching recent RFCs. Tweak comments.
* errno.cc (__xpg_strerror_r): New function.
(strerror_r): Update to copy newlib's fixes.
(strerror): Set errno on failure.
(_sys_errlist): Cause EINVAL failure for reserved values.
* cygwin.din: Export new function.
* include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Combine
this into minor 236.
erroneous premature return after collecting truncated multibyte
sequence in trunc_buf. Rather fall through to printing routine.
Fix return value to take trunc_buf content into account. Improve
comments.
(fhandler_socket::bind): Change comment to explain setting the
SO_EXCLUSIVEADDRUSE socket option. Remove code which checks for
address in use.
* net.cc (cygwin_setsockopt): Never set SO_REUSEADDR option. Improve
comment to compensate for the deleted comment in fhandler_socket::bind.
* wincap.cc: Throughout, drop has_enhanced_socket_security from wincaps.
* wincap.h (struct wincaps): Drop has_enhanced_socket_security flags
and method.
* winf.h: Move definitions of _P_PATH_TYPE_EXEC and _P_MODE from here...
* pinfo.h: ...to here.
(_P_PATH_TYPE_EXEC): Redefine to be bigger than _P_SYSTEM.
(_P_MODE): Redefine so as not to mask out _P_SYSTEM.
* spawn.cc (spawnlp): Add _P_PATH_TYPE_EXEC flag in call to spawnve.
(spawnlpe): Ditto.
(spawnvp): Ditto.
* exec.cc (execvp): Call spawnve with _P_PATH_TYPE_EXEC flag
from here.
(execvpe): Ditto.
* spawn.cc (spawn_guts): Filter _P_PATH_TYPE_EXEC from mode and
store in p_type_exec. Call av::fixup with addtional p_type_exec
argument.
(spawnve): Check for filtered mode.
(spawnvpe): Add _P_PATH_TYPE_EXEC flag when calling spawnve.
(av::fixup): Accept additional bool parameter p_type_exec. Only check
for script if p_type_exec is true.
* winf.h (_P_PATH_TYPE_EXEC): Define.
(_P_MODE): Define.
(av::fixup): Declare with additional bool parameter.
PC_SYM_NOFOLLOW_REP flag is set.
(cygwin_conv_path): Set PC_SYM_NOFOLLOW_REP flag when converting from
POSIX to Win32.
* path.h (enum pathconv_arg): Define PC_SYM_NOFOLLOW_REP flag.
(fhandler_proc::fill_filebuf): Handle return value of 0 from format
function as error.
(format_proc_stat): Set errno when returning 0 size.
(format_proc_partitions): Rewrite method to fetch partition info.
(class fhandler_dev_floppy): Convert partitions to part_t pointer.
Add lock_partition method.
* fhandler_floppy.cc (fhandler_dev_floppy::lock_partition): New method
to implement ondemand partition locking.
(fhandler_dev_floppy::write_file): Call lock_partition from here if
writing failed due to a potential write restriction on a disk
partition.
(fhandler_dev_floppy::open): Don't lock partitions here.
(fhandler_dev_floppy::close): Keep track of partition handle reference
count. Close handles and remove partitions pointer ony if count is 0.
(fhandler_dev_floppy::dup): Just copy partitions pointer and increment
reference count.
(class fhandler_dev_floppy): Add partitions array member. Add close
method.
* fhandler_floppy.cc (fhandler_dev_floppy::fhandler_dev_floppy): Zero
out partitions array.
(fhandler_dev_floppy::open): Fix "entire disk" condition for call to
DeviceIoControl (FSCTL_ALLOW_EXTENDED_DASD_IO).
When opening disks for writing, call DeviceIoControl (FSCTL_LOCK_VOLUME)
on all affected disk partitions starting with Vista.
(fhandler_dev_floppy::close): New method.
(fhandler_dev_floppy::dup): Duplicate handles in partitions, if any.
* wincap.h (wincaps::has_restricted_raw_disk_access): New element.
* wincap.cc: Implement above element throughout.
with the tls.
* pinfo.cc (status_exit): Add debug output to report on unexpected exit.
* tls_pbuf.cc (tmp_pathbuf::c_get): Add more details to internal error.
* net.cc (get_flags): Set IFF_NOARP flag for PPP and SLIP devices.
(get_xp_ifs): Unify IFF_BROADCAST setting. Drop calling SendARP to
set IFF_NOARP flag.
(FS_IS_NETAPP_DATAONTAP): Drop test for FILE_PERSISTENT_ACLS.
(fs_info::update): Set filetype to ntfs in remote case, too. Fix a
couple of comments. Add test for Netapps faking to be FAT.
* mount.h (IMPLEMENT_FS_FLAG): Simplify definition and usage.
standard macro.
(lcl_is_set): Define as an enum.
(tzsetwall): Assign lcl_is_set to correct enum values.
(tzset): Ditto. Copy as much of TZ as will fit to TZ buffer.
closed since an fd may rely on a thread.
* fhandler_tty.cc: Reformat comment.
(fhandler_pty_master::pty_master_thread): Refuse ERROR_PIPE_CONNECTED state as
an error.
* globals.cc (exit_states): Reorder ES_THREADTERM.
* path.cc (find_fast_cwd_pointers): Remove excessively wordy DEBUGGING output.
* fhandler_console.cc (fhandler_console::open): Specify second argument to
tcinit.
* fhandler_termios.cc (fhandler_termios::tcinit): Rename second argument. Set
pgid to 0 if this is a pty master.
(fhandler_termios::tcgetpgrp): Just return value of pgid. It will be zero if
not initialized.
* fhandler_tty.cc (fhandler_tty_slave::open): Specify second argument to
tcinit.
(fhandler_tty_slave::ioctl): Implement TIOCGPRP/TIOCSPGRP. Fix switch
indentation.
(fhandler_tty_master::ioctl): Implement TIOCGPRP/TIOCSPGRP.
* include/sys/termios.h (TIOCGPGRP): Define similarly to Linux.
* include/sys/termios.h (TIOCSPGRP): Ditto.
* ntdll.h (struct _PEB): Add members accessed by the fast cwd method
starting with Vista.
(struct _KUSER_SHARED_DATA): Define with only the DismountCount.
(RtlAllocateHeap): Declare.
(RtlEnterCriticalSection): Declare.
(RtlFreeHeap): Declare.
(RtlLeaveCriticalSection): Declare.
* path.cc (get_user_proc_parms): Remove.
(struct _FAST_CWD): New structure.
(fast_cwd_ptr): Define.
(SharedUserData): Define.
(peek32): Define.
(find_fast_cwd_pointers): New function to find the global pointer
to the current FAST_CWD structure.
(copy_cwd_str): New helper function.
(cwdstuff::override_win32_cwd): New method to set the Win32 CWD.
(cwdstuff::init): Just call override_win32_cwd from here when
started from native Win32 parent.
(cwdstuff::set): Access Win32 CWD via PEB reference instead of using
get_user_proc_parms function. Memorize old DismountCount before
opening directory handle. Call override_win32_cwd to set up Win32 CWD.
Be more verbose in comments.
* wincap.h (wincaps::has_fast_cwd): New element.
* wincap.cc: Implement has_fast_cwd element throughout.
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Always check
executable suffix to get x-bits for .exe files also in notexec case.
Always reopen file when checking for file header.
* ntdll.h (wait_pending): Delete.
* path.cc (symlink_info::check_shortcut): Drop call to wait_pending
since file is always opened for sync IO.
(symlink_info::check_sysfile): Ditto.
(MIN_STAT_ACCESS): Remove.
(FULL_STAT_ACCESS): Remove.
(symlink_info::check): Drop access flag. Revert to open file with
just read attributes access. Reorder symlink check to check for
reparse points first. Don't check reparse points for anything else,
even on remote drives. Open file for GENERIC_READ when trying to
read shortcuts or system-bit symlinks. Accommodate dropped access
flag in call to path_conv_handle::set.
* path.h (class path_conv_handle): Drop access flag and accommodate
all related methods.
access mask is correct.
(ipc_cond_init): Take additional parameter to differ between send and
receive event. Call NtCreateEvent to make sure the access mask is
correct.
(ipc_cond_timedwait): Reset Event prior to calling WFMO.
(struct mq_info): Split mqi_wait into two events, mqi_waitsend and
mqi_waitrecv.
(mq_open): Calloc mqinfo. Create mqi_waitsend and mqi_waitrecv events.
Make sure all synchronization objects are closed in case of an error.
(_mq_send): Wait for mqi_waitsend event. Signal mqi_waitrecv event.
(_mq_receive): Wait for mqi_waitrecv event. Signal mqi_waitsend event.
(mq_close): Close mqi_waitsend and mqi_waitrecv events.
Just call nfs_fetch_fattr3 if called via fstat.
* nfs.cc (nfs_fetch_fattr3): New function to fetch NFS fattr3 info from
file handle.
* nfs.h (nfs_fetch_fattr3): Declare.
* path.cc (symlink_info::check): Simplify NFS case. Just call
nfs_fetch_fattr3.
* fhandler_disk_file.cc: Ditto.
(fhandler_base::fstat_by_nfs_ea): Use fattr3 from path_conv member,
unless called from fstat.
* path.cc: Drop including nfs.h.
(symlink_info::check): Rearrange definition of file info buffers.
Fetch fattr3 info for files on NFS and store in conv_hdl for later
use in fhandler_base::fstat_by_nfs_ea. Use fattr3 file type to
recognize symlink on NFS and try to fetch symlink target only for
actual symlinks.
* path.h: Include nfs.h.
(class path_conv_handle): Change file info storage to union of
FILE_NETWORK_OPEN_INFORMATION and fattr3 structures.
(path_conv_handle::fnoi): Align to aforementioned change.
(path_conv_handle::nfsattr): New method.
(path_conv::nfsattr): New method.
potentially set pgid since it is smarter about deciding if a process is in the
background.
* include/sys/cygwin.h (PID_ORPHANED): Actually delete as planned.
(PID_NOTCYGWIN): Correctly define.
* autoload.cc: Add all advapi32 entry points.
* mount.cc (mount_info::init): Read user fstab only if we have a
username.
* passwd.cc (pwdgrp::read_passwd): Only use username if we have one.
* shared.cc (user_info::initialize): Set cb last so as not to override
planned behaviour in pwdgrp::read_passwd.
* uinfo.cc (cygheap_user::init): Fetch Windows username from environment
variable $USERNAME. Don't set name in cygheap if variable is empty.
(internal_getlogin): If we still have no username, try GetUserNameW.