diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 574984e3c..74a026ee1 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,2078 +1,20 @@ -2013-12-31 Christopher Faylor - - * fhandler_console.cc (region_split): New function. - (delta): Ditto. - (ReadConsoleOutputWrapper): Ditto. - (fhandler_console::char_command): Use ReadConsoleOutputWrapper to avoid - OOM condition from ReadConsoleOutputW. Add more debugging. - -2013-12-22 Christopher Faylor - - * strace.cc (strace::vsprntf): Fix potential (if unlikely) use of - uninitialized variable. - -2013-12-18 Christopher Faylor - - * dcrt0.cc (dll_crt0_1): Remove NtSetTimerResolution. - * pinfo.cc (pinfo::init): Increase wait interval when waiting for - procinfo to stabilize. - -2013-12-17 Christopher Faylor - - * autoload.cc (timeBeginPeriod): Delete. - * dcrt0.cc (dll_crt0_1): Use NtSetTimerResolution rather than - timeBeginPeriod. - -2013-12-17 Christopher Faylor - - * autoload.cc (timeBeginPeriod): Autoload. - * dcrt0.cc (dll_crt0_1): Use timeBeginPeriod to set default resolution - to 1 ms. - * pinfo.cc (pinfo::thisproc): Set ppid for redirected _pinfo blocks too. - (pinfo::init): Avoid using VirtualQuery. Just rely on the assumption that - procinfo will be populated. - * pinfo.h (_pinfo::ppid): Move into redirected block. - -2013-12-17 Christopher Faylor - - * external.cc (fillout_pinfo): Remove nonsensical loop. - * fork.cc (frok::parent): When initializing pinfo for child new PID_NEW - flag + actual defined constant rather than raw number. Don't set - start_time here. - * pinfo.cc (pinfo::thisproc): Use PID_NEW when initializing pinfo. - Avoid checking h for NULL multiple times. Don't set start_time here. - (pinfo_init): Aways set ppid last. Tweak strace output. - (pinfo::init): Handle new PID_NEW flag. Wait for shared memory to - contain useful information. Set start_time if PID_NEW. - (_onreturn:h): Define as HANDLE rather than HANDLE *. - (_onreturn::~onreturn): Accommodate h definition change. - (_onreturn::no_close_handle): Rename from no_close_p_handle. Take a - pinfo arg and set hProcess to h before zeroing. - (winpids::add): Don't open a handle to our own process. Change logic - associated with when a handle gets closed. Accommodate no_close_handle - changes. - (winpids::enum_processes): Simplify process enumeration loop. - (winpids::set): Eliminate ill-considered malloc locking. - * sigproc.cc (proc_subproc): Always set ppid last. - -2013-12-17 Christopher Faylor - - * sigproc.cc (sig_send): Set PIPE_NOWAIT for pipes which are not us. - -2013-12-17 Christopher Faylor - - * fhandler.h (fhandler_pty_master::~fhandler_pty_master): Delete. - * fhandler_tty.cc (fhandler_pty_master::~fhandler_pty_master): Ditto. - -2013-12-11 Corinna Vinschen - - * syscalls.cc (NT_TRANSACTIONAL_ERROR): Define. - (stop_transaction): Take "trans" HANDLE by reference and set it to - NULL after closing it. - (unlink_nt): If NtOpenFile fails due to a transactional error, stop - transaction and retry NtOpenFile. Simplify check for having to call - stop_transaction. - (rename): If NtOpenFile fails due to a transactional error, stop - transaction and retry NtOpenFile in both affected cases. Simplify check - for having to call stop_transaction and add comment from unlink_nt. - -2013-12-11 Corinna Vinschen - - * mount.cc (fs_info::update): Fix formatting. - -2013-12-10 Corinna Vinschen - - * fhandler.h (fhandler_dev_clipboard): Add private member - cygnativeformat. Declare private method set_clipboard. - * fhandler_clipboard.cc (cygnativeformat): Convert static variable to - fhandler_dev_clipboard member. - (fhandler_dev_clipboard::set_clipboard): Convert from static function - to fhandler_dev_clipboard method. - -2013-12-09 Christopher Faylor - - * globals.cc (hntdll): Define/declare. - * exceptions.cc (inside_kernel): Don't call GetModuleFileName if we - know we're in ntdll. - * sigproc.cc (wait_sig): Initialize hntdll. - -2013-12-09 Corinna Vinschen - - * include/cygwin/stdlib.h (initstate, random, setstate, srandom): - Harden _XOPEN_SOURCE guard against applications defining _XOPEN_SOURCE - with empty value. - -2013-12-08 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 28. - -2013-12-07 Corinna Vinschen - - * path.cc (symlink_native): Workaround Windows 8.1 bug: Drop long path - prefix from symlink target path. Add comment to explain why. - -2013-12-06 Christopher Faylor - - * syscalls.cc (dup): Use cygheap_fdnew properly. - -2013-12-05 Christopher Faylor - - * cygheap.h (cygheap_fdnew): Avoid setting errno directly since it will - have been set by a previous function. - * dtable.h (dtable::extend): Accept second size_t argument. - * dtable.cc (dtable::extend): Accept second "min" argument which allows - checking for OPEN_MAX_MAX boundary conditions. - (dtable_init): Accommodate second argument to dtable::extend. - (dtable::find_unused_handle): Ditto. - * syscalls.cc (setdtablesize): Ditto. - (dup): Return any error passed by cygheap_fdnew() directly. - (getdtablesize): Just return dtable size directly. - -2013-12-04 Christopher Faylor - - * dtable.cc (dtable::find_unused_handle): When extending, always make - sure that there is a NOFILE_INCR chunk following the free fd. - -2013-12-03 Christopher Faylor - - * select.cc (select): Add workaround for, as yet undebugged, - pathological case. - -2013-12-01 Christopher Faylor - - * dtable.cc (dtable::find_unused_handle): Break out of the right loop. - -2013-12-01 Christopher Faylor - - * dtable.cc (dtable::find_unused_handle): Fix off-by-one error. Always - exit through the bottom. - (cygwin_attach_handle_to_fd): Make sure that fd tab is locked for the - duration of this function. - * dtable.h (dtable::lock): Make public. - (dtable::unlock): Ditto. - (dtable): Remove friends. - -2013-12-01 Corinna Vinschen - - * dtable.cc (dtable::extend): Change local variable new_size to size_t - as well. - - * thread.cc: Fix comment. - -2013-11-30 Christopher Faylor - - * dtable.h (dtable::first_fd_for_open): Change declaration to size_t. - (dtable::extend): Change parameter to size_t. - (dtable::find_unused_handle): Ditto. - * dtable.cc: Remove now-unused header. - (dtable::extend): Remove pointless test. Change parameter to size_t. - (dtable::find_unused_handle): Rework to avoid MAX calculation in - extend() call. Change parameter to size_t. - -2013-11-30 Christopher Faylor - - * dtable.cc (build_fh_pc): When creating an archetype, use native name - rather than unix name if name doesn't exist. - -2013-11-29 Christopher Faylor - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 27. - -2013-11-29 Jon TURNEY - - * include/cygwin/stdlib.h (initstate, random, setstate, srandom): - Prototype if not __STRICT_ANSI__ or _XOPEN_SOURCE is defined - appropriately. - -2013-11-28 Alexey Pavlov - - * include/glob.h: Fix invalid use of 'restrict' error. - -2013-11-27 Corinna Vinschen - - * syscalls.cc (try_to_bin): Enhance debug output in case reopen fails. - -2013-11-27 Corinna Vinschen - - * syscalls.cc (try_to_bin): Drop fh_dup, reuse tmp_fh instead. - -2013-11-27 Corinna Vinschen - - * syscalls.cc (try_to_bin): Take additional parameter to get file open - flags. If the file to move to the bin has been opened casesensitive, - reopen it caseinsensitive. Explain why. Revert the default name of - the Vista-and-later recycler to mixed case for readability. - (unlink_nt): Call try_to_bin with file open flags as evaluated. - -2013-11-26 Corinna Vinschen - - * nlsfuncs.cc (wcscoll): Add "__restrict" to definition. - (wcsxfrm): Ditto. - -2013-11-26 Corinna Vinschen - - * common.din: Export posix_spawn[...] functions. - * exec.cc (execve): Add EXPORT_ALIAS _execve. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - * posix.sgml (std-susv4): Add posix_spawn[...] here. - (std-notimpl): Drop here. - -2013-11-26 Corinna Vinschen - - * nlsfuncs.cc (strcoll): Add "__restrict" to definition. - (strxfrm): Ditto. - -2013-11-25 Corinna Vinschen - - Throughout, keep function definitions and declarations in sync with - newlib in terms of C99 "restrict" keyword. - -2013-11-24 Corinna Vinschen - - * dtable.cc: Include sys/param.h for MAX definition. - -2013-11-24 Corinna Vinschen - - Throughout, drop unnecessary explicit includes of windows header files - included by default. - * winlean.h: Add long comment to explain why we have to define certain - symbols. - (_NORMALIZE_): Define. - (_WINNLS_): Drop definition and subsequent undef. - (_WINNETWK_): Ditto. - (_WINSVC_): Ditto. - -2013-11-23 Eric Blake - - dup2: fix off-by-one crash - * dtable.cc (dup3): Fix off-by-one. - (find_unused_handle): Reduce time spent expanding during dup. - * syscalls.cc (setdtablesize): Report error on invalid value. - -2013-11-20 Corinna Vinschen - - * include/cygwin/stdlib.h (realpath): Drop declaration. It's declared - in newlib's stdlib.h now. - -2013-11-19 Corinna Vinschen - - * ntdll.h (RtlGetVersion): Declare. - * wincap.cc (wincapc::init): Rather than GetVersionEx, call - RtlGetVersion which is not crippled by missing Windows 8.1 manifest. - * wincap.h (wincapc): Change type of version to RTL_OSVERSIONINFOEXW. - Align formatting of all class members. - -2013-11-19 Corinna Vinschen - - * wincap.cc (wincapc::init): Revert previous change. It's not working. - -2013-11-19 Corinna Vinschen - - * net.cc (cygwin_getaddrinfo): Fix a comment. Only memset whints if - hints is NULL. Add a comment and set whints.ai_family explicitely to - AF_UNSPEC to follow glibc man page closely. Check flags against whints - for locality. - -2013-11-19 Corinna Vinschen - - * wincap.cc (wincapc::init): Fix dwMinorVersion for Windows 8.1 and - Server 2012. Explain why this is necessary. - -2013-11-19 Corinna Vinschen - - * autoload.cc (IdnToAscii): Define. - (IdnToUnicode): Define. - (FreeAddrInfoW): Define. - (GetAddrInfoW): Define. - (GetNameInfoW): Define. - * net.cc: Drop W. Richard STEVENS libgai implementation. - (cygwin_freeaddrinfo): Move code from ipv4_freeaddrinfo here. Move - definition up in file to avoid forward declaration in ga_duplist. - (ga_dup): Take addrinfoW as input. Add parameters to get IDN flags - and to set error value. Handle IDN flags and especially AI_CANONIDN. - Convert input wchar_t ai_canonname string to multibyte for output. - (ga_duplist): Add parameters to get IDN flags and to set error value - and propagate to ga_dup. Call cygwin_freeaddrinfo. - (gai_errmap): Add comments. Align error strings to GLibc. Add - EAI_IDN_ENCODE entry. - (get_ipv6_funcs): Remove. - (load_ipv6_guard): Remove. - (ipv6_inited): Remove. - (load_ipv6): Remove. - (load_ipv6_funcs): Remove. - (cygwin_getaddrinfo): Drop calling load_ipv6. Handle AI_IDN* flags. - Convert input strings to wchar_t and call GetAddrInfoW/FreeAddrInfoW. - In case hints is NULL, set default ai_flags explicitely to - AI_V4MAPPED | AI_ADDRCONFIG, as documented for Glibc. Only add AI_ALL - if AI_ADDRCONFIG is not given. Unconditionally add Windows-specific - AI_DISABLE_IDN_ENCODING to ai_flags to make IDN behaviour compatible - to Glibc even on Windows 8 and later. - (cygwin_getnameinfo): Drop calling load_ipv6. Handle NI_IDN* flags. - Call GetNameInfoW and convert returned strings from wchar_t to - multibyte. - * include/netdb.h: Add comments to describe flags and error values. - (AI_*): Define all flags using hex values for clearness. - (AI_IDN): Define. - (AI_CANONIDN): Define. - (AI_IDN_ALLOW_UNASSIGNED): Define. - (AI_IDN_USE_STD3_ASCII_RULES): Define. - (NI_*): Define all flags using hex values for clearness. - (NI_IDN): Define. - (NI_IDN_ALLOW_UNASSIGNED): Define. - (NI_IDN_USE_STD3_ASCII_RULES): Define. - (EAI_IDN_ENCODE): Define. - -2013-11-06 Christopher Faylor - - * configure.ac: Detect windows headers/libs after we've figured out the - C compiler. - * configure: Regenerate. - * aclocal.m4: Regenerate. - -2013-10-30 Corinna Vinschen - - * devices.in (dev_cygdrive_storage): Revert mapping to \Device\Null. - (dev_storage): Ditto for /dev. - * devices.cc: Regenerate. - * fhandler.cc (fhandler_base::open_null): New method to open a fake - \Device\Null handler. - (fhandler_base::open): Fix formatting. Change O_ACCMODE test to a - switch statement. Simplify a test which still tested for a now unused - create_disposition. - * fhandler.h (fhandler_base::open_null): Declare. - (fhandler_netdrive::close): Declare. - * fhandler_dev.cc (fhandler_dev::open): Open fake \Device\Null handle - by just calling new open_null method. - * fhandler_disk_file.cc (fhandler_cygdrive::open): Ditto. - * fhandler_netdrive.cc (fhandler_netdrive::open): Call open_null - rather than setting nohandle. - (fhandler_netdrive::close): New method. - * fhandler_registry.cc (fetch_hkey): Fix token in RegOpenUserClassesRoot - call. Create valid key for HKEY_CURRENT_CONFIG by mapping to real key - HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current. - (fhandler_registry::open): Set nohandle only when using pseudo registry - handle. - * fhandler_virtual.cc (fhandler_virtual::opendir): Call open rather - than just setting nohandle here. - * fhandler_virtual::fstatvfs): Set ST_RDONLY fs flag. - * globals.cc (ro_u_null): New readonly UNICODE_STRING for \Device\Null. - * path.h (path_conv::set_path): Revert previous change caring for - wide_path. - -2013-10-30 Corinna Vinschen - - * devices.in (dev_cygdrive_storage): Map to \Device\Null. - (dev_storage): Map /dev and /dev/windows to \Device\Null. - * devices.cc: Regenerate. - * dir.cc (opendir): Create unique id. Explain why. - * fhandler.h (fhandler_dev::get_dev): Implement inline. - (fhandler_cygdrive::close): Drop declaration. - (fhandler_cygdrive::get_dev): Implement inline. - (fhandler_windows::get_hwnd): Ditto. - (fhandler_windows::set_close_on_exec): Drop declaration. - (fhandler_windows::fixup_after_fork): Ditto. - * fhandler_dev.cc (fhandler_dev::open): Call fhandler_disk_file::open - without O_CREAT flag. Explain why. Create \Device\Null handle if - /dev/ doesn't actually exist. - (fhandler_dev::close): Drop nohandle case. - (fhandler_dev::fstatvfs): Drop nohandle check. Test for fs_got_fs - instead. Set ST_RDONLY fs flag for simulated /dev. - (fhandler_dev::opendir): If /dev doesn't exist, call open() to create - fake \Device\Null handle. Don't set nohandle. Set dir_exists - correctly. - (fhandler_dev::rewinddir): Call fhandler_disk_file::rewinddir only if - /dev is a real directory. - * fhandler_disk_file.cc (fhandler_disk_file::opendir): If called for - the cygdrive dir, call open() to create fake \Device\Null handle. - Only attach __DIR_mounts buffer to dir if not called for cygdrive dir. - Don't set nohandle. - (fhandler_cygdrive::open): Create \Device\Null handle. - (fhandler_cygdrive::close): Remove. - (fhandler_cygdrive::fstatvfs): Set ST_RDONLY fs flag. - * fhandler_windows.cc (fhandler_windows::open): Create \Device\Null - handle. - (fhandler_windows::read): Don't add io_handle to WFMO handle array. - Change subsequent test for return value accordingly. Fix test for - "message arrived". - (fhandler_windows::set_close_on_exec): Remove. - (fhandler_windows::fixup_after_fork): Remove. - * path.h (path_conv::set_path): Make sure wide_path is NULL when - setting a new path. - * select.cc (peek_windows): Use correct hWnd value, not io_handle. - (fhandler_windows::select_read): Don't use io_handle as wait object. - (fhandler_windows::select_write): Ditto. - (fhandler_windows::select_except): Ditto. - -2013-10-27 Corinna Vinschen - - * exception.h: Fold in content of include/exceptions.h. - * include/exceptions.h: Remove. - -2013-10-26 Corinna Vinschen - - * devices.in (dev_storage): Map /dev/dsp to \Device\Null. - * devices.cc: Regenerate. - * fhandler_dsp.cc (fhandler_dev_dsp::open): Call fhandler_base::open. - (fhandler_dev_dsp::close): Call fhandler_base::close. - (fhandler_dev_dsp::fixup_after_fork): Call - fhandler_base::fixup_after_fork. - - * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Call - fhandler_base::fixup_after_fork. - -2013-10-26 Corinna Vinschen - - * exception.h (_exception_list): Drop redefinition for x86_64. - * include/exceptions.h: Disable content for x86_64 since it's not - using frame based exception handling anymore. - -2013-10-25 Corinna Vinschen - - * flock.cc (fhandler_base::lock): Only refuse to lock nohandle and - old-style console devices when called to perform BSD flock locking. - Add a FIXME to comment and align description. - - * ntdll.h (THREADINFOCLASS): Following MSDN, rename throughout from - THREAD_INFORMATION_CLASS. - -2013-10-25 Corinna Vinschen - - * devices.in (dev_storage): Map /dev/clipboard to \Device\Null. - * devices.cc: Regenerate. - * fhandler.h (fhandler_dev_clipboard::open): Drop declaration. - * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Drop call to - open. Set private members to 0 and call fhandler_base::dup. - (fhandler_dev_clipboard::open): Remove so that default - fhandler_base::open is used to open \Device\Null. - (set_clipboard): Drop gratuitios call to RegisterClipboardFormatW. - (fhandler_dev_clipboard::close): Call fhandler_base::close from here. - -2013-10-25 Corinna Vinschen - - * fhandler_disk_file.cc (fhandler_base::fstat_fs): Fix comment. - -2013-10-25 Corinna Vinschen - - * fhandler_clipboard.cc (fhandler_dev_clipboard::open): Drop gratuitios - handling of membuffer. It's NULL anyway. - (fhandler_dev_clipboard::lseek): Set membuffer to NULL after freeing - it to avoid subsequent crashes when accessing invalid pointer. - -2013-10-25 Corinna Vinschen - - * devices.in (dev_storage): Map /dev/random and /dev/urandom to - \Device\Null. - * devices.cc: Regenerate. - * fhandler.h (fhandler_dev_random::open): Drop declaration. - (fhandler_dev_random::close): Ditto. - (fhandler_dev_random::crypt_gen_random): Convert to static method. - * fhandler_random.cc (fhandler_dev_random::open): Remove so that default - fhandler_base::open is used to open \Device\Null. - (fhandler_dev_random::close): Ditto. - * fhandler_socket.cc (entropy_source): Delete. - (fhandler_socket::af_local_set_secret): Remove entropy_source code and - call fhandler_dev_random::crypt_gen_random directly instead. - -2013-10-24 Corinna Vinschen - - * fhandler.h (fhandler_dev_zero::lseek): Convert to inline method. - (class fhandler_dev_random): Drop dummy_offset. - (fhandler_dev_random::lseek): Convert to inline method. - (fhandler_dev_dsp::lseek): Ditto. - * fhandler_dsp.cc (fhandler_dev_dsp::lseek): Drop here. - * fhandler_random.cc (fhandler_dev_random::open): Drop setting - dummy_offset. - (fhandler_dev_random::lseek): Drop here. - * fhandler_tape.cc (fhandler_dev_tape::lseek): Make no-op, but keep - old code for reference. - * fhandler_zero.cc (fhandler_dev_zero::lseek): Drop here. - -2013-10-24 Christopher Faylor - - * external.cc (fillout_pinfo): If start_time is 0, wait a while before - returning the pinfo structure. - - * fhandler.cc (fhandler_base::open_setup): Convert from inline. - * fhandler.h (fhandler_base::open_setup): Declare. - * fhandler_console.cc (fhandler_console::open_setup): Always call - fhandler_base::open_setup. - * fhandler_tty.cc (fhandler_pty_slave::open_setup): Ditto. - (fhandler_pty_master::open_setup): Ditto. - -2013-10-24 Corinna Vinschen - - * devices.in (dev_storage): Map /dev/zero and /dev/full to \Device\Null. - * devices.cc: Regenerate. - * dtable.h (struct dtable): Make fhandler_base friend, rather - than fhandler_disk_file. - * fhandler.cc (fhandler_base::open_with_arch): Create unique id. - (fhandler_base::cleanup): Call del_my_locks. - (fhandler_base::fcntl): Handle F_GETLK, F_SETLK and F_SETLKW. - * fhandler.h (fhandler_base::get_dev): Return real device number. - (fhandler_base::set_unique_id): New inline method. - (fhandler_disk_file::lock): Drop declaration. - (fhandler_disk_file::get_dev): New method, return pc.fs_serial_number. - (fhandler_dev_zero::open): Drop declaration. - * fhandler_disk_file.cc (fhandler_disk_file::close): Move - del_my_locks call to fhandler_base::open_with_arch. - (fhandler_disk_file::fcntl): Move handling of locking commands to - fhandler_base::fcntl. - (fhandler_base::open_fs): Drop call to NtAllocateLocallyUniqueId. - * fhandler_zero.cc (fhandler_dev_zero::open): Remove so that default - fhandler_base::open is used to open \Device\Null. - * flock.cc (fixup_lockf_after_exec): Finding a single fhandler is - enough here. - (fhandler_base::lock): Replace fhandler_disk_file::lock. Refuse to lock - nohandle devices. Handle read/write test using POSIX flags. Explain - why. Never fail on SEEK_CUR or SEEK_END, rather assume position 0, - just as Linux. - * net.cc (fdsock): Create unique id. - -2013-10-23 Corinna Vinschen - - * include/cygwin/config.h (_READ_WRITE_BUFSIZE_TYPE): Define. - -2013-10-23 Corinna Vinschen - - * fhandler.cc (fhandler_base::fstat): Drop FH_FULL case to align - /dev/full permissions to Linux. - -2013-10-22 Christopher Faylor - - * fhandler.h (fhandler_base::cleanup): Mark as extern rather than - inline. - * fhandler_base.cc (fhandler_base::cleanup): Define. - * fhandler_tty.cc (fhandler_pty_slave::cleanup): Call fhandler_base::cleanup. - (fhandler_pty_master::cleanup): Ditto. - -2013-10-18 Christopher Faylor - - * fhandler_termios.cc (tty_min::kill_pgrp): Don't send a signal to - myself if this process is exiting. - -2013-10-18 Christopher Faylor - - * tty.cc (tty_list::allocate): Set sid to 0 rather than -1 since -1 is - an error condition. - -2013-10-16 Corinna Vinschen - - * fhandler_process.cc (format_process_ctty): Fix random content of - /proc/$PID/ctty if the process has no controlling tty. Set to just - "\n" instead. - -2013-10-15 Corinna Vinschen - - * autoload.cc (CryptAcquireContextW): Remove. - (CryptGenRandom): Remove. - (CryptReleaseContext): Remove. - (SystemFunction036): Define. Add comment to explain that this is - actually the RtlGenRandom function. - * fhandler.h (class fhandler_dev_random): Drop crypt_prov member. - (fhandler_dev_random::fhandler_dev_random): Define inline. - (fhandler_dev_random::dup): Drop declaration. - * fhandler_random.cc (fhandler_dev_random::fhandler_dev_random): Remove - here. - (fhandler_dev_random::crypt_gen_random): Use RtlGenRandom to drop - dependency to old Crypto API. - (fhandler_dev_random::read): Implement an enhanced version of reading - random bytes from RtlGenRandom for the sake of a better /dev/random - emulation. - (fhandler_dev_random::close): Just return 0 since crypt_prov doesn't - exisyt anymore. - (fhandler_dev_random::dup): Drop entirely for the same reason. - -2013-10-15 Corinna Vinschen - - * mmap.cc (mmap64): Convert pagesize from DWORD to size_t to avoid - a rounding error for allocations beyond 4 Gigs. - -2013-10-05 Christopher Faylor - - * ntdll.h: Guard against new header files. - -2013-09-25 Christopher Faylor - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 26. - -2013-09-25 Christopher Faylor - - * sigproc.h (hold_everything::ischild): Declare as reference. - (hold_everything::hold_everything): Store address of caller's notion of - "ischild". - -2013-09-25 Christopher Faylor - Paul Kunysch - - * thread.cc (semaphore::_getvalue): Set *sval as appropriate. Set - errno and return -1 on error. - -2013-08-31 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Belatedly bump - to 25. - -2013-08-31 Corinna Vinschen - - * heap.cc (RAISEHEAP_SIZE): New definition. - (user_heap_info::sbrk): Make failed commit an error condition again. - Only reserve RAISEHEAP_SIZE sized chunk for further heap reservations - by default. - -2013-08-30 Christopher Faylor - - * cygheap.h (user_heap_info::sbrk): Declare new function. - (user_heap_info::init): Ditto. - * heap.cc (user_heap_info::init): Rename from heap_init(). Avoid - explictly using cygheap->user_heap. - (sbrk): Use user_heap_info method via cygheap->user_heap. - (user_heap_info::sbrk): Renamed from sbrk(). Eliminate explicit use of - cygheap->user_heap. Change some pointer arithmetic to use (char *) for - consistency. - * shared.cc (shared_info::initialize): Change heap_init call to - cygheap->user_heap.init. - -2013-08-30 Corinna Vinschen - - * heap.cc (sbrk): Add a FIXME comment to VirtualFree call. Fix memory - reservation and commit strategy when more memory is requested than - available on the heap. Release newly reserved memory if commiting - it fails. Add more comments to explain what we do. - -2013-08-30 Corinna Vinschen - - * fhandler_tape.cc (mtinfo_drive::open): Handle bus reset gracefully - after opening the device. - -2013-08-30 Christopher Faylor - - * sigproc.cc (pending_signals::add): Properly maintain linked list. - (wait_sig): Use already calculated 'next' element when signal is - blocked. - -2013-08-26 Corinna Vinschen - - * mtinfo.h (class mtinfo_part): Change type of block numbers to int64_t. - (mtinfo_part::initialize): Ditto for nblock parameter in declaration. - (class mtinfo_drive): Change type of block number to int64_t. Change - all parameters indicating a block number to int64_t in method - declarations. - * fhandler_tape.cc (mtinfo_part::initialize): Ditto in definition. - (mtinfo_drive::get_pos): Ditto. Replace low and high with a - ULARGE_INTEGER and use it's components in call to GetTapePosition. - Store full value in block. - (mtinfo_drive::_set_pos): Change type of count parameter to int64_t. - Change call to SetTapePosition accordingly. - (mtinfo_drive::set_pos): Change type of count parameter to int64_t. - Change local variables holding block numbers accordingly. - (mtinfo_drive::get_status): Don't bail out early if fetching media - parameters fails. - (mtinfo_drive::ioctl): Add explicit cast matching receiving type in - MTTELL and MTIOCPOS calls. - -2013-08-23 Corinna Vinschen - - * flock.cc (lockf_t::from_obj_name): Fix test for valid pid. - -2013-08-23 Christopher Faylor - - * spawn.cc (child_info_spawn): Revert previous change. Always set - lpReserved2. - -2013-08-23 Christopher Faylor - - * child_info.h (PROC_MAGIC_GENERIC): Define differently for x86 vs. - x86_64. - -2013-08-23 Corinna Vinschen - - * path.h (enum path_types): Drop definition of PATH_64BITEXEC. - (path_conv::iscygexec32): Drop unused inline function. - (path_conv::iscygexec64): Ditto. - (path_conv::set_cygexec): Remove unnecessary setting of PATH_64BITEXEC. - * spawn.cc (child_info_spawn::worker): Disable setting of - STARTUPINFOW::lpReserved2 and STARTUPINFOW::cbReserved2 for non-Cygwin - child processes. Explain why. - -2013-08-21 Corinna Vinschen - - * fhandler_tape.cc (mtinfo_drive::create_partitions): Allow partitioning - of drives supporting select partitions. - (mtinfo_drive::get_status): Fill in current partition and number of - partitions on tape into mt_resid. - * include/cygwin/mtio.h (struct mtget): Align mt_resid comment to - aforementioned change. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - -2013-08-20 Corinna Vinschen - - * fhandler_tape.cc (mtinfo_drive::create_partitions): Fix long-standing - bug disabling creation of two partitions on drives supporting initiator - partitions. - (mtinfo_drive::set_blocksize): Update media information after setting - blocksize succeeded. - (mtinfo_drive::get_status): Fetch fresh media information. - -2013-08-19 Corinna Vinschen - - * lc_msg.h: Regenerate. - * nlsfuncs.cc (__get_lcid_from_locale): Update list of Script-only - locales to Windows 8. - (__set_charset_from_locale): Take locales added with Windows 8 and 8.1 - into account. - -2013-08-19 Corinna Vinschen - - * fhandler_tape.cc (mtinfo_drive::set_pos): Remove unneeded linebreak. - (mtinfo_drive::get_status): Drop using get_ll when it's not required. - -2013-08-14 Corinna Vinschen - - * include/sys/cygwin.h (struct per_process): Add posix_memalign. Reduce - size of unused2 accordingly. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Initialize - u->posix_memalign with address of posix_memalign. - * malloc_wrapper.cc (posix_memalign): Call user-provided posix_memalign - rather than just returning ENOSYS. - * globals.cc (__cygwin_user_data): Initialize posix_memalign member. - -2013-08-09 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 24. - -2013-08-07 Corinna Vinschen - - * fhandler_disk_file.cc (fhandler_base::open_fs): Fix indentation. - -2013-07-31 Christopher Faylor - - * fhandler_tty.cc: Revert accidental checkin. - * update-copyright: Ditto. - -2013-07-31 Christopher Faylor - - * cygheap.cc (cmalloc): Use size_t for size field. - (cmalloc_abort): Ditto. - (crealloc): Ditto. - (crealloc_abort): Ditto. - (ccalloc): Ditto. - (ccalloc_abort): Ditto. - * cygheap_malloc.h (HEAP_USER): Add. - (cmalloc): Use size_t for size field in declaration. - (cmalloc_abort): Ditto. - (crealloc): Ditto. - (crealloc_abort): Ditto. - (ccalloc): Ditto. - (ccalloc_abort): Ditto. - -2013-07-31 Corinna Vinschen - - * path.cc (normalize_posix_path): Don't check existence of / or // dir - in parent dir check. - -2013-07-26 Christopher Faylor - - * environ.cc (tty_is_gone): Delete. - (known): Delete tty, add wincmdln. - * globals.cc: Reorganize list of environment bools, remove explicit = - false for slight load time optimization. - (wincmdln): New global. - * spawn.cc (child_info_spawn::worker): Honor wincmdln. - -2013-07-23 Corinna Vinschen - - * ntdll.h (struct _SEMAPHORE_BASIC_INFORMATION): Define. - (enum _SEMAPHORE_INFORMATION_CLASS): Define. - (NtQuerySemaphore): Declare. - * thread.h (class semaphore): Add member startvalue. - (semaphore::fixup_before_fork): New inline method. - (semaphore::_fixup_before_fork): Declare. - * thread.cc (MTinterface::fixup_before_fork): Additionally call - semaphore::fixup_before_fork. - (semaphore::semaphore): Set currentvalue to -1. Set startvalue to - incoming initializer value. - (semaphore::_getvalue): Just query semaphore using NtQuerySemaphore - rather then using WFSO/Release. - (semaphore::_post): Drop setting currentvalue. It's not thread-safe. - (semaphore::_trywait): Ditto. - (semaphore::_timedwait): Ditto. - (semaphore::_wait): Ditto. - (semaphore::_fixup_before_fork): New method, setting currentvalue from - actual windows semaphore right before fork. - (semaphore::_fixup_after_fork): Drop kludge from 2013-07-10. Drop - FIXME comment. - -2013-07-23 Corinna Vinschen - - * cygtls.cc (well_known_dlls): Add kernelbase.dll. - -2013-07-22 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 23. - -2013-07-21 Corinna Vinschen - - * regex/regcomp.c (wgetnext): Add a kludge to be more glibc compatible. - Add comment to explain. - -2013-07-20 Christopher Faylor - - * exceptions.cc (signal_exit): Remove comment. Use - __builtin_frame_address. - -2013-07-20 Christopher Faylor - - * exceptions.cc (signal_exit): Nope. Nevermind. Dump core - unconditionally. - -2013-07-19 Christopher Faylor - - * exceptions.cc (signal_exit): Add a FIXME comment. - -2013-07-19 Christopher Faylor - - * exceptions.cc (signal_exit): Only dump core when it's a "kernel" - signal. Only use RtlCaptureContext on x86_64. It doesn't seem to do - what's expected on x86. - -2013-07-19 Christopher Faylor - - * spawn.cc (child_info_spawn::worker): Reinstate using temp buffer for - wide character command-line storage. Use wcs method to convert command - line. - * winf.h (lb_wcs): Delete. - (linebuf::wcs): Implement new single-argument method. - -2013-07-19 Christopher Faylor - - * lib/libcmain.c (main): Don't point to last quoted character if the - only thing in the buffer is the program name. - -2013-07-19 Christopher Faylor - - * common.din: Export GetCommandLine{A,W}. - * kernel32.cc: Add includes needed for GetCommandLine functions. - (ucmd): New function. - (cygwin_GetCommandLineW): Ditto. - (cygwin_GetCommandLineA): Ditto. - * spawn.cc (child_info_spawn::worker): Rename one_line -> cmd. Use - lb_wcs macro to generate a wide character version of the line buffer. - Remove duplicate printing of command line. Don't access members of - linebuf directly. - * winf.h: Use pragma once. - (linebuf): Make storage private. - (linebuf::operator size_t): New operator. Return size of buf. - (linebuf::operator wchar_t): New operator. - (linebuf::wcs): New function. - (lb_wcs): New macro. - * include/cygwin/version.h: Bump API minor number to 268. - - * strfuncs.cc: Clarify descriptive file comment. - -2013-07-19 Corinna Vinschen - - * cygtls.cc (_cygtls::remove): Close cw_timer handle, thus avoiding - handle leak. - -2013-07-19 Jon TURNEY - - * cygserver_ipc.h (ipc_retval::ipc_retval): Take ssize_t as argument - to make sure entire ipc_retval union is initialized on all supported - platforms. - -2013-07-18 Corinna Vinschen - - * path.cc (normalize_posix_path): Start checking path before ".." at - dst, rather than at dst_start, otherwise suffer loss of one leading - slash in case of UNC paths. - -2013-07-17 Christopher Faylor - - * winsup.h (cygbench): Fix declaration to match definition. - * dcrt0.cc (initial_env): Remove unused variable. - -2013-07-15 Corinna Vinschen - - Remove /dev/mem, /dev/kmem, /dev/port support. - * Makefile.in (DLL_OFILES): Drop fhandler_mem.o. - (fhandler_mem_CFLAGS): Remove rule. - * devices.in (enum fh_devices): Remove FH_MEM, FH_KMEM and FH_PORT. - * devices.cc: Regenerate. - * dtable.cc (fh_alloc): Drop handling for FH_MEM, FH_KMEM and FH_PORT. - * fhandler.h (class fhandler_dev_mem): Remove. - * fhandler_mem.cc: Remove file. - * globals.cc (ro_u_pmem): Remove. - * mmap.cc (fhandler_dev_mem::mmap): Remove. - (fhandler_dev_mem::munmap): Remove. - (fhandler_dev_mem::fixup_mmap_after_fork): Remove. - -2013-07-15 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 22. - -2013-07-15 Corinna Vinschen - - * path.cc (symlink_native): Fix common prefix search. Enhance comment. - -2013-07-11 Corinna Vinschen - - * uname.cc (uname): Drop unused code. - -2013-07-10 Christopher Faylor - - * gentlsoffsets: Clean up a little. - - * thread.cc (semaphore::_fixup_after_fork): Report on potential problem - parameter. Make sure that currentvalue is never zero. - (semaphore::init): Make cosmetic change. - -2013-07-10 Corinna Vinschen - - * cygwin.sc.in (.text.*): Fold into .text on all platforms. - (.eh_frame): Add section. - * environ.cc (my_findenv): Drop __stdcall attribute. - (getearly): Ditto. - (findenv_func): Drop cast. - -2013-07-03 Christopher Faylor - - * fhandler.cc (fhandler_base::close_with_arch): Make sure that the - archetype is deleted when close_with_arch is referenced *via* the - archetype. - -2013-06-28 Corinna Vinschen - - * path.cc (find_fast_cwd_pointer): Use gas syntax for assembler - description in all comments. Make algorithm work on Windows 8.1 - Preview. - -2013-06-27 Corinna Vinschen - - * dcrt0.cc (child_info_fork::alloc_stack): Fix a comparison to avoid - taking 4K more stack in forked child. - * fork.cc (frok::parent): Print child exit code in hex if sync failed. - -2013-06-24 Yaakov Selkowitz - - * common.din (rawmemchr): Export. - * posix.sgml (std-gnu): Add rawmemchr. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - -2013-06-21 Corinna Vinschen - - * path.cc (cygwin_conv_path): Handle NULL "from" path gracefully. - * path.sgml (func-cygwin-conv-path): Document returning EINVAL if - "from" is NULL. - -2013-06-19 Christopher Faylor - - * winf.h (av::unshift): Make __reg2. - -2013-06-19 Christopher Faylor - - * spawn.cc (child_info_spawn::worker): Eliminate call to newargv.set() - in favor of conglomerated newargv.setup(). Let newargv.setup() decide - when to call dup_all(). Only set argc and argv for cygwin processes. - (av::setup): Rename from av::fixup. Accept argc and argv parameters. - Fill out argv and argc here. Duplicate whole argv structure when this - is a Cygwin executable. - * winf.cc (linebuf::fromargv): Don't bother duplicating argv elements - since they will never be used. - * winf.h (av::set): Delete. - (av::setup): Rename from av::fixup. Add two parameters. - (av::replace0_maybe): Assign calloced to 1 rather than 'true' for - clarity. - (av::dup_maybe): Delete. - (av::dup_all): Set calloced to show that we have duplicated all of the - arguments in the list. - -2013-06-18 Corinna Vinschen - - * nlsfuncs.cc (__collate_range_cmp): Convert input to wchar_t and call - wcscoll since all calling functions are using wide chars. Explain in - preceeding comment. - -2013-06-18 Corinna Vinschen - - * spawn.cc (child_info_spawn::worker): Eliminate wascygexec. - -2013-06-18 Christopher Faylor - - * dcrt0.cc (child_info_fork::alloc_stack): Don't subtract 4096 from - stack pointer since getstack() already does that. - -2013-06-18 Corinna Vinschen - - * gmon.c: Drop gratuitous inclusion of strings.h. Remove __MINGW32__ - around definition of bzero. - -2013-06-18 Corinna Vinschen - - * Makefile.in (VPATH): Drop CONFIG_DIR. - (EXTRA_DLL_OFILES): Remove. - (DLL_OFILES): Remove EXTRA_DLL_OFILES. - (ASFLAGS): Define as -D_WIN64 on x86_64. - (GMON_OFILES): Add mcountFunc.o. - ($(srcdir)/$(TLSOFFSETS_H)): Use target_cpu rather than CONFIG_DIR. - * configure.ac (CONFIG_DIR): Remove definition. - * configure: Regenerate. - * gcrt0.c: Use latest version from Mingw-w64 project. - * gmon.c: Ditto. - * gmon.h: Ditto. - * mcount.c: Ditto. - * mcountFunc.S: Ditto, new file. - * profil.c: Ditto. - * profil.h: Ditto. - * config: Remove entire directory. - -2013-06-17 Corinna Vinschen - - * path.cc (cnt_bs): New inline function. - (symlink_native): Fix creating relative native symlink. - -2013-06-17 Corinna Vinschen - - * fhandler_clipboard.cc (fhandler_dev_clipboard::read): Fix buffer - read access overrun when pos > 0. - -2013-06-17 Corinna Vinschen - - * times.cc (GetSystemTimePreciseAsFileTime): Add comment to declaration. - (__to_clock_t): Remove a debug_printf. - (times): Align syscall_printf to debug output of other system calls. - -2013-06-14 Corinna Vinschen - - * autoload.cc (GetSystemTimePreciseAsFileTime): Define. - * times.cc (GetSystemTimePreciseAsFileTime): Temporarily declare here - to workaround missing definition in 32 bit w32api headers. - (get_system_time): New always inline function to call either - GetSystemTimePreciseAsFileTime or GetSystemTimeAsFileTime on a per OS - basis. Call throughout instead of GetSystemTimeAsFileTime. - * wincap.h (wincaps::has_precise_system_time): New element. - * wincap.cc: Implement above element throughout. - -2013-06-14 Corinna Vinschen - - Streamline time/times functionality. Remove last remains of former - Windows 9x compatibility. - * fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop now unneeded - casts in calls to_timestruc_t. - (fhandler_base::utimens_fs): Ditto for timespec_to_filetime. - * fhandler_proc.cc (format_proc_stat): Ditto for to_time_t. - * hires.h (class hires_ms): Remove unused member initime_ns. - Remove declarations for timeGetTime_ns and prime. - (hires_ms::uptime): Remove. - * posix_ipc.cc (ipc_cond_timedwait): Ditto for timespec_to_filetime. - * fhandler_registry.cc (fhandler_registry::fstat): Add cast. - * resource.cc (fill_rusage): Call NtQueryInformationProcess rather than - GetProcessTimes to deal with LARGE_INTEGER rather than FILETIME. - * times.cc: Simplify time handling. Throughout, use LARGE_INTEGER - rather than FILETIME to simplify computations. Throughout use - {u}int64_t rather than {unsigned} long long. Drop unneeded casts since - NSPERSEC is 64 bit anyway. - (systime_ns): Remove. - (times): Call NtQuerySystemInformation to fetch boot time. Call - NtQueryInformationProcess rather than GetProcessTimes to deal with - LARGE_INTEGER rather than FILETIME. Call GetSystemTimeAsFileTime. - (totimeval): Use constant 1000000 as in other functions. - (time_t_to_filetime): Remove. - (to_time_t): Change return type to time_t. - (time_as_timestruc_t): Rename filetime to systime. - (time): Ditto. Add cast. - (hires_ns::nsecs): Fix return type cast. - (hires_ms::timeGetTime_ns): Remove. - (hires_ns::prime): Remove. - (hires_ms::nsecs): Drop call to prime. Call GetSystemTimeAsFileTime - directly. Subtract FACTOR here since it's the only function needing - to do so. - (minperiod): Cosmetically change to ULONG. - (hires_ns::resolution): Fix return type cast. - (hires_ms::resolution): Simplify, rely on NtQueryTimerResolution. - * winsup.h: Align time related prototypes to above changes. - -2013-06-13 Corinna Vinschen - - * net.cc (gen_old_if_name): New function to generate short interface - names for old pre-1.7 applications. - (get_ifs): Call gen_old_if_name for said old applications. - -2013-06-13 Corinna Vinschen - - * posix.sgml (fcntl, flock, lockf): Point to implementation notes. - -2013-06-12 Fedin Pavel - - * path.cc (normalize_posix_path): Fix long-standing problem which - allows to access files via ".." using an invalid POSIX path. - -2013-06-11 Corinna Vinschen - - * winver.rc (FileDescription): Remove (R). - -2013-06-10 Corinna Vinschen - - * sec_auth.cc (get_user_groups): Don't handle ERROR_ACCESS_DENIED as - error. Explain why. - -2013-06-08 Christopher Faylor - - * exceptions.cc (try_to_debug): Don't use yield() when waiting for - another process. - (sigpacket::setup_handler): Fix long-standing problem where loop could - exit with lock held. - -2013-06-08 Christopher Faylor - - * miscfuncs.cc (yield): Revert (after researching) to calling Sleep - with 0. We don't want to actually sleep when calling this function. - -2013-06-08 Christopher Faylor - - * cygwait.cc (cygwait): Remove lock around sig retrieval since this - code is essentially guarded by thread-specific signal_arrived. - * exceptions.cc (_cygtls::handle_SIGCONT): Simplify. Eliminate - lock/unlock since code is guarded by signal_arrived. - -2013-06-07 Corinna Vinschen - - * winver.rc (LegalCopyright): Belatedly bump to 2013. - -2013-06-07 Christopher Faylor - - * exceptions.cc (_cygtls::handle_SIGCONT): Reinstate previous behavior - but make sure that yield() isn't called when signal stack is locked. - -2013-06-07 Christopher Faylor - - * exceptions.cc (exception::handle): Add comment explaining si_addr - behavior. - -2013-06-07 Christopher Faylor - - * DevNotes: Add entry cgf-000023. - * sigproc.cc (exit_thread): Remove now-unneeded sleep code. - -2013-06-07 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 21. - -2013-06-07 Corinna Vinschen - - * posix.sgml (std-notes): Fix typo. - -2013-06-07 Corinna Vinschen - - * fhandler_disk_file.cc (fhandler_disk_file::pread): Skip to non-atomic - code if mandatory locking is used on this descriptor. Explain why. - (fhandler_disk_file::pwrite): Ditto. - * posix.sgml (std-notes): Extend description of file locking. - -2013-06-06 Corinna Vinschen - - * exceptions.cc (_cygtls::handle_SIGCONT): Simplify loop waiting for - sig_handle_tty_stop to wake up. Make sure to unlock before calling - yield to avoid starvation of sig_handle_tty_stop. Add comments. - * miscfuncs.cc (yield): Explain why yield should never be called under - _cygtls::lock conditions. Call SleepEx with 1ms timeout. Explain why. - -2013-06-05 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 20. - -2013-06-04 Corinna Vinschen - - * fhandler.cc (fhandler_base::lock): Move to flock.cc. - (fhandler_base::fixup_after_exec): Reset mandatory_locking. - * fhandler.h (class fhandler_base): Add mandatory_locking status flag. - Add mandatory_locking accessor methods. Accommodate change throughout. - (fhandler_base::mand_lock): Declare. - (class fhandler_disk_file): Drop in favor of new status flag. - * (fhandler_disk_file::fcntl): Call need_fork_fixup if mandatory_locking - flag gets set. - * flock.cc (fhandler_base::lock): Define here. - (flock): Handle mandatory_locking. - (lockf): Ditto. - (fhandler_base::mand_lock): Define. - -2013-06-03 Corinna Vinschen - - * sigproc.cc (exit_thread): Allow to exit the thread while running - global dtors. Explain why. - -2013-06-02 Corinna Vinschen - - * autoload.cc (CancelSynchronousIo): Define. - * fcntl.cc (fcntl64): Drop handling of locking commands. - * fhandler.h (class fhandler_disk_file): Add mandatory_locking. - (fhandler_disk_file::fcntl): Declare. - (fhandler_disk_file::mand_lock): Declare. - * fhandler_disk_file.cc (fhandler_disk_file::fhandler_disk_file): - Initialize mandatory_locking. - (fhandler_disk_file::fcntl): New method. Handle F_LCK_MANDATORY and - locking commands. - (fhandler_disk_file::dup): Duplicate mandatory_locking. Fix a bug - when duplicating prw_handle failed. - (fhandler_disk_file::fixup_after_fork): Reset mandatory_locking. - * flock.cc (fhandler_disk_file::lock): Add comment. - (struct lock_parms): New struct to pass parameters to blocking_lock_thr - thread function. - (blocking_lock_thr): New thread function. - (fhandler_disk_file::mand_lock): New methof implementing mandatory - locking with Windows semantics. - * ntdll.h (NtLockFile): Declare. - (NtUnlockFile): Declare. - * include/fcntl.h: Fix a comment. - (F_LCK_MANDATORY): Define. Add lengthy comment to explain. - -2013-06-02 Corinna Vinschen - - * exceptions.cc (exception::handle): Resurrect accidentally lost - patch from 2009-07-22: Set si_addr according to POSIX for SIGSEGV. - -2013-05-31 Corinna Vinschen - - * include/sys/socket.h: Move SHUT_xx definitions from here... - * include/cygwin/socket.h: ...to here. - -2013-05-31 Corinna Vinschen - - * include/cygwin/if.h: Include cygwin/socket.h rather than sys/socket.h - to avoid circular dependency resulting in bogus compile time warnings. - -2013-05-28 Corinna Vinschen - - * fhandler_procsys.cc (fhandler_procsys::read): Just call - fhandler_base::raw_read from here. Drop comment. - (fhandler_procsys::write): Drop comment. - -2013-05-27 Corinna Vinschen - - * dll_init.cc (dll_list::topsort): Fix early-return condition to - accommodate process with all runtime loaded DLLs already dlclosed - at fork time. - * gendef (_sigfe_maybe): Fix code handling early return if we don't - have a tls, broken on 2013-05-21. - -2013-05-24 Corinna Vinschen - - * Makefile.in (DEFS): Unused, remove. - (COMPILE.cc): Move -mno-use-libstdc-wrappers flag from here... - ($(TEST_DLL_NAME)): ...to here since it's a link time flag. - -2013-05-24 Corinna Vinschen - - * pinfo.cc (pinfo::status_exit): Enhance comment. - -2013-05-24 Corinna Vinschen - - * environ.cc (win_env::add_cache): Set the Windows environment variable - using wide chars to make sure native chars don't get scrambled. - * environ.h (build_env): Fix formatting in declaration. - * pinfo.cc (pinfo::status_exit): Handle STATUS_NO_MEMORY. Explain why. - -2013-05-24 Corinna Vinschen - - * fork.cc (frok::parent): Always set CREATE_UNICODE_ENVIRONMENT flag. - Explain why. - -2013-05-23 Corinna Vinschen - - * fork.cc (frok::parent): Call CreateProcessW with command line set - to the parent command line. Change comment to explain why. - -2013-05-23 Corinna Vinschen - - * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Fix datatype of - stacksize to SIZE_T. Cast to SIZE_T in pointer arithmetic. Slightly - enhance output in case of a fatal error. - * fork.cc (frok::parent): Always set ch.stackaddr to DeallocationStack - value of current thread to help stack reservation in - child_info_fork::alloc_stack_hard_way along. Simplify subsequent code - storing stack values in ch. Print guardsize in hex, too. - -2013-05-23 Corinna Vinschen - - * environ.cc (set_winsymlinks): Handle "winsymlinks:nativestrict" - option. On pre-Vista warn the user if the "winsymlinks:native*" option - is set. - * globals.cc (enum winsym_t): Add WSYM_nativestrict. - * path.cc (symlink_native): Don't create native symlink if target - does not exist. Explain why. Improve comments. - (symlink_worker): Change AFS symlink handling to WSYM_nativestrict. - Handle WSYM_nativestrict throughout. Change condition for bail out - to wsym_type == WSYM_nativestrict. Add comment. Fix formatting. - * shared_info.h (CURR_USER_MAGIC): Change to reflect change in - class user_info. - (class user_info): Add member warned_nonativesyms. - -2013-05-22 Corinna Vinschen - - * spinlock.h (ULONG): Replace LONG operator with ULONG to accommodate - the fact that CURR_SHARED_MAGIC and USER_SHARED_MAGIC are unsigned - values. - * shared.cc (shared_info::initialize): Drop explicit cast here. - -2013-05-21 Corinna Vinschen - - * Makefile.in (DLL_OFILES): Add arc4random.o. - * common.din: Export arc4random, arc4random_addrandom, arc4random_buf, - arc4random_stir and arc4random_uniform. - * mktemp.cc (arc4random): Remove static replacement function. - * posix.sgml (std-bsd): Add arc4random functions. - * include/cygwin/stdlib.h: Declare arc4random functions. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - * libc/arc4random.cc: New file implementing arc4random functions taken - from FreeBSD. - -2013-05-21 Corinna Vinschen - - * globals.cc (__isthreaded): New global variable. Explain what it's - used for. - * miscfuncs.cc (thread_wrapper): Set __isthreaded to 1 here. - -2013-05-21 Corinna Vinschen - - * fhandler.h (class fhandler_dev_random): Change type of pseudo to - uint32_t to make sure it's 32 bit on all supported platforms. - -2013-05-21 Corinna Vinschen - - x86_64 only: - * gendef (_sigfe_maybe): Drop pushing %r12, use %r10 instead since we - don't call yield anymore. - (_sigfe): Ditto. - (_sigbe): Ditto. - -2013-05-21 Corinna Vinschen - - * libc/base64.c: New file. - * Makefile.in (DLL_OFILES): Add base64.o. - * common.din: Export __b64_ntop and __b64_pton. - * posix.sgml (std-bsd): Add __b64_ntop and __b64_pton. - * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. - -2013-05-21 Corinna Vinschen - - * syscalls.cc (open): Only return ENOTDIR if file exists. - -2013-05-16 Christopher Faylor - - * sigproc.cc (sig_hold): Delete. - (sigheld): Delete. - (sig_send): Eliminate special-case __SIGHOLD handling. - (wait_sig): Just flag when signals are on hold and add them to the - queue rather than stalling the wait_sig loop. Clear the flag when - __SIGNOHOLD is specified. - -2013-05-14 Corinna Vinschen - - * Makefile.in (devices_CFLAGS): Drop -Os. - -2013-05-14 Corinna Vinschen - - * Makefile.in (localtime_CFLAGS): Define as -fwrapv since localtime - code requires int overflows to be fully defined. - * localtime.cc: Align a bit more to upstream code. - -2013-05-14 Corinna Vinschen - - * grp.cc (get_groups): Convert to void function. - (initgroups32): Accommodate the aforementioned change. - (getgrouplist): Ditto. - -2013-05-14 Corinna Vinschen - - * grp.cc (get_groups): Never return error. Always create a group list, - even if it's empty. - -2013-05-13 Christopher Faylor - - * include/cygwin/version.h: Bump api minor number to reflect previous - change. - -2013-05-13 Christopher Faylor - - * i686.din: Remove _strtold. - * x86_64.din: Move strtold definition... - * common.din: ...to here. - -2013-05-07 Christopher Faylor - - * fhandler_tty.cc (fhandler_pty_common::__acquire_output_mutex): Never - wait an INFINITE amount of time. Instead default to 1/10 second. - (fhandler_pty_slave::open): Just default to INFINITE wait rather than - (now) waiting longer than other similar calls. - -2013-05-03 Christopher Faylor - - * spawn.cc (ILLEGAL_SIG_FUNC_PTR): New define. - (system_call_handle): Rename from system_call_cleanup. - (is_system_call): New convenience method. - (system_call_handle::system_call_handle): Use ILLEGAL_SIG_FUNC_PTR - rather than cast. Call sig_send here rather than in caller. - Initialize oldint. - (system_call_handle::arm): New function pulled from constructor. - (~system_call_handle::system_call_handle): Use is_system_call(). - (child_info_spawn::worker): Use system_call_handle to set up for system - call early. Use arm call prior to waiting for child to properly set up - signal handling. Move comment closer to code it is commenting on. - -2013-05-01 Christopher Faylor - - * resource.cc (setrlimit): Use consistent commenting style. Return - EINVAL when rlim_cur > rlim_max. - -2013-04-30 Yaakov Selkowitz - - Throughout, (mainly in fhandler*) fix remaining gcc 4.7 mismatch - warnings between regparm definitions and declarations. - * smallprint.cc (__small_vswprintf): Conditionalize declaration and - setting of l_opt for only x86_64. - * spawn.cc (child_info_spawn::worker): Remove unused 'pid' variable. - * thread.cc (verifyable_object_isvalid): Temporarily define as - non-inline with gcc 4.7+, regardless of target. - -2013-04-30 Christopher Faylor - - * gendef: Fix sigfe.s typo. - -2013-04-30 Christopher Faylor - - * spawn.cc (system_call_cleanup): Rename from pthread_cleanup. Extend - functionality. - (system_call_cleanup::system_call_cleanup): Set up signals like - system() requires. Unblock previously-blocked signal handling. - (system_call_cleanup::~system_call_cleanup): Restore signal handling - after system(). - (child_info_spawn::worker): Put signals on hold and use - system_call_cleanup class to set and restore signals rather than doing - it prior to to running the program. Remove the ill-conceived - pthread_cleanup stuff. - -2013-04-30 Christopher Faylor - - * exceptions.cc (cygwin_exception::dumpstack): Guard against wild - pointer dereference. - (CYG_EXC_CONTINUE_EXECUTION): Define based on standard Windows - definition. - (CYG_EXC_CONTINUE_SEARCH): Ditto. - (exception::handle): Move andreas detection earlier. Make comment - clearer. - (signal_exit): Set core-dumped flag. - -2013-04-30 Christopher Faylor - - * i686.din: New file. - * x86_64.din: New file. - * common.din: New file. - * cygwin.din: Delete. - * cygwin64.din: Delete. - * gendef: Rework to take options rather than using positional - parameters. Accept multiple files as input. - * Makefile.in: Rework to allow multiple .din files as input to gendef. - * configure.in: Change names of .din files to be expressively target - specific. - * aclocal.m4: Regenerate. - * configure: Ditto. - -2013-04-29 Christopher Faylor - - * autoload.cc (CreateSymbolicLinkW): Rename from CreateSymbolicLink. - -2013-04-26 Corinna Vinschen - - * fcntl.cc (fcntl): Define as export alias for fcntl64 on x86_64. - -2013-04-24 Corinna Vinschen - - * autoload.cc (CreateSymbolicLink): Define. - * environ.cc (set_winsymlinks): Set allow_winsymlinks. - (parse_thing): Change "winsymlinks" to set by function. - * globals.cc (enum winsym_t): Define. - (allow_winsymlinks): Define as winsym_t. - (ro_u_afs): New R/O Unicode string. - * mount.cc (fs_info::update): Fix comment. Handle AFS. - (fs_names): Add "afs". - * mount.h (enum fs_info_type): Add afs. - (class fs_info): Implement afs. - * path.cc (symlink): Drop third parameter in call to symlink_worker. - (symlink_nfs): New function. - (symlink_native): New function. - (symlink_worker): Drop third argument. Handle native symlink type by - calling symlink_native. Move code to handle NFS to symlink_nfs. Fix - formatting. Slightly restructure code. - * path.h (class path_conv): Add fs_is_afs method. - (symlink_worker): Declare here. - * security.h: Define privilege constants as unsigned int instead of as - unsigned long. - * syscalls.cc (mknod_worker): Set third parameter in symlink_worker - call to WSYM_lnk. - * winsup.h (symlink_worker): Drop declaration here. - -2013-04-23 Corinna Vinschen - - * cygwin64.din (_setjmp): Export. - (_longjmp): Export. - -2013-04-23 Corinna Vinschen - - * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details. - -2013-04-22 Corinna Vinschen - - * include/sys/queue.h: Delete in favor of more complete newlib file. - -2013-04-22 Corinna Vinschen - - Adapt to changes in newlib's sys/cdefs.h: - * include/sys/sysinfo.h (struct sysinfo): Rename __unused member to __f. - * libc/fts.c (__FBSDID): Drop definition. - * regex/regexec.c (__unused): Drop definition. - -2013-04-22 Corinna Vinschen - - * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 19. - -2013-04-16 Corinna Vinschen - - * glob.cc: Include winsup.h before anything else. - -2013-04-12 Corinna Vinschen - - * path.cc (symlink_info::check): Drop PC_KEEP_HANDLE flag for - unrecognized reparse points as well. Reorganize code and comments - handling reparse points for better readability. - -2013-04-11 Corinna Vinschen - - * hires.h (hires_ns::nsecs): Declare with bool parameter. - * times.cc (hires_ns::nsecs): Take bool parameter. If set to true, - don't use prime value (== return system wide absolute value). - -2013-04-08 Christopher Faylor - - * cygtls.h (_cygtls::reset_signal_arrived): Actually reset the - signal_arrived event. - (_cygtls::handle_SIGCONT): Declare new function. - * cygwait.cc (is_cw_sig_handle): Delete. - (is_cw_sig_cont): New convenience define. - (cygwait): Clear signal if is_cw_sig_cont and we got a SIGCONT. - * cygwait.h (cw_wait_mask): Add cw_sig_cont. - * exceptions.cc (sig_handle_tty_stop): Tighten "incyg" region. Use - cw_sig_cont param for cygwait. Don't zero signal here outside of lock. - (sigpacket::setup_handler): Don't check for in_forkee since we will now - never get here in that state. - (_cygtls::handle_SIGCONT): Define new function. - (sigpacket::process): Call handle_SIGCONT early to deal with SIGCONT. - Nuke continue_now handling. Allow SIGKILL to kill a suspended process. - Delete a couple of now-unneeded labels. - (_cygtls::call_signal_handler): Reorganize setting of incyg within - lock. - * sigproc.cc (pending_signals): Simplify. - (pending_signals::clear): New method. - (_cygtls::remove_wq): Reorganize to always close wq.thread_ev if it - exists to avoid handle leaks. - (sig_clear): Simplify by just calling sigq.clear(). - (sig_dispatch_pending): Always call sigq.pending even in signal thread - to force another loop in wait_sig. - (sig_send): Remove a "goto out" just before out: label. - (pending_signals::add): Simplify. - (pending_signals::del): Delete. - (pending_signals::next): Delete. - (wait_sig): Define variable q to be the start of the signal queue. - Just iterate through sigq queue, deleting processed or zeroed signals. - Only set clearwait when the current signal is SIGCHLD. - * sigproc.h: Add a comment about an unused enum. - -2013-04-08 Corinna Vinschen - - * fhandler_socket.cc (get_inet_addr): Handle abstract AF_LOCAL socket. - (fhandler_socket::recv_internal): Create abstract socket name for - AF_LOCAL datagram sockets. Explain why we do that. - -2013-04-07 Christopher Faylor - - * cygheap.cc (init_cygheap::find_tls): Add a comment. - * dcrt0.cc (parent_sigmask): Delete. - (dll_crt0_1): Use spawn_info->moreinfo->sigmask rather than saved - parent signal mask. - * thread.cc (pthread::thread_init_wrapper): Add comment stressing the - importance of maintaining ordering of statements. - -2013-04-05 Corinna Vinschen - - * mmap.cc (is_mmapped_region): Call LIST_UNLOCK on premature return. - -2013-04-03 Corinna Vinschen - - * fhandler_proc.cc (format_proc_loadavg): Raise too small buffer size - to avoid overwriting unrelated cygheap memory. - -2013-04-03 Corinna Vinschen - - * path.cc (class suffix_scan): Add member namelen. - (suffix_scan::name_len): New method. - (suffix_scan::has): Store namelen since we have it already anyway. - Add a bit of explanation and a FIXME to comment. - (suffix_scan::next): Never attach extra .lnk suffix if resulting - filename length exceeds NAME_LEN. - (symlink_info::check): Bail out immediately with ENAMETOOLONG if - filename length exceeds NAME_LEN. - -2013-03-31 Christopher Faylor - - * child_info.h (cygheap_exec_info::sigmask): Declare new field. - * cygheap.cc (init_cygheap::find_tls): Rename threadlist_ix -> ix. - Only take one pass through thread list, looking for eligible threads to - signal. Set a new param indicating that function has found a sigwait* - mask. - * cygheap.h (init_cygheap::find_tls): Reflect new parameter. - * dcrt0.cc (parent_sigmask): New variable. - (child_info_spawn::handle_spawn): Save parent's signal mask here. - (dll_crt0_1): Restore parent's signal mask to tls sigmask as - appropriate. Call sig_dispatch_pending to flush signal queue when we - can finally do something with signals. - * exceptions.cc (sigpacket::process): Avoid attempting to handle - signals if we haven't finished initializing. Rely on the fact that - find_tls will do mask checking and don't do it again. Delete ill-named - 'dummy' variable. - * sigproc.cc (cygheap_exec_info::alloc): Save calling thread's signal - mask in new sigmask field. - (wait_sig): Try to debug when WFSO fails and DEBUGGING is defined. - * thread.cc (pthread::set_tls_self_pointer): Make this a true automatic - method rather than inexplicably relying on a thread parameter. - (pthread::thread_init_wrapper): Accommodate set_tls_self_pointer change - to non-static. Initialize sigmask before setting tid or suffer signal - races. - * thread.h (pthread::set_tls_self_pointer): Make non-static, delete - parameter. - -2013-03-29 Corinna Vinschen - - * cygthread.cc (cygthread::terminate_thread): Only try to free - thread stack on systems not freeing it by themselves. - * wincap.h (wincaps::terminate_thread_frees_stack): New element. - * wincap.cc: Implement above element throughout. - -2013-03-29 Christopher Faylor - - * pinfo.h (pinfo::status_exit): Rename from former static function in - pinfo.cc. - (pinfo::operator == (char *)): Remove unused operator. - * pinfo.cc (pinfo::status_exit): Move this function info pinfo class. - Use progname from the pinfo rather than myself. Be defensive when - inspecting procinfo. - -2013-03-29 Christopher Faylor - - * sigproc.cc (wait_sig): Avoid uninitialized use of nb when retrying. - Consolidate two error messages into one. - -2013-03-28 Christopher Faylor - - * sigproc.cc (pending_signals::retry): Declare new element. - (pending_signals::pending): Force an additional loop through wait_sig - by setting retry whenever this function is called. - (wait_sig): Reorganize to wait for SIGHOLD at bottom. Always add - signal to pending queue and work on whole queue rather than just the - one signal. Loop when sigq.retry is set. Fix long-broken check for - SIGCHLD after queued signals. - -2013-03-28 Christopher Faylor - - * exceptions.cc (exception::handle): Generalize comment. - -2013-03-09 Christopher Faylor - - * cygtls.h (_cygtls::signal_debugger): Change argument type. - (_cygtls::copy_context): Delete declaration. - * exceptions.cc (exception::handle): Don't call copy_context() here. - Move signal_handler call earlier and always call it. - (_cygtls::copy_context): Delete definition. - (_cygtls::signal_debugger): Move copy_context logic here. Suspend - thread receiving signal before gathering context information. - -2013-03-08 Christopher Faylor - - * spawn.cc (child_info_spawn::worker): Save and restore my_wr_proc_pipe - around non-execing operations to avoid handle leak seen in - http://cygwin.com/ml/cygwin/2013-03/msg00152.html . - -2013-03-07 Corinna Vinschen - - * include/sys/un.h (UNIX_PATH_MAX): Rename from UNIX_PATH_LEN to - follow Linux. - * fhandler_socket.cc: Change UNIX_PATH_LEN to UNIX_PATH_MAX throughout. - (fhandler_socket::recv_internal): Don't return prematurely in case of - successful return. For AF_LOCAL sockets, overwrite returned AF_INET - name with AF_LOCAL name. - -2013-03-07 Corinna Vinschen - - * fhandler_socket.cc (fhandler_socket::bind): Fix check for AF_LOCAL - filename length to allow non-NUL terminated strings within namelen - bytes. Copy over sun_path to local array sun_path to have a - NUL-terminated string for subsequent function calls. Move path_conv - check before OS bind call to not bind the socket before being sure - the file doesn't exist. Add and fix comments. - -2013-03-06 Corinna Vinschen - - * mount.cc (fs_names): Add trailing NULL element to avoid potential - SEGV in format_proc_filesystems. - -2013-03-01 Christopher Faylor - - * exceptions.cc (exception::handle): Eliminate buggy recursed variable; - just check if we're exiting. - -2013-02-26 Corinna Vinschen - - * include/pthread.h (pthread_atfork): Add missing declaration. - -2013-02-20 Yaakov Selkowitz - - * include/error.h (error_message_count): Declare as dllimport. - (error_one_per_line): Ditto. - (error_print_progname): Ditto. - -2013-02-08 Corinna Vinschen - - * child_info.h (CURR_CHILD_INFO_MAGIC): Update. - (class child_info_fork): Drop extraneous semicolon. - -2013-02-04 Corinna Vinschen - - * fhandler_socket.cc (fhandler_socket::bind): Fix error code for - empty filename. - -2013-02-04 Corinna Vinschen - - * fhandler_socket.cc (fhandler_socket::bind): Fix length check of - AF_LOCAL filename so it never accesses memory beyond namelen. Also - make sure filename is NUL-terminated. - -2013-01-31 Christopher Faylor - - * DevNotes: Add entry cgf-000022. - * cygtls.h (_cygtls::func): Define as a sa_sigaction style function. - * exceptions.cc (sig_handle_tty_stop): Ditto. - (_cygtls::interrupt_setup): Fix coercion to accommodate 'func' change. - (ctrl_c_handler): Use tty kill_pgrp to send a signal. - (sigpacket::process): Don't process sigflush here. - (_cygtls::call_signal_handler): Reorganize to avoid a race. Always - call sa_sigaction style function. - * fhandler_termios.cc (is_flush_sig): Define new function. - (tty_min::kill_pgrp): Handle tty flush when signal detected. - (fhandler_termios::bg_check): Be slightly more paranoid about checking - for valid tty. - (fhandler_termios::sigflush): Don't flush unless tty owner. - * fhandler_tty.cc (fhandler_pty_slave::ioctl): Use tty kill_pgrp to - send signal. - (fhandler_pty_master::ioctl): Ditto. - * signal.cc (killsys): Delete definition. - * sigproc.h (killsys): Delete declaration. - * include/cygwin/signal.h (siginfo_t): Simplify union/struct nesting - slightly. Implement mechanism to allow cygwin data passing. - -2013-01-23 Christopher Faylor - - * miscfuncs.cc (__import_address): Check if malloc field points - directly at 'malloc'. - -2013-01-23 Christopher Faylor - - * miscfuncs.cc (__import_address): On second thought, the chance that - this pointer could be NULL is very low so don't bother checking for it. - -2013-01-23 Christopher Faylor - - * exceptions.cc (exception::handle): Make attempt to recursively dump - stack fatal. - -2013-01-22 Christopher Faylor - - * miscfuncs.cc (__import_address): Avoid NULL explicitly. - -2013-01-22 Christopher Faylor - - * miscfuncs.cc (__import_address): Avoid treating random instructions - as import jump. - * malloc_wrapper.cc (malloc_init): Remove comment about 64-bit. - -2013-01-21 Christopher Faylor - - * dcrt0.cc (dll_crt0_1): Comment assumption. - * exceptions.cc (sigpacket::setup_handler): Avoid sending signals - during fork processing. - -2013-01-21 Christopher Faylor - - * dcrt0.cc (dll_crt0_1): Flag that we are working "incyg". Handle any - signals (presumably exiting signals) which may have come in while we - are in the process of setting up. - -2013-01-21 Christopher Faylor - - * update-copyright: Recognize configure.ac scripts too. - -2013-01-21 Christopher Faylor - - * cygerrno.h (__reg3): Define. - * cygmalloc.h (__reg3): Ditto. - -2013-01-21 Christopher Faylor - - * cygerrno.h: Conditionally define __regN for cygserver. - -2013-01-20 Christopher Faylor - - * malloc_wrapper.cc (malloc_init): Re-add inadvertently dropped comment - which explains what's going on with the use_internal calculation. - -2013-01-20 Christopher Faylor - - Throughout, update copyrights to reflect dates which correspond to - main-branch checkins. Regularize copyright format. - -2013-01-20 Christopher Faylor - - Throughout, change __attribute__ ((regparm (N))) to just __regN. - Throughout, (mainly in fhandler*) start fixing gcc 4.7.2 mismatch - between regparm definitions and declarations. - * gendef: Define some functions to take @ declaration to accommodate - _regN defines which use __stdcall. - * gentls_offsets: Define __regN macros as empty. - * autoload.cc (wsock_init): Remove unneeded regparm attribute. - * winsup.h (__reg1): Define. - (__reg2): Define. - (__reg3): Define. - - * advapi32.cc (DuplicateTokenEx): Coerce some initializers to avoid - warnings from gcc 4.7.2. - * exceptions.cc (status_info): Declare struct to use NTSTATUS. - (cygwin_exception::dump_exception): Coerce e->ExceptionCode to - NTSTATUS. - * fhandler_clipboard.cc (cygnativeformat): Redefine as UINT to avoid - gcc 4.7.2 warnings. - (fhandler_dev_clipboard::read): Ditto. - -2013-01-20 Christopher Faylor - - * update-copyright (update_maybe): Accommodate perl-style copyright - comments. - -2013-01-20 Christopher Faylor - - * update-copyright: Silently skip nonexistent files. Display filename - on update. Don't update non-Red Hat copyrights. - -2013-01-20 Christopher Faylor - - * update-copyright: Update standard copyright information based on cvs - log and current sandbox status. - -2013-01-20 Christopher Faylor - - * malloc_wrapper.cc: Change 'use_internal_malloc' to 'use_internal' - throughout. - (export_malloc_called): Delete. - (internal_malloc_determined): New variable. - (malloc_init): Control calculation of internal/external malloc based on - 'internal_malloc_determined'. Use import_address() to determine if - malloc in user_data is ours or not. - * miscfuncs.cc (thread_wrapper): Make static. - (__import_address): Define new function. - * miscfuncs.h (import_address): New define. - (__import_address): Declare new function. - -2013-01-20 Christopher Faylor - - * sigproc.cc (sig_dispatch_pending): Add correct regparm attributes to - match declaration. - (pid_exists): Ditto. - (proc_subproc): Ditto. - (sig_clear): Ditto. - (sig_send): Ditto. - (checkstate): Ditto. - -2013-01-19 Corinna Vinschen - - * syscalls.cc (rename): Remove ill-conceived NFS workaround from - 2013-01-10 for self-inflicted NFS server problem. - -2013-01-19 Christopher Faylor - - * exceptions.cc (ctrl_c_handler): Remove special-case handler for - "cygwin_finished_initializing". - * sigproc.cc (exit_thread): Undefine ExitThread earlier to avoid - recursion on error return. - -2013-01-18 Corinna Vinschen - - * errno.cc (errmap): Map ERROR_LOCK_VIOLATION to EBUSY. - -2013-01-18 Corinna Vinschen - - * mmap.cc (handler_disk_file::msync): Add call to FlushFileBuffers - to implement MS_SYNC. - -2013-01-17 Christopher Faylor - - * mmap.cc (handler_disk_file::msync): Retry up to 99 times if - FlushViewOFile fails with ERROR_LOCK_VIOLATION. - -2013-01-16 Christopher Faylor - - * sigproc.cc (no_signals_available): Finally remove this macro - entirely. - (exit_thread): Ensure process lock is released on error exit. - (sig_send): Simplify "its_me" test. Remove no_signals_available tests. - -2013-01-16 Christopher Faylor - - * pthread.cc (pthread_exit): Add kludge to accommodate noreturn attribute. - -2013-01-14 Antti Kantee - - * include/pthread.h (pthread_exit): Mark as "noreturn". - -2013-01-14 Christopher Faylor - - * exceptions.cc (signal_exit): Move captive process termination... - (_cygtls::interrupt_setup): ...into here. - (sigpacket::process): Simplify setting of handler when have_execed. - (_cygtls::interrupt_setup): Don't call proc_subproc when we've execed. - * globals.cc (exit_states): Delete unneeded ES_EXEC_EXIT. - * pinfo.cc (pinfo::exit): Change debugging output. Call proc_terminate - rather than the now-obsolete sigproc_terminate. Don't set exit_state - to ES_EXEC_EXIT. Set exit_state to ES_FINAL later. - * sigproc.cc (sigproc_terminate): Delete function. - (wait_sig): Don't call proc_subproc if have_execed. - * sigproc.h (sigproc_terminate): Delete declaration. - * sync.h (lock_process::lock_process): Don't set exit_state to - ES_PROCESS_LOCKED. - (lock_process::operator LONG): Define. - -2013-01-11 Christopher Faylor - - * DevNotes: Add entry cgf-000021. - * select.cc (select): Unconditionally return when a signal is detected. - (select_stuff::wait): Ditto. - -2013-01-11 Corinna Vinschen - - * syscalls.cc (rename): Drop handling paths > 32757 chars, emit EINVAL - instead, thus simplifying code allocating and filling pfri. Drop size - and use constant expression in NtSetInformationFile call. Add comments. - Drop redundant test for fs_serial_number and change comment accordingly. - -2013-01-11 Thomas Wolff - - * fhandler.h (class dev_console): Flag for expanded control sequence. - * fhandler_console.cc (char_command): Supporting cursor style modes. - -2013-01-10 Corinna Vinschen - - * path.h (path_conv::fs_type): New method. - * syscalls.cc (rename): Check for cross-device situation before - touching anything. Explain why. Workaround NFS bug in call to - NtSetInformationFile(FileRenameInformation). - -2013-01-09 Corinna Vinschen - - * cygerrno.h: Fix copyright. - * exceptions.cc: Drop comment explaining removed variable. - -2013-01-09 Corinna Vinschen - - * dcrt0.cc (main_thread_sinit): New inline function. Fix and explain - a stdio initialization issue. - (dll_crt0_1): Call main_thread_sinit rather than __sinit. - -2013-01-07 Christopher Faylor - - * thread.cc (pthread_rwlock::lookup_reader): Remove parameter: always - assume that we're looking for the current thread. - (pthread_rwlock::tryrdlock): Eliminate self variable. Accommodate - change in lookup_reader(). - (pthread_rwlock::unlock): Ditto. - (pthread_rwlock::rdlock): Ditto. Move add_reader call after writer - tests to more closely mimic old behavior. - (pthread_rwlock::wrlock): Accommodate change in lookup_reader(). - * thread.h ((pthread_rwlock::lookup_reader): Eliminate argument. - -2013-01-07 Christopher Faylor - - * thread.cc (pthread_rwlock::add_reader): Perform new operation here - and return pointer to allocated RWLOCK_READER structure. - (pthread_rwlock::rdlock): Reorganize to reflect new add_reader - functionality. - (pthread_rwlock::tryrdlock): Ditto. Remove unneeded call to - lookup_reader(). - * thread.h (pthread_rwlock::RWLOCK_READER::RWLOCK_READER): New - constructor. - (pthread_rwlock::add_reader): Reflect new functionality. - -2013-01-03 Christopher Faylor - - * globals.cc (exit_states): Renumber so that ES_EXIT_STARTING is first, - as intended. - * sigproc.cc (wait_sig): Only stop accepting signals after - exit_state > ES_EXIT_STARTING. - -2013-01-03 Christopher Faylor - - * sigproc.cc (exit_thread): Set thread signal mask so that no signals - are sent to an exiting thread. - -2013-01-02 Christopher Faylor - - * sigproc.cc (no_signals_available): Remove exit_state test since - signals are available in a limited fashion when exiting. - (sig_dispatch_pending): Ditto. - (sig_send): Ditto. - (exit_thread): Rearrange to avoid an unnecessary DuplicateProcess when - exiting. - (wait_sig): Allow special signals when exiting. - -2013-01-02 Christopher Faylor - - * DevNotes: Add entry cgf-000020, relating to previous checkin. - -2013-01-02 Christopher Faylor - - * cygtls.h (_cygtls::signal_exit): Delete from class. - * exception.h (cygwin_exception): New class. - (cygwin_exception::dumpstack): Declare new function. - (cygwin_exception::context): Ditto. - (cygwin_exception::dump_exception): Ditto. - * exceptions.cc (cygwin_exception::dump_exception): Move into - cygwin_exception class. Accommodate new variable names. - (cygwin_exception::dumpstack): Ditto stackdump -> dumpstack. - (exception::handle): Move andreas processing earlier. Defer signal - processing decisions to the signal thread where they belong. Pass - exception information to sig_send via new siginfo_t si_cyg field. - (ctrl_c_handler): Wait for SIGHUP signal to be processed since it could - cause a process exit and we don't want races with thread exit lock. - (signal_exit): Move back here from sigproc.cc. Modify arguments and - remove from sigpacket class. Decide when to dump core based on signal - type. - (sigpacket::process): Handle exiting signals in context of threads - rather than in the signal thread. Signal debugger on non-Windows - signals. Remove setup_signal_exit call. - * sigproc.cc (no_signals_available): Remove argument. - (signal_exit_code): Delete. - (close_my_readsig): Ditto. - (_cygtls::signal_exit): Move to exceptions.cc. - (sigproc_terminate): Don't attempt to terminate signal thread. - (setup_signal_exit): Delete. - (exit_thread): Use new si_cyg entry in siginfo_t. - (sig_send): Just use empty initializer for si. Accommodate change in - no_signals_available argument. - (wait_sig): Remove attempt to "go asynchronous" on process exit. - Delete __SIGEXIT handling. Don't ever exit. - * sigproc.h: Remove __SIGEXIT from signal enum. Renumber. - * include/cygwin/signal.h (siginfo_t): Add si_cyg entry. +2014-01-04 Christopher Faylor + + * fhandler.h: Update copyright. + (cltype): New enum. + (dev_console::console_attrs): Define struct name. + (dev_console::console_attrs::set_cl_x): New function. + (dev_console::console_attrs::set_cl_y): New function. + (fhandler_console::clear_screen): Redefine input params. + * fhandler_console.cc: Update copyright. Throughout, reflect change in + arguments to fhandler_console::clear_screeen. + (fhandler_console::mouse_aware): Simplify logic slightly. + (fhandler_console::scroll_screen): Remove hopefully obsolete win95 + code. + (dev_console::console_attrs::set_cl_x): New function. + (dev_console::console_attrs::set_cl_y): New function. + (fhandler_console::clear_screen): Redefine input params. Calculate + position based on enum value. + (region_split): Change arguments. Simplify. + (ReadConsoleOutputWrapper): Remove coord argument since we now always + use 0, 0. Send extra arguments to region_split. diff --git a/winsup/cygwin/ChangeLog-2013 b/winsup/cygwin/ChangeLog-2013 new file mode 100644 index 000000000..574984e3c --- /dev/null +++ b/winsup/cygwin/ChangeLog-2013 @@ -0,0 +1,2078 @@ +2013-12-31 Christopher Faylor + + * fhandler_console.cc (region_split): New function. + (delta): Ditto. + (ReadConsoleOutputWrapper): Ditto. + (fhandler_console::char_command): Use ReadConsoleOutputWrapper to avoid + OOM condition from ReadConsoleOutputW. Add more debugging. + +2013-12-22 Christopher Faylor + + * strace.cc (strace::vsprntf): Fix potential (if unlikely) use of + uninitialized variable. + +2013-12-18 Christopher Faylor + + * dcrt0.cc (dll_crt0_1): Remove NtSetTimerResolution. + * pinfo.cc (pinfo::init): Increase wait interval when waiting for + procinfo to stabilize. + +2013-12-17 Christopher Faylor + + * autoload.cc (timeBeginPeriod): Delete. + * dcrt0.cc (dll_crt0_1): Use NtSetTimerResolution rather than + timeBeginPeriod. + +2013-12-17 Christopher Faylor + + * autoload.cc (timeBeginPeriod): Autoload. + * dcrt0.cc (dll_crt0_1): Use timeBeginPeriod to set default resolution + to 1 ms. + * pinfo.cc (pinfo::thisproc): Set ppid for redirected _pinfo blocks too. + (pinfo::init): Avoid using VirtualQuery. Just rely on the assumption that + procinfo will be populated. + * pinfo.h (_pinfo::ppid): Move into redirected block. + +2013-12-17 Christopher Faylor + + * external.cc (fillout_pinfo): Remove nonsensical loop. + * fork.cc (frok::parent): When initializing pinfo for child new PID_NEW + flag + actual defined constant rather than raw number. Don't set + start_time here. + * pinfo.cc (pinfo::thisproc): Use PID_NEW when initializing pinfo. + Avoid checking h for NULL multiple times. Don't set start_time here. + (pinfo_init): Aways set ppid last. Tweak strace output. + (pinfo::init): Handle new PID_NEW flag. Wait for shared memory to + contain useful information. Set start_time if PID_NEW. + (_onreturn:h): Define as HANDLE rather than HANDLE *. + (_onreturn::~onreturn): Accommodate h definition change. + (_onreturn::no_close_handle): Rename from no_close_p_handle. Take a + pinfo arg and set hProcess to h before zeroing. + (winpids::add): Don't open a handle to our own process. Change logic + associated with when a handle gets closed. Accommodate no_close_handle + changes. + (winpids::enum_processes): Simplify process enumeration loop. + (winpids::set): Eliminate ill-considered malloc locking. + * sigproc.cc (proc_subproc): Always set ppid last. + +2013-12-17 Christopher Faylor + + * sigproc.cc (sig_send): Set PIPE_NOWAIT for pipes which are not us. + +2013-12-17 Christopher Faylor + + * fhandler.h (fhandler_pty_master::~fhandler_pty_master): Delete. + * fhandler_tty.cc (fhandler_pty_master::~fhandler_pty_master): Ditto. + +2013-12-11 Corinna Vinschen + + * syscalls.cc (NT_TRANSACTIONAL_ERROR): Define. + (stop_transaction): Take "trans" HANDLE by reference and set it to + NULL after closing it. + (unlink_nt): If NtOpenFile fails due to a transactional error, stop + transaction and retry NtOpenFile. Simplify check for having to call + stop_transaction. + (rename): If NtOpenFile fails due to a transactional error, stop + transaction and retry NtOpenFile in both affected cases. Simplify check + for having to call stop_transaction and add comment from unlink_nt. + +2013-12-11 Corinna Vinschen + + * mount.cc (fs_info::update): Fix formatting. + +2013-12-10 Corinna Vinschen + + * fhandler.h (fhandler_dev_clipboard): Add private member + cygnativeformat. Declare private method set_clipboard. + * fhandler_clipboard.cc (cygnativeformat): Convert static variable to + fhandler_dev_clipboard member. + (fhandler_dev_clipboard::set_clipboard): Convert from static function + to fhandler_dev_clipboard method. + +2013-12-09 Christopher Faylor + + * globals.cc (hntdll): Define/declare. + * exceptions.cc (inside_kernel): Don't call GetModuleFileName if we + know we're in ntdll. + * sigproc.cc (wait_sig): Initialize hntdll. + +2013-12-09 Corinna Vinschen + + * include/cygwin/stdlib.h (initstate, random, setstate, srandom): + Harden _XOPEN_SOURCE guard against applications defining _XOPEN_SOURCE + with empty value. + +2013-12-08 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 28. + +2013-12-07 Corinna Vinschen + + * path.cc (symlink_native): Workaround Windows 8.1 bug: Drop long path + prefix from symlink target path. Add comment to explain why. + +2013-12-06 Christopher Faylor + + * syscalls.cc (dup): Use cygheap_fdnew properly. + +2013-12-05 Christopher Faylor + + * cygheap.h (cygheap_fdnew): Avoid setting errno directly since it will + have been set by a previous function. + * dtable.h (dtable::extend): Accept second size_t argument. + * dtable.cc (dtable::extend): Accept second "min" argument which allows + checking for OPEN_MAX_MAX boundary conditions. + (dtable_init): Accommodate second argument to dtable::extend. + (dtable::find_unused_handle): Ditto. + * syscalls.cc (setdtablesize): Ditto. + (dup): Return any error passed by cygheap_fdnew() directly. + (getdtablesize): Just return dtable size directly. + +2013-12-04 Christopher Faylor + + * dtable.cc (dtable::find_unused_handle): When extending, always make + sure that there is a NOFILE_INCR chunk following the free fd. + +2013-12-03 Christopher Faylor + + * select.cc (select): Add workaround for, as yet undebugged, + pathological case. + +2013-12-01 Christopher Faylor + + * dtable.cc (dtable::find_unused_handle): Break out of the right loop. + +2013-12-01 Christopher Faylor + + * dtable.cc (dtable::find_unused_handle): Fix off-by-one error. Always + exit through the bottom. + (cygwin_attach_handle_to_fd): Make sure that fd tab is locked for the + duration of this function. + * dtable.h (dtable::lock): Make public. + (dtable::unlock): Ditto. + (dtable): Remove friends. + +2013-12-01 Corinna Vinschen + + * dtable.cc (dtable::extend): Change local variable new_size to size_t + as well. + + * thread.cc: Fix comment. + +2013-11-30 Christopher Faylor + + * dtable.h (dtable::first_fd_for_open): Change declaration to size_t. + (dtable::extend): Change parameter to size_t. + (dtable::find_unused_handle): Ditto. + * dtable.cc: Remove now-unused header. + (dtable::extend): Remove pointless test. Change parameter to size_t. + (dtable::find_unused_handle): Rework to avoid MAX calculation in + extend() call. Change parameter to size_t. + +2013-11-30 Christopher Faylor + + * dtable.cc (build_fh_pc): When creating an archetype, use native name + rather than unix name if name doesn't exist. + +2013-11-29 Christopher Faylor + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 27. + +2013-11-29 Jon TURNEY + + * include/cygwin/stdlib.h (initstate, random, setstate, srandom): + Prototype if not __STRICT_ANSI__ or _XOPEN_SOURCE is defined + appropriately. + +2013-11-28 Alexey Pavlov + + * include/glob.h: Fix invalid use of 'restrict' error. + +2013-11-27 Corinna Vinschen + + * syscalls.cc (try_to_bin): Enhance debug output in case reopen fails. + +2013-11-27 Corinna Vinschen + + * syscalls.cc (try_to_bin): Drop fh_dup, reuse tmp_fh instead. + +2013-11-27 Corinna Vinschen + + * syscalls.cc (try_to_bin): Take additional parameter to get file open + flags. If the file to move to the bin has been opened casesensitive, + reopen it caseinsensitive. Explain why. Revert the default name of + the Vista-and-later recycler to mixed case for readability. + (unlink_nt): Call try_to_bin with file open flags as evaluated. + +2013-11-26 Corinna Vinschen + + * nlsfuncs.cc (wcscoll): Add "__restrict" to definition. + (wcsxfrm): Ditto. + +2013-11-26 Corinna Vinschen + + * common.din: Export posix_spawn[...] functions. + * exec.cc (execve): Add EXPORT_ALIAS _execve. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + * posix.sgml (std-susv4): Add posix_spawn[...] here. + (std-notimpl): Drop here. + +2013-11-26 Corinna Vinschen + + * nlsfuncs.cc (strcoll): Add "__restrict" to definition. + (strxfrm): Ditto. + +2013-11-25 Corinna Vinschen + + Throughout, keep function definitions and declarations in sync with + newlib in terms of C99 "restrict" keyword. + +2013-11-24 Corinna Vinschen + + * dtable.cc: Include sys/param.h for MAX definition. + +2013-11-24 Corinna Vinschen + + Throughout, drop unnecessary explicit includes of windows header files + included by default. + * winlean.h: Add long comment to explain why we have to define certain + symbols. + (_NORMALIZE_): Define. + (_WINNLS_): Drop definition and subsequent undef. + (_WINNETWK_): Ditto. + (_WINSVC_): Ditto. + +2013-11-23 Eric Blake + + dup2: fix off-by-one crash + * dtable.cc (dup3): Fix off-by-one. + (find_unused_handle): Reduce time spent expanding during dup. + * syscalls.cc (setdtablesize): Report error on invalid value. + +2013-11-20 Corinna Vinschen + + * include/cygwin/stdlib.h (realpath): Drop declaration. It's declared + in newlib's stdlib.h now. + +2013-11-19 Corinna Vinschen + + * ntdll.h (RtlGetVersion): Declare. + * wincap.cc (wincapc::init): Rather than GetVersionEx, call + RtlGetVersion which is not crippled by missing Windows 8.1 manifest. + * wincap.h (wincapc): Change type of version to RTL_OSVERSIONINFOEXW. + Align formatting of all class members. + +2013-11-19 Corinna Vinschen + + * wincap.cc (wincapc::init): Revert previous change. It's not working. + +2013-11-19 Corinna Vinschen + + * net.cc (cygwin_getaddrinfo): Fix a comment. Only memset whints if + hints is NULL. Add a comment and set whints.ai_family explicitely to + AF_UNSPEC to follow glibc man page closely. Check flags against whints + for locality. + +2013-11-19 Corinna Vinschen + + * wincap.cc (wincapc::init): Fix dwMinorVersion for Windows 8.1 and + Server 2012. Explain why this is necessary. + +2013-11-19 Corinna Vinschen + + * autoload.cc (IdnToAscii): Define. + (IdnToUnicode): Define. + (FreeAddrInfoW): Define. + (GetAddrInfoW): Define. + (GetNameInfoW): Define. + * net.cc: Drop W. Richard STEVENS libgai implementation. + (cygwin_freeaddrinfo): Move code from ipv4_freeaddrinfo here. Move + definition up in file to avoid forward declaration in ga_duplist. + (ga_dup): Take addrinfoW as input. Add parameters to get IDN flags + and to set error value. Handle IDN flags and especially AI_CANONIDN. + Convert input wchar_t ai_canonname string to multibyte for output. + (ga_duplist): Add parameters to get IDN flags and to set error value + and propagate to ga_dup. Call cygwin_freeaddrinfo. + (gai_errmap): Add comments. Align error strings to GLibc. Add + EAI_IDN_ENCODE entry. + (get_ipv6_funcs): Remove. + (load_ipv6_guard): Remove. + (ipv6_inited): Remove. + (load_ipv6): Remove. + (load_ipv6_funcs): Remove. + (cygwin_getaddrinfo): Drop calling load_ipv6. Handle AI_IDN* flags. + Convert input strings to wchar_t and call GetAddrInfoW/FreeAddrInfoW. + In case hints is NULL, set default ai_flags explicitely to + AI_V4MAPPED | AI_ADDRCONFIG, as documented for Glibc. Only add AI_ALL + if AI_ADDRCONFIG is not given. Unconditionally add Windows-specific + AI_DISABLE_IDN_ENCODING to ai_flags to make IDN behaviour compatible + to Glibc even on Windows 8 and later. + (cygwin_getnameinfo): Drop calling load_ipv6. Handle NI_IDN* flags. + Call GetNameInfoW and convert returned strings from wchar_t to + multibyte. + * include/netdb.h: Add comments to describe flags and error values. + (AI_*): Define all flags using hex values for clearness. + (AI_IDN): Define. + (AI_CANONIDN): Define. + (AI_IDN_ALLOW_UNASSIGNED): Define. + (AI_IDN_USE_STD3_ASCII_RULES): Define. + (NI_*): Define all flags using hex values for clearness. + (NI_IDN): Define. + (NI_IDN_ALLOW_UNASSIGNED): Define. + (NI_IDN_USE_STD3_ASCII_RULES): Define. + (EAI_IDN_ENCODE): Define. + +2013-11-06 Christopher Faylor + + * configure.ac: Detect windows headers/libs after we've figured out the + C compiler. + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2013-10-30 Corinna Vinschen + + * devices.in (dev_cygdrive_storage): Revert mapping to \Device\Null. + (dev_storage): Ditto for /dev. + * devices.cc: Regenerate. + * fhandler.cc (fhandler_base::open_null): New method to open a fake + \Device\Null handler. + (fhandler_base::open): Fix formatting. Change O_ACCMODE test to a + switch statement. Simplify a test which still tested for a now unused + create_disposition. + * fhandler.h (fhandler_base::open_null): Declare. + (fhandler_netdrive::close): Declare. + * fhandler_dev.cc (fhandler_dev::open): Open fake \Device\Null handle + by just calling new open_null method. + * fhandler_disk_file.cc (fhandler_cygdrive::open): Ditto. + * fhandler_netdrive.cc (fhandler_netdrive::open): Call open_null + rather than setting nohandle. + (fhandler_netdrive::close): New method. + * fhandler_registry.cc (fetch_hkey): Fix token in RegOpenUserClassesRoot + call. Create valid key for HKEY_CURRENT_CONFIG by mapping to real key + HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current. + (fhandler_registry::open): Set nohandle only when using pseudo registry + handle. + * fhandler_virtual.cc (fhandler_virtual::opendir): Call open rather + than just setting nohandle here. + * fhandler_virtual::fstatvfs): Set ST_RDONLY fs flag. + * globals.cc (ro_u_null): New readonly UNICODE_STRING for \Device\Null. + * path.h (path_conv::set_path): Revert previous change caring for + wide_path. + +2013-10-30 Corinna Vinschen + + * devices.in (dev_cygdrive_storage): Map to \Device\Null. + (dev_storage): Map /dev and /dev/windows to \Device\Null. + * devices.cc: Regenerate. + * dir.cc (opendir): Create unique id. Explain why. + * fhandler.h (fhandler_dev::get_dev): Implement inline. + (fhandler_cygdrive::close): Drop declaration. + (fhandler_cygdrive::get_dev): Implement inline. + (fhandler_windows::get_hwnd): Ditto. + (fhandler_windows::set_close_on_exec): Drop declaration. + (fhandler_windows::fixup_after_fork): Ditto. + * fhandler_dev.cc (fhandler_dev::open): Call fhandler_disk_file::open + without O_CREAT flag. Explain why. Create \Device\Null handle if + /dev/ doesn't actually exist. + (fhandler_dev::close): Drop nohandle case. + (fhandler_dev::fstatvfs): Drop nohandle check. Test for fs_got_fs + instead. Set ST_RDONLY fs flag for simulated /dev. + (fhandler_dev::opendir): If /dev doesn't exist, call open() to create + fake \Device\Null handle. Don't set nohandle. Set dir_exists + correctly. + (fhandler_dev::rewinddir): Call fhandler_disk_file::rewinddir only if + /dev is a real directory. + * fhandler_disk_file.cc (fhandler_disk_file::opendir): If called for + the cygdrive dir, call open() to create fake \Device\Null handle. + Only attach __DIR_mounts buffer to dir if not called for cygdrive dir. + Don't set nohandle. + (fhandler_cygdrive::open): Create \Device\Null handle. + (fhandler_cygdrive::close): Remove. + (fhandler_cygdrive::fstatvfs): Set ST_RDONLY fs flag. + * fhandler_windows.cc (fhandler_windows::open): Create \Device\Null + handle. + (fhandler_windows::read): Don't add io_handle to WFMO handle array. + Change subsequent test for return value accordingly. Fix test for + "message arrived". + (fhandler_windows::set_close_on_exec): Remove. + (fhandler_windows::fixup_after_fork): Remove. + * path.h (path_conv::set_path): Make sure wide_path is NULL when + setting a new path. + * select.cc (peek_windows): Use correct hWnd value, not io_handle. + (fhandler_windows::select_read): Don't use io_handle as wait object. + (fhandler_windows::select_write): Ditto. + (fhandler_windows::select_except): Ditto. + +2013-10-27 Corinna Vinschen + + * exception.h: Fold in content of include/exceptions.h. + * include/exceptions.h: Remove. + +2013-10-26 Corinna Vinschen + + * devices.in (dev_storage): Map /dev/dsp to \Device\Null. + * devices.cc: Regenerate. + * fhandler_dsp.cc (fhandler_dev_dsp::open): Call fhandler_base::open. + (fhandler_dev_dsp::close): Call fhandler_base::close. + (fhandler_dev_dsp::fixup_after_fork): Call + fhandler_base::fixup_after_fork. + + * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Call + fhandler_base::fixup_after_fork. + +2013-10-26 Corinna Vinschen + + * exception.h (_exception_list): Drop redefinition for x86_64. + * include/exceptions.h: Disable content for x86_64 since it's not + using frame based exception handling anymore. + +2013-10-25 Corinna Vinschen + + * flock.cc (fhandler_base::lock): Only refuse to lock nohandle and + old-style console devices when called to perform BSD flock locking. + Add a FIXME to comment and align description. + + * ntdll.h (THREADINFOCLASS): Following MSDN, rename throughout from + THREAD_INFORMATION_CLASS. + +2013-10-25 Corinna Vinschen + + * devices.in (dev_storage): Map /dev/clipboard to \Device\Null. + * devices.cc: Regenerate. + * fhandler.h (fhandler_dev_clipboard::open): Drop declaration. + * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Drop call to + open. Set private members to 0 and call fhandler_base::dup. + (fhandler_dev_clipboard::open): Remove so that default + fhandler_base::open is used to open \Device\Null. + (set_clipboard): Drop gratuitios call to RegisterClipboardFormatW. + (fhandler_dev_clipboard::close): Call fhandler_base::close from here. + +2013-10-25 Corinna Vinschen + + * fhandler_disk_file.cc (fhandler_base::fstat_fs): Fix comment. + +2013-10-25 Corinna Vinschen + + * fhandler_clipboard.cc (fhandler_dev_clipboard::open): Drop gratuitios + handling of membuffer. It's NULL anyway. + (fhandler_dev_clipboard::lseek): Set membuffer to NULL after freeing + it to avoid subsequent crashes when accessing invalid pointer. + +2013-10-25 Corinna Vinschen + + * devices.in (dev_storage): Map /dev/random and /dev/urandom to + \Device\Null. + * devices.cc: Regenerate. + * fhandler.h (fhandler_dev_random::open): Drop declaration. + (fhandler_dev_random::close): Ditto. + (fhandler_dev_random::crypt_gen_random): Convert to static method. + * fhandler_random.cc (fhandler_dev_random::open): Remove so that default + fhandler_base::open is used to open \Device\Null. + (fhandler_dev_random::close): Ditto. + * fhandler_socket.cc (entropy_source): Delete. + (fhandler_socket::af_local_set_secret): Remove entropy_source code and + call fhandler_dev_random::crypt_gen_random directly instead. + +2013-10-24 Corinna Vinschen + + * fhandler.h (fhandler_dev_zero::lseek): Convert to inline method. + (class fhandler_dev_random): Drop dummy_offset. + (fhandler_dev_random::lseek): Convert to inline method. + (fhandler_dev_dsp::lseek): Ditto. + * fhandler_dsp.cc (fhandler_dev_dsp::lseek): Drop here. + * fhandler_random.cc (fhandler_dev_random::open): Drop setting + dummy_offset. + (fhandler_dev_random::lseek): Drop here. + * fhandler_tape.cc (fhandler_dev_tape::lseek): Make no-op, but keep + old code for reference. + * fhandler_zero.cc (fhandler_dev_zero::lseek): Drop here. + +2013-10-24 Christopher Faylor + + * external.cc (fillout_pinfo): If start_time is 0, wait a while before + returning the pinfo structure. + + * fhandler.cc (fhandler_base::open_setup): Convert from inline. + * fhandler.h (fhandler_base::open_setup): Declare. + * fhandler_console.cc (fhandler_console::open_setup): Always call + fhandler_base::open_setup. + * fhandler_tty.cc (fhandler_pty_slave::open_setup): Ditto. + (fhandler_pty_master::open_setup): Ditto. + +2013-10-24 Corinna Vinschen + + * devices.in (dev_storage): Map /dev/zero and /dev/full to \Device\Null. + * devices.cc: Regenerate. + * dtable.h (struct dtable): Make fhandler_base friend, rather + than fhandler_disk_file. + * fhandler.cc (fhandler_base::open_with_arch): Create unique id. + (fhandler_base::cleanup): Call del_my_locks. + (fhandler_base::fcntl): Handle F_GETLK, F_SETLK and F_SETLKW. + * fhandler.h (fhandler_base::get_dev): Return real device number. + (fhandler_base::set_unique_id): New inline method. + (fhandler_disk_file::lock): Drop declaration. + (fhandler_disk_file::get_dev): New method, return pc.fs_serial_number. + (fhandler_dev_zero::open): Drop declaration. + * fhandler_disk_file.cc (fhandler_disk_file::close): Move + del_my_locks call to fhandler_base::open_with_arch. + (fhandler_disk_file::fcntl): Move handling of locking commands to + fhandler_base::fcntl. + (fhandler_base::open_fs): Drop call to NtAllocateLocallyUniqueId. + * fhandler_zero.cc (fhandler_dev_zero::open): Remove so that default + fhandler_base::open is used to open \Device\Null. + * flock.cc (fixup_lockf_after_exec): Finding a single fhandler is + enough here. + (fhandler_base::lock): Replace fhandler_disk_file::lock. Refuse to lock + nohandle devices. Handle read/write test using POSIX flags. Explain + why. Never fail on SEEK_CUR or SEEK_END, rather assume position 0, + just as Linux. + * net.cc (fdsock): Create unique id. + +2013-10-23 Corinna Vinschen + + * include/cygwin/config.h (_READ_WRITE_BUFSIZE_TYPE): Define. + +2013-10-23 Corinna Vinschen + + * fhandler.cc (fhandler_base::fstat): Drop FH_FULL case to align + /dev/full permissions to Linux. + +2013-10-22 Christopher Faylor + + * fhandler.h (fhandler_base::cleanup): Mark as extern rather than + inline. + * fhandler_base.cc (fhandler_base::cleanup): Define. + * fhandler_tty.cc (fhandler_pty_slave::cleanup): Call fhandler_base::cleanup. + (fhandler_pty_master::cleanup): Ditto. + +2013-10-18 Christopher Faylor + + * fhandler_termios.cc (tty_min::kill_pgrp): Don't send a signal to + myself if this process is exiting. + +2013-10-18 Christopher Faylor + + * tty.cc (tty_list::allocate): Set sid to 0 rather than -1 since -1 is + an error condition. + +2013-10-16 Corinna Vinschen + + * fhandler_process.cc (format_process_ctty): Fix random content of + /proc/$PID/ctty if the process has no controlling tty. Set to just + "\n" instead. + +2013-10-15 Corinna Vinschen + + * autoload.cc (CryptAcquireContextW): Remove. + (CryptGenRandom): Remove. + (CryptReleaseContext): Remove. + (SystemFunction036): Define. Add comment to explain that this is + actually the RtlGenRandom function. + * fhandler.h (class fhandler_dev_random): Drop crypt_prov member. + (fhandler_dev_random::fhandler_dev_random): Define inline. + (fhandler_dev_random::dup): Drop declaration. + * fhandler_random.cc (fhandler_dev_random::fhandler_dev_random): Remove + here. + (fhandler_dev_random::crypt_gen_random): Use RtlGenRandom to drop + dependency to old Crypto API. + (fhandler_dev_random::read): Implement an enhanced version of reading + random bytes from RtlGenRandom for the sake of a better /dev/random + emulation. + (fhandler_dev_random::close): Just return 0 since crypt_prov doesn't + exisyt anymore. + (fhandler_dev_random::dup): Drop entirely for the same reason. + +2013-10-15 Corinna Vinschen + + * mmap.cc (mmap64): Convert pagesize from DWORD to size_t to avoid + a rounding error for allocations beyond 4 Gigs. + +2013-10-05 Christopher Faylor + + * ntdll.h: Guard against new header files. + +2013-09-25 Christopher Faylor + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 26. + +2013-09-25 Christopher Faylor + + * sigproc.h (hold_everything::ischild): Declare as reference. + (hold_everything::hold_everything): Store address of caller's notion of + "ischild". + +2013-09-25 Christopher Faylor + Paul Kunysch + + * thread.cc (semaphore::_getvalue): Set *sval as appropriate. Set + errno and return -1 on error. + +2013-08-31 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Belatedly bump + to 25. + +2013-08-31 Corinna Vinschen + + * heap.cc (RAISEHEAP_SIZE): New definition. + (user_heap_info::sbrk): Make failed commit an error condition again. + Only reserve RAISEHEAP_SIZE sized chunk for further heap reservations + by default. + +2013-08-30 Christopher Faylor + + * cygheap.h (user_heap_info::sbrk): Declare new function. + (user_heap_info::init): Ditto. + * heap.cc (user_heap_info::init): Rename from heap_init(). Avoid + explictly using cygheap->user_heap. + (sbrk): Use user_heap_info method via cygheap->user_heap. + (user_heap_info::sbrk): Renamed from sbrk(). Eliminate explicit use of + cygheap->user_heap. Change some pointer arithmetic to use (char *) for + consistency. + * shared.cc (shared_info::initialize): Change heap_init call to + cygheap->user_heap.init. + +2013-08-30 Corinna Vinschen + + * heap.cc (sbrk): Add a FIXME comment to VirtualFree call. Fix memory + reservation and commit strategy when more memory is requested than + available on the heap. Release newly reserved memory if commiting + it fails. Add more comments to explain what we do. + +2013-08-30 Corinna Vinschen + + * fhandler_tape.cc (mtinfo_drive::open): Handle bus reset gracefully + after opening the device. + +2013-08-30 Christopher Faylor + + * sigproc.cc (pending_signals::add): Properly maintain linked list. + (wait_sig): Use already calculated 'next' element when signal is + blocked. + +2013-08-26 Corinna Vinschen + + * mtinfo.h (class mtinfo_part): Change type of block numbers to int64_t. + (mtinfo_part::initialize): Ditto for nblock parameter in declaration. + (class mtinfo_drive): Change type of block number to int64_t. Change + all parameters indicating a block number to int64_t in method + declarations. + * fhandler_tape.cc (mtinfo_part::initialize): Ditto in definition. + (mtinfo_drive::get_pos): Ditto. Replace low and high with a + ULARGE_INTEGER and use it's components in call to GetTapePosition. + Store full value in block. + (mtinfo_drive::_set_pos): Change type of count parameter to int64_t. + Change call to SetTapePosition accordingly. + (mtinfo_drive::set_pos): Change type of count parameter to int64_t. + Change local variables holding block numbers accordingly. + (mtinfo_drive::get_status): Don't bail out early if fetching media + parameters fails. + (mtinfo_drive::ioctl): Add explicit cast matching receiving type in + MTTELL and MTIOCPOS calls. + +2013-08-23 Corinna Vinschen + + * flock.cc (lockf_t::from_obj_name): Fix test for valid pid. + +2013-08-23 Christopher Faylor + + * spawn.cc (child_info_spawn): Revert previous change. Always set + lpReserved2. + +2013-08-23 Christopher Faylor + + * child_info.h (PROC_MAGIC_GENERIC): Define differently for x86 vs. + x86_64. + +2013-08-23 Corinna Vinschen + + * path.h (enum path_types): Drop definition of PATH_64BITEXEC. + (path_conv::iscygexec32): Drop unused inline function. + (path_conv::iscygexec64): Ditto. + (path_conv::set_cygexec): Remove unnecessary setting of PATH_64BITEXEC. + * spawn.cc (child_info_spawn::worker): Disable setting of + STARTUPINFOW::lpReserved2 and STARTUPINFOW::cbReserved2 for non-Cygwin + child processes. Explain why. + +2013-08-21 Corinna Vinschen + + * fhandler_tape.cc (mtinfo_drive::create_partitions): Allow partitioning + of drives supporting select partitions. + (mtinfo_drive::get_status): Fill in current partition and number of + partitions on tape into mt_resid. + * include/cygwin/mtio.h (struct mtget): Align mt_resid comment to + aforementioned change. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + +2013-08-20 Corinna Vinschen + + * fhandler_tape.cc (mtinfo_drive::create_partitions): Fix long-standing + bug disabling creation of two partitions on drives supporting initiator + partitions. + (mtinfo_drive::set_blocksize): Update media information after setting + blocksize succeeded. + (mtinfo_drive::get_status): Fetch fresh media information. + +2013-08-19 Corinna Vinschen + + * lc_msg.h: Regenerate. + * nlsfuncs.cc (__get_lcid_from_locale): Update list of Script-only + locales to Windows 8. + (__set_charset_from_locale): Take locales added with Windows 8 and 8.1 + into account. + +2013-08-19 Corinna Vinschen + + * fhandler_tape.cc (mtinfo_drive::set_pos): Remove unneeded linebreak. + (mtinfo_drive::get_status): Drop using get_ll when it's not required. + +2013-08-14 Corinna Vinschen + + * include/sys/cygwin.h (struct per_process): Add posix_memalign. Reduce + size of unused2 accordingly. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + * lib/_cygwin_crt0_common.cc (_cygwin_crt0_common): Initialize + u->posix_memalign with address of posix_memalign. + * malloc_wrapper.cc (posix_memalign): Call user-provided posix_memalign + rather than just returning ENOSYS. + * globals.cc (__cygwin_user_data): Initialize posix_memalign member. + +2013-08-09 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 24. + +2013-08-07 Corinna Vinschen + + * fhandler_disk_file.cc (fhandler_base::open_fs): Fix indentation. + +2013-07-31 Christopher Faylor + + * fhandler_tty.cc: Revert accidental checkin. + * update-copyright: Ditto. + +2013-07-31 Christopher Faylor + + * cygheap.cc (cmalloc): Use size_t for size field. + (cmalloc_abort): Ditto. + (crealloc): Ditto. + (crealloc_abort): Ditto. + (ccalloc): Ditto. + (ccalloc_abort): Ditto. + * cygheap_malloc.h (HEAP_USER): Add. + (cmalloc): Use size_t for size field in declaration. + (cmalloc_abort): Ditto. + (crealloc): Ditto. + (crealloc_abort): Ditto. + (ccalloc): Ditto. + (ccalloc_abort): Ditto. + +2013-07-31 Corinna Vinschen + + * path.cc (normalize_posix_path): Don't check existence of / or // dir + in parent dir check. + +2013-07-26 Christopher Faylor + + * environ.cc (tty_is_gone): Delete. + (known): Delete tty, add wincmdln. + * globals.cc: Reorganize list of environment bools, remove explicit = + false for slight load time optimization. + (wincmdln): New global. + * spawn.cc (child_info_spawn::worker): Honor wincmdln. + +2013-07-23 Corinna Vinschen + + * ntdll.h (struct _SEMAPHORE_BASIC_INFORMATION): Define. + (enum _SEMAPHORE_INFORMATION_CLASS): Define. + (NtQuerySemaphore): Declare. + * thread.h (class semaphore): Add member startvalue. + (semaphore::fixup_before_fork): New inline method. + (semaphore::_fixup_before_fork): Declare. + * thread.cc (MTinterface::fixup_before_fork): Additionally call + semaphore::fixup_before_fork. + (semaphore::semaphore): Set currentvalue to -1. Set startvalue to + incoming initializer value. + (semaphore::_getvalue): Just query semaphore using NtQuerySemaphore + rather then using WFSO/Release. + (semaphore::_post): Drop setting currentvalue. It's not thread-safe. + (semaphore::_trywait): Ditto. + (semaphore::_timedwait): Ditto. + (semaphore::_wait): Ditto. + (semaphore::_fixup_before_fork): New method, setting currentvalue from + actual windows semaphore right before fork. + (semaphore::_fixup_after_fork): Drop kludge from 2013-07-10. Drop + FIXME comment. + +2013-07-23 Corinna Vinschen + + * cygtls.cc (well_known_dlls): Add kernelbase.dll. + +2013-07-22 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 23. + +2013-07-21 Corinna Vinschen + + * regex/regcomp.c (wgetnext): Add a kludge to be more glibc compatible. + Add comment to explain. + +2013-07-20 Christopher Faylor + + * exceptions.cc (signal_exit): Remove comment. Use + __builtin_frame_address. + +2013-07-20 Christopher Faylor + + * exceptions.cc (signal_exit): Nope. Nevermind. Dump core + unconditionally. + +2013-07-19 Christopher Faylor + + * exceptions.cc (signal_exit): Add a FIXME comment. + +2013-07-19 Christopher Faylor + + * exceptions.cc (signal_exit): Only dump core when it's a "kernel" + signal. Only use RtlCaptureContext on x86_64. It doesn't seem to do + what's expected on x86. + +2013-07-19 Christopher Faylor + + * spawn.cc (child_info_spawn::worker): Reinstate using temp buffer for + wide character command-line storage. Use wcs method to convert command + line. + * winf.h (lb_wcs): Delete. + (linebuf::wcs): Implement new single-argument method. + +2013-07-19 Christopher Faylor + + * lib/libcmain.c (main): Don't point to last quoted character if the + only thing in the buffer is the program name. + +2013-07-19 Christopher Faylor + + * common.din: Export GetCommandLine{A,W}. + * kernel32.cc: Add includes needed for GetCommandLine functions. + (ucmd): New function. + (cygwin_GetCommandLineW): Ditto. + (cygwin_GetCommandLineA): Ditto. + * spawn.cc (child_info_spawn::worker): Rename one_line -> cmd. Use + lb_wcs macro to generate a wide character version of the line buffer. + Remove duplicate printing of command line. Don't access members of + linebuf directly. + * winf.h: Use pragma once. + (linebuf): Make storage private. + (linebuf::operator size_t): New operator. Return size of buf. + (linebuf::operator wchar_t): New operator. + (linebuf::wcs): New function. + (lb_wcs): New macro. + * include/cygwin/version.h: Bump API minor number to 268. + + * strfuncs.cc: Clarify descriptive file comment. + +2013-07-19 Corinna Vinschen + + * cygtls.cc (_cygtls::remove): Close cw_timer handle, thus avoiding + handle leak. + +2013-07-19 Jon TURNEY + + * cygserver_ipc.h (ipc_retval::ipc_retval): Take ssize_t as argument + to make sure entire ipc_retval union is initialized on all supported + platforms. + +2013-07-18 Corinna Vinschen + + * path.cc (normalize_posix_path): Start checking path before ".." at + dst, rather than at dst_start, otherwise suffer loss of one leading + slash in case of UNC paths. + +2013-07-17 Christopher Faylor + + * winsup.h (cygbench): Fix declaration to match definition. + * dcrt0.cc (initial_env): Remove unused variable. + +2013-07-15 Corinna Vinschen + + Remove /dev/mem, /dev/kmem, /dev/port support. + * Makefile.in (DLL_OFILES): Drop fhandler_mem.o. + (fhandler_mem_CFLAGS): Remove rule. + * devices.in (enum fh_devices): Remove FH_MEM, FH_KMEM and FH_PORT. + * devices.cc: Regenerate. + * dtable.cc (fh_alloc): Drop handling for FH_MEM, FH_KMEM and FH_PORT. + * fhandler.h (class fhandler_dev_mem): Remove. + * fhandler_mem.cc: Remove file. + * globals.cc (ro_u_pmem): Remove. + * mmap.cc (fhandler_dev_mem::mmap): Remove. + (fhandler_dev_mem::munmap): Remove. + (fhandler_dev_mem::fixup_mmap_after_fork): Remove. + +2013-07-15 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 22. + +2013-07-15 Corinna Vinschen + + * path.cc (symlink_native): Fix common prefix search. Enhance comment. + +2013-07-11 Corinna Vinschen + + * uname.cc (uname): Drop unused code. + +2013-07-10 Christopher Faylor + + * gentlsoffsets: Clean up a little. + + * thread.cc (semaphore::_fixup_after_fork): Report on potential problem + parameter. Make sure that currentvalue is never zero. + (semaphore::init): Make cosmetic change. + +2013-07-10 Corinna Vinschen + + * cygwin.sc.in (.text.*): Fold into .text on all platforms. + (.eh_frame): Add section. + * environ.cc (my_findenv): Drop __stdcall attribute. + (getearly): Ditto. + (findenv_func): Drop cast. + +2013-07-03 Christopher Faylor + + * fhandler.cc (fhandler_base::close_with_arch): Make sure that the + archetype is deleted when close_with_arch is referenced *via* the + archetype. + +2013-06-28 Corinna Vinschen + + * path.cc (find_fast_cwd_pointer): Use gas syntax for assembler + description in all comments. Make algorithm work on Windows 8.1 + Preview. + +2013-06-27 Corinna Vinschen + + * dcrt0.cc (child_info_fork::alloc_stack): Fix a comparison to avoid + taking 4K more stack in forked child. + * fork.cc (frok::parent): Print child exit code in hex if sync failed. + +2013-06-24 Yaakov Selkowitz + + * common.din (rawmemchr): Export. + * posix.sgml (std-gnu): Add rawmemchr. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + +2013-06-21 Corinna Vinschen + + * path.cc (cygwin_conv_path): Handle NULL "from" path gracefully. + * path.sgml (func-cygwin-conv-path): Document returning EINVAL if + "from" is NULL. + +2013-06-19 Christopher Faylor + + * winf.h (av::unshift): Make __reg2. + +2013-06-19 Christopher Faylor + + * spawn.cc (child_info_spawn::worker): Eliminate call to newargv.set() + in favor of conglomerated newargv.setup(). Let newargv.setup() decide + when to call dup_all(). Only set argc and argv for cygwin processes. + (av::setup): Rename from av::fixup. Accept argc and argv parameters. + Fill out argv and argc here. Duplicate whole argv structure when this + is a Cygwin executable. + * winf.cc (linebuf::fromargv): Don't bother duplicating argv elements + since they will never be used. + * winf.h (av::set): Delete. + (av::setup): Rename from av::fixup. Add two parameters. + (av::replace0_maybe): Assign calloced to 1 rather than 'true' for + clarity. + (av::dup_maybe): Delete. + (av::dup_all): Set calloced to show that we have duplicated all of the + arguments in the list. + +2013-06-18 Corinna Vinschen + + * nlsfuncs.cc (__collate_range_cmp): Convert input to wchar_t and call + wcscoll since all calling functions are using wide chars. Explain in + preceeding comment. + +2013-06-18 Corinna Vinschen + + * spawn.cc (child_info_spawn::worker): Eliminate wascygexec. + +2013-06-18 Christopher Faylor + + * dcrt0.cc (child_info_fork::alloc_stack): Don't subtract 4096 from + stack pointer since getstack() already does that. + +2013-06-18 Corinna Vinschen + + * gmon.c: Drop gratuitous inclusion of strings.h. Remove __MINGW32__ + around definition of bzero. + +2013-06-18 Corinna Vinschen + + * Makefile.in (VPATH): Drop CONFIG_DIR. + (EXTRA_DLL_OFILES): Remove. + (DLL_OFILES): Remove EXTRA_DLL_OFILES. + (ASFLAGS): Define as -D_WIN64 on x86_64. + (GMON_OFILES): Add mcountFunc.o. + ($(srcdir)/$(TLSOFFSETS_H)): Use target_cpu rather than CONFIG_DIR. + * configure.ac (CONFIG_DIR): Remove definition. + * configure: Regenerate. + * gcrt0.c: Use latest version from Mingw-w64 project. + * gmon.c: Ditto. + * gmon.h: Ditto. + * mcount.c: Ditto. + * mcountFunc.S: Ditto, new file. + * profil.c: Ditto. + * profil.h: Ditto. + * config: Remove entire directory. + +2013-06-17 Corinna Vinschen + + * path.cc (cnt_bs): New inline function. + (symlink_native): Fix creating relative native symlink. + +2013-06-17 Corinna Vinschen + + * fhandler_clipboard.cc (fhandler_dev_clipboard::read): Fix buffer + read access overrun when pos > 0. + +2013-06-17 Corinna Vinschen + + * times.cc (GetSystemTimePreciseAsFileTime): Add comment to declaration. + (__to_clock_t): Remove a debug_printf. + (times): Align syscall_printf to debug output of other system calls. + +2013-06-14 Corinna Vinschen + + * autoload.cc (GetSystemTimePreciseAsFileTime): Define. + * times.cc (GetSystemTimePreciseAsFileTime): Temporarily declare here + to workaround missing definition in 32 bit w32api headers. + (get_system_time): New always inline function to call either + GetSystemTimePreciseAsFileTime or GetSystemTimeAsFileTime on a per OS + basis. Call throughout instead of GetSystemTimeAsFileTime. + * wincap.h (wincaps::has_precise_system_time): New element. + * wincap.cc: Implement above element throughout. + +2013-06-14 Corinna Vinschen + + Streamline time/times functionality. Remove last remains of former + Windows 9x compatibility. + * fhandler_disk_file.cc (fhandler_base::fstat_helper): Drop now unneeded + casts in calls to_timestruc_t. + (fhandler_base::utimens_fs): Ditto for timespec_to_filetime. + * fhandler_proc.cc (format_proc_stat): Ditto for to_time_t. + * hires.h (class hires_ms): Remove unused member initime_ns. + Remove declarations for timeGetTime_ns and prime. + (hires_ms::uptime): Remove. + * posix_ipc.cc (ipc_cond_timedwait): Ditto for timespec_to_filetime. + * fhandler_registry.cc (fhandler_registry::fstat): Add cast. + * resource.cc (fill_rusage): Call NtQueryInformationProcess rather than + GetProcessTimes to deal with LARGE_INTEGER rather than FILETIME. + * times.cc: Simplify time handling. Throughout, use LARGE_INTEGER + rather than FILETIME to simplify computations. Throughout use + {u}int64_t rather than {unsigned} long long. Drop unneeded casts since + NSPERSEC is 64 bit anyway. + (systime_ns): Remove. + (times): Call NtQuerySystemInformation to fetch boot time. Call + NtQueryInformationProcess rather than GetProcessTimes to deal with + LARGE_INTEGER rather than FILETIME. Call GetSystemTimeAsFileTime. + (totimeval): Use constant 1000000 as in other functions. + (time_t_to_filetime): Remove. + (to_time_t): Change return type to time_t. + (time_as_timestruc_t): Rename filetime to systime. + (time): Ditto. Add cast. + (hires_ns::nsecs): Fix return type cast. + (hires_ms::timeGetTime_ns): Remove. + (hires_ns::prime): Remove. + (hires_ms::nsecs): Drop call to prime. Call GetSystemTimeAsFileTime + directly. Subtract FACTOR here since it's the only function needing + to do so. + (minperiod): Cosmetically change to ULONG. + (hires_ns::resolution): Fix return type cast. + (hires_ms::resolution): Simplify, rely on NtQueryTimerResolution. + * winsup.h: Align time related prototypes to above changes. + +2013-06-13 Corinna Vinschen + + * net.cc (gen_old_if_name): New function to generate short interface + names for old pre-1.7 applications. + (get_ifs): Call gen_old_if_name for said old applications. + +2013-06-13 Corinna Vinschen + + * posix.sgml (fcntl, flock, lockf): Point to implementation notes. + +2013-06-12 Fedin Pavel + + * path.cc (normalize_posix_path): Fix long-standing problem which + allows to access files via ".." using an invalid POSIX path. + +2013-06-11 Corinna Vinschen + + * winver.rc (FileDescription): Remove (R). + +2013-06-10 Corinna Vinschen + + * sec_auth.cc (get_user_groups): Don't handle ERROR_ACCESS_DENIED as + error. Explain why. + +2013-06-08 Christopher Faylor + + * exceptions.cc (try_to_debug): Don't use yield() when waiting for + another process. + (sigpacket::setup_handler): Fix long-standing problem where loop could + exit with lock held. + +2013-06-08 Christopher Faylor + + * miscfuncs.cc (yield): Revert (after researching) to calling Sleep + with 0. We don't want to actually sleep when calling this function. + +2013-06-08 Christopher Faylor + + * cygwait.cc (cygwait): Remove lock around sig retrieval since this + code is essentially guarded by thread-specific signal_arrived. + * exceptions.cc (_cygtls::handle_SIGCONT): Simplify. Eliminate + lock/unlock since code is guarded by signal_arrived. + +2013-06-07 Corinna Vinschen + + * winver.rc (LegalCopyright): Belatedly bump to 2013. + +2013-06-07 Christopher Faylor + + * exceptions.cc (_cygtls::handle_SIGCONT): Reinstate previous behavior + but make sure that yield() isn't called when signal stack is locked. + +2013-06-07 Christopher Faylor + + * exceptions.cc (exception::handle): Add comment explaining si_addr + behavior. + +2013-06-07 Christopher Faylor + + * DevNotes: Add entry cgf-000023. + * sigproc.cc (exit_thread): Remove now-unneeded sleep code. + +2013-06-07 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 21. + +2013-06-07 Corinna Vinschen + + * posix.sgml (std-notes): Fix typo. + +2013-06-07 Corinna Vinschen + + * fhandler_disk_file.cc (fhandler_disk_file::pread): Skip to non-atomic + code if mandatory locking is used on this descriptor. Explain why. + (fhandler_disk_file::pwrite): Ditto. + * posix.sgml (std-notes): Extend description of file locking. + +2013-06-06 Corinna Vinschen + + * exceptions.cc (_cygtls::handle_SIGCONT): Simplify loop waiting for + sig_handle_tty_stop to wake up. Make sure to unlock before calling + yield to avoid starvation of sig_handle_tty_stop. Add comments. + * miscfuncs.cc (yield): Explain why yield should never be called under + _cygtls::lock conditions. Call SleepEx with 1ms timeout. Explain why. + +2013-06-05 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 20. + +2013-06-04 Corinna Vinschen + + * fhandler.cc (fhandler_base::lock): Move to flock.cc. + (fhandler_base::fixup_after_exec): Reset mandatory_locking. + * fhandler.h (class fhandler_base): Add mandatory_locking status flag. + Add mandatory_locking accessor methods. Accommodate change throughout. + (fhandler_base::mand_lock): Declare. + (class fhandler_disk_file): Drop in favor of new status flag. + * (fhandler_disk_file::fcntl): Call need_fork_fixup if mandatory_locking + flag gets set. + * flock.cc (fhandler_base::lock): Define here. + (flock): Handle mandatory_locking. + (lockf): Ditto. + (fhandler_base::mand_lock): Define. + +2013-06-03 Corinna Vinschen + + * sigproc.cc (exit_thread): Allow to exit the thread while running + global dtors. Explain why. + +2013-06-02 Corinna Vinschen + + * autoload.cc (CancelSynchronousIo): Define. + * fcntl.cc (fcntl64): Drop handling of locking commands. + * fhandler.h (class fhandler_disk_file): Add mandatory_locking. + (fhandler_disk_file::fcntl): Declare. + (fhandler_disk_file::mand_lock): Declare. + * fhandler_disk_file.cc (fhandler_disk_file::fhandler_disk_file): + Initialize mandatory_locking. + (fhandler_disk_file::fcntl): New method. Handle F_LCK_MANDATORY and + locking commands. + (fhandler_disk_file::dup): Duplicate mandatory_locking. Fix a bug + when duplicating prw_handle failed. + (fhandler_disk_file::fixup_after_fork): Reset mandatory_locking. + * flock.cc (fhandler_disk_file::lock): Add comment. + (struct lock_parms): New struct to pass parameters to blocking_lock_thr + thread function. + (blocking_lock_thr): New thread function. + (fhandler_disk_file::mand_lock): New methof implementing mandatory + locking with Windows semantics. + * ntdll.h (NtLockFile): Declare. + (NtUnlockFile): Declare. + * include/fcntl.h: Fix a comment. + (F_LCK_MANDATORY): Define. Add lengthy comment to explain. + +2013-06-02 Corinna Vinschen + + * exceptions.cc (exception::handle): Resurrect accidentally lost + patch from 2009-07-22: Set si_addr according to POSIX for SIGSEGV. + +2013-05-31 Corinna Vinschen + + * include/sys/socket.h: Move SHUT_xx definitions from here... + * include/cygwin/socket.h: ...to here. + +2013-05-31 Corinna Vinschen + + * include/cygwin/if.h: Include cygwin/socket.h rather than sys/socket.h + to avoid circular dependency resulting in bogus compile time warnings. + +2013-05-28 Corinna Vinschen + + * fhandler_procsys.cc (fhandler_procsys::read): Just call + fhandler_base::raw_read from here. Drop comment. + (fhandler_procsys::write): Drop comment. + +2013-05-27 Corinna Vinschen + + * dll_init.cc (dll_list::topsort): Fix early-return condition to + accommodate process with all runtime loaded DLLs already dlclosed + at fork time. + * gendef (_sigfe_maybe): Fix code handling early return if we don't + have a tls, broken on 2013-05-21. + +2013-05-24 Corinna Vinschen + + * Makefile.in (DEFS): Unused, remove. + (COMPILE.cc): Move -mno-use-libstdc-wrappers flag from here... + ($(TEST_DLL_NAME)): ...to here since it's a link time flag. + +2013-05-24 Corinna Vinschen + + * pinfo.cc (pinfo::status_exit): Enhance comment. + +2013-05-24 Corinna Vinschen + + * environ.cc (win_env::add_cache): Set the Windows environment variable + using wide chars to make sure native chars don't get scrambled. + * environ.h (build_env): Fix formatting in declaration. + * pinfo.cc (pinfo::status_exit): Handle STATUS_NO_MEMORY. Explain why. + +2013-05-24 Corinna Vinschen + + * fork.cc (frok::parent): Always set CREATE_UNICODE_ENVIRONMENT flag. + Explain why. + +2013-05-23 Corinna Vinschen + + * fork.cc (frok::parent): Call CreateProcessW with command line set + to the parent command line. Change comment to explain why. + +2013-05-23 Corinna Vinschen + + * dcrt0.cc (child_info_fork::alloc_stack_hard_way): Fix datatype of + stacksize to SIZE_T. Cast to SIZE_T in pointer arithmetic. Slightly + enhance output in case of a fatal error. + * fork.cc (frok::parent): Always set ch.stackaddr to DeallocationStack + value of current thread to help stack reservation in + child_info_fork::alloc_stack_hard_way along. Simplify subsequent code + storing stack values in ch. Print guardsize in hex, too. + +2013-05-23 Corinna Vinschen + + * environ.cc (set_winsymlinks): Handle "winsymlinks:nativestrict" + option. On pre-Vista warn the user if the "winsymlinks:native*" option + is set. + * globals.cc (enum winsym_t): Add WSYM_nativestrict. + * path.cc (symlink_native): Don't create native symlink if target + does not exist. Explain why. Improve comments. + (symlink_worker): Change AFS symlink handling to WSYM_nativestrict. + Handle WSYM_nativestrict throughout. Change condition for bail out + to wsym_type == WSYM_nativestrict. Add comment. Fix formatting. + * shared_info.h (CURR_USER_MAGIC): Change to reflect change in + class user_info. + (class user_info): Add member warned_nonativesyms. + +2013-05-22 Corinna Vinschen + + * spinlock.h (ULONG): Replace LONG operator with ULONG to accommodate + the fact that CURR_SHARED_MAGIC and USER_SHARED_MAGIC are unsigned + values. + * shared.cc (shared_info::initialize): Drop explicit cast here. + +2013-05-21 Corinna Vinschen + + * Makefile.in (DLL_OFILES): Add arc4random.o. + * common.din: Export arc4random, arc4random_addrandom, arc4random_buf, + arc4random_stir and arc4random_uniform. + * mktemp.cc (arc4random): Remove static replacement function. + * posix.sgml (std-bsd): Add arc4random functions. + * include/cygwin/stdlib.h: Declare arc4random functions. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + * libc/arc4random.cc: New file implementing arc4random functions taken + from FreeBSD. + +2013-05-21 Corinna Vinschen + + * globals.cc (__isthreaded): New global variable. Explain what it's + used for. + * miscfuncs.cc (thread_wrapper): Set __isthreaded to 1 here. + +2013-05-21 Corinna Vinschen + + * fhandler.h (class fhandler_dev_random): Change type of pseudo to + uint32_t to make sure it's 32 bit on all supported platforms. + +2013-05-21 Corinna Vinschen + + x86_64 only: + * gendef (_sigfe_maybe): Drop pushing %r12, use %r10 instead since we + don't call yield anymore. + (_sigfe): Ditto. + (_sigbe): Ditto. + +2013-05-21 Corinna Vinschen + + * libc/base64.c: New file. + * Makefile.in (DLL_OFILES): Add base64.o. + * common.din: Export __b64_ntop and __b64_pton. + * posix.sgml (std-bsd): Add __b64_ntop and __b64_pton. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + +2013-05-21 Corinna Vinschen + + * syscalls.cc (open): Only return ENOTDIR if file exists. + +2013-05-16 Christopher Faylor + + * sigproc.cc (sig_hold): Delete. + (sigheld): Delete. + (sig_send): Eliminate special-case __SIGHOLD handling. + (wait_sig): Just flag when signals are on hold and add them to the + queue rather than stalling the wait_sig loop. Clear the flag when + __SIGNOHOLD is specified. + +2013-05-14 Corinna Vinschen + + * Makefile.in (devices_CFLAGS): Drop -Os. + +2013-05-14 Corinna Vinschen + + * Makefile.in (localtime_CFLAGS): Define as -fwrapv since localtime + code requires int overflows to be fully defined. + * localtime.cc: Align a bit more to upstream code. + +2013-05-14 Corinna Vinschen + + * grp.cc (get_groups): Convert to void function. + (initgroups32): Accommodate the aforementioned change. + (getgrouplist): Ditto. + +2013-05-14 Corinna Vinschen + + * grp.cc (get_groups): Never return error. Always create a group list, + even if it's empty. + +2013-05-13 Christopher Faylor + + * include/cygwin/version.h: Bump api minor number to reflect previous + change. + +2013-05-13 Christopher Faylor + + * i686.din: Remove _strtold. + * x86_64.din: Move strtold definition... + * common.din: ...to here. + +2013-05-07 Christopher Faylor + + * fhandler_tty.cc (fhandler_pty_common::__acquire_output_mutex): Never + wait an INFINITE amount of time. Instead default to 1/10 second. + (fhandler_pty_slave::open): Just default to INFINITE wait rather than + (now) waiting longer than other similar calls. + +2013-05-03 Christopher Faylor + + * spawn.cc (ILLEGAL_SIG_FUNC_PTR): New define. + (system_call_handle): Rename from system_call_cleanup. + (is_system_call): New convenience method. + (system_call_handle::system_call_handle): Use ILLEGAL_SIG_FUNC_PTR + rather than cast. Call sig_send here rather than in caller. + Initialize oldint. + (system_call_handle::arm): New function pulled from constructor. + (~system_call_handle::system_call_handle): Use is_system_call(). + (child_info_spawn::worker): Use system_call_handle to set up for system + call early. Use arm call prior to waiting for child to properly set up + signal handling. Move comment closer to code it is commenting on. + +2013-05-01 Christopher Faylor + + * resource.cc (setrlimit): Use consistent commenting style. Return + EINVAL when rlim_cur > rlim_max. + +2013-04-30 Yaakov Selkowitz + + Throughout, (mainly in fhandler*) fix remaining gcc 4.7 mismatch + warnings between regparm definitions and declarations. + * smallprint.cc (__small_vswprintf): Conditionalize declaration and + setting of l_opt for only x86_64. + * spawn.cc (child_info_spawn::worker): Remove unused 'pid' variable. + * thread.cc (verifyable_object_isvalid): Temporarily define as + non-inline with gcc 4.7+, regardless of target. + +2013-04-30 Christopher Faylor + + * gendef: Fix sigfe.s typo. + +2013-04-30 Christopher Faylor + + * spawn.cc (system_call_cleanup): Rename from pthread_cleanup. Extend + functionality. + (system_call_cleanup::system_call_cleanup): Set up signals like + system() requires. Unblock previously-blocked signal handling. + (system_call_cleanup::~system_call_cleanup): Restore signal handling + after system(). + (child_info_spawn::worker): Put signals on hold and use + system_call_cleanup class to set and restore signals rather than doing + it prior to to running the program. Remove the ill-conceived + pthread_cleanup stuff. + +2013-04-30 Christopher Faylor + + * exceptions.cc (cygwin_exception::dumpstack): Guard against wild + pointer dereference. + (CYG_EXC_CONTINUE_EXECUTION): Define based on standard Windows + definition. + (CYG_EXC_CONTINUE_SEARCH): Ditto. + (exception::handle): Move andreas detection earlier. Make comment + clearer. + (signal_exit): Set core-dumped flag. + +2013-04-30 Christopher Faylor + + * i686.din: New file. + * x86_64.din: New file. + * common.din: New file. + * cygwin.din: Delete. + * cygwin64.din: Delete. + * gendef: Rework to take options rather than using positional + parameters. Accept multiple files as input. + * Makefile.in: Rework to allow multiple .din files as input to gendef. + * configure.in: Change names of .din files to be expressively target + specific. + * aclocal.m4: Regenerate. + * configure: Ditto. + +2013-04-29 Christopher Faylor + + * autoload.cc (CreateSymbolicLinkW): Rename from CreateSymbolicLink. + +2013-04-26 Corinna Vinschen + + * fcntl.cc (fcntl): Define as export alias for fcntl64 on x86_64. + +2013-04-24 Corinna Vinschen + + * autoload.cc (CreateSymbolicLink): Define. + * environ.cc (set_winsymlinks): Set allow_winsymlinks. + (parse_thing): Change "winsymlinks" to set by function. + * globals.cc (enum winsym_t): Define. + (allow_winsymlinks): Define as winsym_t. + (ro_u_afs): New R/O Unicode string. + * mount.cc (fs_info::update): Fix comment. Handle AFS. + (fs_names): Add "afs". + * mount.h (enum fs_info_type): Add afs. + (class fs_info): Implement afs. + * path.cc (symlink): Drop third parameter in call to symlink_worker. + (symlink_nfs): New function. + (symlink_native): New function. + (symlink_worker): Drop third argument. Handle native symlink type by + calling symlink_native. Move code to handle NFS to symlink_nfs. Fix + formatting. Slightly restructure code. + * path.h (class path_conv): Add fs_is_afs method. + (symlink_worker): Declare here. + * security.h: Define privilege constants as unsigned int instead of as + unsigned long. + * syscalls.cc (mknod_worker): Set third parameter in symlink_worker + call to WSYM_lnk. + * winsup.h (symlink_worker): Drop declaration here. + +2013-04-23 Corinna Vinschen + + * cygwin64.din (_setjmp): Export. + (_longjmp): Export. + +2013-04-23 Corinna Vinschen + + * Merge in cygwin-64bit-branch. See ChangeLog.64bit for details. + +2013-04-22 Corinna Vinschen + + * include/sys/queue.h: Delete in favor of more complete newlib file. + +2013-04-22 Corinna Vinschen + + Adapt to changes in newlib's sys/cdefs.h: + * include/sys/sysinfo.h (struct sysinfo): Rename __unused member to __f. + * libc/fts.c (__FBSDID): Drop definition. + * regex/regexec.c (__unused): Drop definition. + +2013-04-22 Corinna Vinschen + + * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 19. + +2013-04-16 Corinna Vinschen + + * glob.cc: Include winsup.h before anything else. + +2013-04-12 Corinna Vinschen + + * path.cc (symlink_info::check): Drop PC_KEEP_HANDLE flag for + unrecognized reparse points as well. Reorganize code and comments + handling reparse points for better readability. + +2013-04-11 Corinna Vinschen + + * hires.h (hires_ns::nsecs): Declare with bool parameter. + * times.cc (hires_ns::nsecs): Take bool parameter. If set to true, + don't use prime value (== return system wide absolute value). + +2013-04-08 Christopher Faylor + + * cygtls.h (_cygtls::reset_signal_arrived): Actually reset the + signal_arrived event. + (_cygtls::handle_SIGCONT): Declare new function. + * cygwait.cc (is_cw_sig_handle): Delete. + (is_cw_sig_cont): New convenience define. + (cygwait): Clear signal if is_cw_sig_cont and we got a SIGCONT. + * cygwait.h (cw_wait_mask): Add cw_sig_cont. + * exceptions.cc (sig_handle_tty_stop): Tighten "incyg" region. Use + cw_sig_cont param for cygwait. Don't zero signal here outside of lock. + (sigpacket::setup_handler): Don't check for in_forkee since we will now + never get here in that state. + (_cygtls::handle_SIGCONT): Define new function. + (sigpacket::process): Call handle_SIGCONT early to deal with SIGCONT. + Nuke continue_now handling. Allow SIGKILL to kill a suspended process. + Delete a couple of now-unneeded labels. + (_cygtls::call_signal_handler): Reorganize setting of incyg within + lock. + * sigproc.cc (pending_signals): Simplify. + (pending_signals::clear): New method. + (_cygtls::remove_wq): Reorganize to always close wq.thread_ev if it + exists to avoid handle leaks. + (sig_clear): Simplify by just calling sigq.clear(). + (sig_dispatch_pending): Always call sigq.pending even in signal thread + to force another loop in wait_sig. + (sig_send): Remove a "goto out" just before out: label. + (pending_signals::add): Simplify. + (pending_signals::del): Delete. + (pending_signals::next): Delete. + (wait_sig): Define variable q to be the start of the signal queue. + Just iterate through sigq queue, deleting processed or zeroed signals. + Only set clearwait when the current signal is SIGCHLD. + * sigproc.h: Add a comment about an unused enum. + +2013-04-08 Corinna Vinschen + + * fhandler_socket.cc (get_inet_addr): Handle abstract AF_LOCAL socket. + (fhandler_socket::recv_internal): Create abstract socket name for + AF_LOCAL datagram sockets. Explain why we do that. + +2013-04-07 Christopher Faylor + + * cygheap.cc (init_cygheap::find_tls): Add a comment. + * dcrt0.cc (parent_sigmask): Delete. + (dll_crt0_1): Use spawn_info->moreinfo->sigmask rather than saved + parent signal mask. + * thread.cc (pthread::thread_init_wrapper): Add comment stressing the + importance of maintaining ordering of statements. + +2013-04-05 Corinna Vinschen + + * mmap.cc (is_mmapped_region): Call LIST_UNLOCK on premature return. + +2013-04-03 Corinna Vinschen + + * fhandler_proc.cc (format_proc_loadavg): Raise too small buffer size + to avoid overwriting unrelated cygheap memory. + +2013-04-03 Corinna Vinschen + + * path.cc (class suffix_scan): Add member namelen. + (suffix_scan::name_len): New method. + (suffix_scan::has): Store namelen since we have it already anyway. + Add a bit of explanation and a FIXME to comment. + (suffix_scan::next): Never attach extra .lnk suffix if resulting + filename length exceeds NAME_LEN. + (symlink_info::check): Bail out immediately with ENAMETOOLONG if + filename length exceeds NAME_LEN. + +2013-03-31 Christopher Faylor + + * child_info.h (cygheap_exec_info::sigmask): Declare new field. + * cygheap.cc (init_cygheap::find_tls): Rename threadlist_ix -> ix. + Only take one pass through thread list, looking for eligible threads to + signal. Set a new param indicating that function has found a sigwait* + mask. + * cygheap.h (init_cygheap::find_tls): Reflect new parameter. + * dcrt0.cc (parent_sigmask): New variable. + (child_info_spawn::handle_spawn): Save parent's signal mask here. + (dll_crt0_1): Restore parent's signal mask to tls sigmask as + appropriate. Call sig_dispatch_pending to flush signal queue when we + can finally do something with signals. + * exceptions.cc (sigpacket::process): Avoid attempting to handle + signals if we haven't finished initializing. Rely on the fact that + find_tls will do mask checking and don't do it again. Delete ill-named + 'dummy' variable. + * sigproc.cc (cygheap_exec_info::alloc): Save calling thread's signal + mask in new sigmask field. + (wait_sig): Try to debug when WFSO fails and DEBUGGING is defined. + * thread.cc (pthread::set_tls_self_pointer): Make this a true automatic + method rather than inexplicably relying on a thread parameter. + (pthread::thread_init_wrapper): Accommodate set_tls_self_pointer change + to non-static. Initialize sigmask before setting tid or suffer signal + races. + * thread.h (pthread::set_tls_self_pointer): Make non-static, delete + parameter. + +2013-03-29 Corinna Vinschen + + * cygthread.cc (cygthread::terminate_thread): Only try to free + thread stack on systems not freeing it by themselves. + * wincap.h (wincaps::terminate_thread_frees_stack): New element. + * wincap.cc: Implement above element throughout. + +2013-03-29 Christopher Faylor + + * pinfo.h (pinfo::status_exit): Rename from former static function in + pinfo.cc. + (pinfo::operator == (char *)): Remove unused operator. + * pinfo.cc (pinfo::status_exit): Move this function info pinfo class. + Use progname from the pinfo rather than myself. Be defensive when + inspecting procinfo. + +2013-03-29 Christopher Faylor + + * sigproc.cc (wait_sig): Avoid uninitialized use of nb when retrying. + Consolidate two error messages into one. + +2013-03-28 Christopher Faylor + + * sigproc.cc (pending_signals::retry): Declare new element. + (pending_signals::pending): Force an additional loop through wait_sig + by setting retry whenever this function is called. + (wait_sig): Reorganize to wait for SIGHOLD at bottom. Always add + signal to pending queue and work on whole queue rather than just the + one signal. Loop when sigq.retry is set. Fix long-broken check for + SIGCHLD after queued signals. + +2013-03-28 Christopher Faylor + + * exceptions.cc (exception::handle): Generalize comment. + +2013-03-09 Christopher Faylor + + * cygtls.h (_cygtls::signal_debugger): Change argument type. + (_cygtls::copy_context): Delete declaration. + * exceptions.cc (exception::handle): Don't call copy_context() here. + Move signal_handler call earlier and always call it. + (_cygtls::copy_context): Delete definition. + (_cygtls::signal_debugger): Move copy_context logic here. Suspend + thread receiving signal before gathering context information. + +2013-03-08 Christopher Faylor + + * spawn.cc (child_info_spawn::worker): Save and restore my_wr_proc_pipe + around non-execing operations to avoid handle leak seen in + http://cygwin.com/ml/cygwin/2013-03/msg00152.html . + +2013-03-07 Corinna Vinschen + + * include/sys/un.h (UNIX_PATH_MAX): Rename from UNIX_PATH_LEN to + follow Linux. + * fhandler_socket.cc: Change UNIX_PATH_LEN to UNIX_PATH_MAX throughout. + (fhandler_socket::recv_internal): Don't return prematurely in case of + successful return. For AF_LOCAL sockets, overwrite returned AF_INET + name with AF_LOCAL name. + +2013-03-07 Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::bind): Fix check for AF_LOCAL + filename length to allow non-NUL terminated strings within namelen + bytes. Copy over sun_path to local array sun_path to have a + NUL-terminated string for subsequent function calls. Move path_conv + check before OS bind call to not bind the socket before being sure + the file doesn't exist. Add and fix comments. + +2013-03-06 Corinna Vinschen + + * mount.cc (fs_names): Add trailing NULL element to avoid potential + SEGV in format_proc_filesystems. + +2013-03-01 Christopher Faylor + + * exceptions.cc (exception::handle): Eliminate buggy recursed variable; + just check if we're exiting. + +2013-02-26 Corinna Vinschen + + * include/pthread.h (pthread_atfork): Add missing declaration. + +2013-02-20 Yaakov Selkowitz + + * include/error.h (error_message_count): Declare as dllimport. + (error_one_per_line): Ditto. + (error_print_progname): Ditto. + +2013-02-08 Corinna Vinschen + + * child_info.h (CURR_CHILD_INFO_MAGIC): Update. + (class child_info_fork): Drop extraneous semicolon. + +2013-02-04 Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::bind): Fix error code for + empty filename. + +2013-02-04 Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::bind): Fix length check of + AF_LOCAL filename so it never accesses memory beyond namelen. Also + make sure filename is NUL-terminated. + +2013-01-31 Christopher Faylor + + * DevNotes: Add entry cgf-000022. + * cygtls.h (_cygtls::func): Define as a sa_sigaction style function. + * exceptions.cc (sig_handle_tty_stop): Ditto. + (_cygtls::interrupt_setup): Fix coercion to accommodate 'func' change. + (ctrl_c_handler): Use tty kill_pgrp to send a signal. + (sigpacket::process): Don't process sigflush here. + (_cygtls::call_signal_handler): Reorganize to avoid a race. Always + call sa_sigaction style function. + * fhandler_termios.cc (is_flush_sig): Define new function. + (tty_min::kill_pgrp): Handle tty flush when signal detected. + (fhandler_termios::bg_check): Be slightly more paranoid about checking + for valid tty. + (fhandler_termios::sigflush): Don't flush unless tty owner. + * fhandler_tty.cc (fhandler_pty_slave::ioctl): Use tty kill_pgrp to + send signal. + (fhandler_pty_master::ioctl): Ditto. + * signal.cc (killsys): Delete definition. + * sigproc.h (killsys): Delete declaration. + * include/cygwin/signal.h (siginfo_t): Simplify union/struct nesting + slightly. Implement mechanism to allow cygwin data passing. + +2013-01-23 Christopher Faylor + + * miscfuncs.cc (__import_address): Check if malloc field points + directly at 'malloc'. + +2013-01-23 Christopher Faylor + + * miscfuncs.cc (__import_address): On second thought, the chance that + this pointer could be NULL is very low so don't bother checking for it. + +2013-01-23 Christopher Faylor + + * exceptions.cc (exception::handle): Make attempt to recursively dump + stack fatal. + +2013-01-22 Christopher Faylor + + * miscfuncs.cc (__import_address): Avoid NULL explicitly. + +2013-01-22 Christopher Faylor + + * miscfuncs.cc (__import_address): Avoid treating random instructions + as import jump. + * malloc_wrapper.cc (malloc_init): Remove comment about 64-bit. + +2013-01-21 Christopher Faylor + + * dcrt0.cc (dll_crt0_1): Comment assumption. + * exceptions.cc (sigpacket::setup_handler): Avoid sending signals + during fork processing. + +2013-01-21 Christopher Faylor + + * dcrt0.cc (dll_crt0_1): Flag that we are working "incyg". Handle any + signals (presumably exiting signals) which may have come in while we + are in the process of setting up. + +2013-01-21 Christopher Faylor + + * update-copyright: Recognize configure.ac scripts too. + +2013-01-21 Christopher Faylor + + * cygerrno.h (__reg3): Define. + * cygmalloc.h (__reg3): Ditto. + +2013-01-21 Christopher Faylor + + * cygerrno.h: Conditionally define __regN for cygserver. + +2013-01-20 Christopher Faylor + + * malloc_wrapper.cc (malloc_init): Re-add inadvertently dropped comment + which explains what's going on with the use_internal calculation. + +2013-01-20 Christopher Faylor + + Throughout, update copyrights to reflect dates which correspond to + main-branch checkins. Regularize copyright format. + +2013-01-20 Christopher Faylor + + Throughout, change __attribute__ ((regparm (N))) to just __regN. + Throughout, (mainly in fhandler*) start fixing gcc 4.7.2 mismatch + between regparm definitions and declarations. + * gendef: Define some functions to take @ declaration to accommodate + _regN defines which use __stdcall. + * gentls_offsets: Define __regN macros as empty. + * autoload.cc (wsock_init): Remove unneeded regparm attribute. + * winsup.h (__reg1): Define. + (__reg2): Define. + (__reg3): Define. + + * advapi32.cc (DuplicateTokenEx): Coerce some initializers to avoid + warnings from gcc 4.7.2. + * exceptions.cc (status_info): Declare struct to use NTSTATUS. + (cygwin_exception::dump_exception): Coerce e->ExceptionCode to + NTSTATUS. + * fhandler_clipboard.cc (cygnativeformat): Redefine as UINT to avoid + gcc 4.7.2 warnings. + (fhandler_dev_clipboard::read): Ditto. + +2013-01-20 Christopher Faylor + + * update-copyright (update_maybe): Accommodate perl-style copyright + comments. + +2013-01-20 Christopher Faylor + + * update-copyright: Silently skip nonexistent files. Display filename + on update. Don't update non-Red Hat copyrights. + +2013-01-20 Christopher Faylor + + * update-copyright: Update standard copyright information based on cvs + log and current sandbox status. + +2013-01-20 Christopher Faylor + + * malloc_wrapper.cc: Change 'use_internal_malloc' to 'use_internal' + throughout. + (export_malloc_called): Delete. + (internal_malloc_determined): New variable. + (malloc_init): Control calculation of internal/external malloc based on + 'internal_malloc_determined'. Use import_address() to determine if + malloc in user_data is ours or not. + * miscfuncs.cc (thread_wrapper): Make static. + (__import_address): Define new function. + * miscfuncs.h (import_address): New define. + (__import_address): Declare new function. + +2013-01-20 Christopher Faylor + + * sigproc.cc (sig_dispatch_pending): Add correct regparm attributes to + match declaration. + (pid_exists): Ditto. + (proc_subproc): Ditto. + (sig_clear): Ditto. + (sig_send): Ditto. + (checkstate): Ditto. + +2013-01-19 Corinna Vinschen + + * syscalls.cc (rename): Remove ill-conceived NFS workaround from + 2013-01-10 for self-inflicted NFS server problem. + +2013-01-19 Christopher Faylor + + * exceptions.cc (ctrl_c_handler): Remove special-case handler for + "cygwin_finished_initializing". + * sigproc.cc (exit_thread): Undefine ExitThread earlier to avoid + recursion on error return. + +2013-01-18 Corinna Vinschen + + * errno.cc (errmap): Map ERROR_LOCK_VIOLATION to EBUSY. + +2013-01-18 Corinna Vinschen + + * mmap.cc (handler_disk_file::msync): Add call to FlushFileBuffers + to implement MS_SYNC. + +2013-01-17 Christopher Faylor + + * mmap.cc (handler_disk_file::msync): Retry up to 99 times if + FlushViewOFile fails with ERROR_LOCK_VIOLATION. + +2013-01-16 Christopher Faylor + + * sigproc.cc (no_signals_available): Finally remove this macro + entirely. + (exit_thread): Ensure process lock is released on error exit. + (sig_send): Simplify "its_me" test. Remove no_signals_available tests. + +2013-01-16 Christopher Faylor + + * pthread.cc (pthread_exit): Add kludge to accommodate noreturn attribute. + +2013-01-14 Antti Kantee + + * include/pthread.h (pthread_exit): Mark as "noreturn". + +2013-01-14 Christopher Faylor + + * exceptions.cc (signal_exit): Move captive process termination... + (_cygtls::interrupt_setup): ...into here. + (sigpacket::process): Simplify setting of handler when have_execed. + (_cygtls::interrupt_setup): Don't call proc_subproc when we've execed. + * globals.cc (exit_states): Delete unneeded ES_EXEC_EXIT. + * pinfo.cc (pinfo::exit): Change debugging output. Call proc_terminate + rather than the now-obsolete sigproc_terminate. Don't set exit_state + to ES_EXEC_EXIT. Set exit_state to ES_FINAL later. + * sigproc.cc (sigproc_terminate): Delete function. + (wait_sig): Don't call proc_subproc if have_execed. + * sigproc.h (sigproc_terminate): Delete declaration. + * sync.h (lock_process::lock_process): Don't set exit_state to + ES_PROCESS_LOCKED. + (lock_process::operator LONG): Define. + +2013-01-11 Christopher Faylor + + * DevNotes: Add entry cgf-000021. + * select.cc (select): Unconditionally return when a signal is detected. + (select_stuff::wait): Ditto. + +2013-01-11 Corinna Vinschen + + * syscalls.cc (rename): Drop handling paths > 32757 chars, emit EINVAL + instead, thus simplifying code allocating and filling pfri. Drop size + and use constant expression in NtSetInformationFile call. Add comments. + Drop redundant test for fs_serial_number and change comment accordingly. + +2013-01-11 Thomas Wolff + + * fhandler.h (class dev_console): Flag for expanded control sequence. + * fhandler_console.cc (char_command): Supporting cursor style modes. + +2013-01-10 Corinna Vinschen + + * path.h (path_conv::fs_type): New method. + * syscalls.cc (rename): Check for cross-device situation before + touching anything. Explain why. Workaround NFS bug in call to + NtSetInformationFile(FileRenameInformation). + +2013-01-09 Corinna Vinschen + + * cygerrno.h: Fix copyright. + * exceptions.cc: Drop comment explaining removed variable. + +2013-01-09 Corinna Vinschen + + * dcrt0.cc (main_thread_sinit): New inline function. Fix and explain + a stdio initialization issue. + (dll_crt0_1): Call main_thread_sinit rather than __sinit. + +2013-01-07 Christopher Faylor + + * thread.cc (pthread_rwlock::lookup_reader): Remove parameter: always + assume that we're looking for the current thread. + (pthread_rwlock::tryrdlock): Eliminate self variable. Accommodate + change in lookup_reader(). + (pthread_rwlock::unlock): Ditto. + (pthread_rwlock::rdlock): Ditto. Move add_reader call after writer + tests to more closely mimic old behavior. + (pthread_rwlock::wrlock): Accommodate change in lookup_reader(). + * thread.h ((pthread_rwlock::lookup_reader): Eliminate argument. + +2013-01-07 Christopher Faylor + + * thread.cc (pthread_rwlock::add_reader): Perform new operation here + and return pointer to allocated RWLOCK_READER structure. + (pthread_rwlock::rdlock): Reorganize to reflect new add_reader + functionality. + (pthread_rwlock::tryrdlock): Ditto. Remove unneeded call to + lookup_reader(). + * thread.h (pthread_rwlock::RWLOCK_READER::RWLOCK_READER): New + constructor. + (pthread_rwlock::add_reader): Reflect new functionality. + +2013-01-03 Christopher Faylor + + * globals.cc (exit_states): Renumber so that ES_EXIT_STARTING is first, + as intended. + * sigproc.cc (wait_sig): Only stop accepting signals after + exit_state > ES_EXIT_STARTING. + +2013-01-03 Christopher Faylor + + * sigproc.cc (exit_thread): Set thread signal mask so that no signals + are sent to an exiting thread. + +2013-01-02 Christopher Faylor + + * sigproc.cc (no_signals_available): Remove exit_state test since + signals are available in a limited fashion when exiting. + (sig_dispatch_pending): Ditto. + (sig_send): Ditto. + (exit_thread): Rearrange to avoid an unnecessary DuplicateProcess when + exiting. + (wait_sig): Allow special signals when exiting. + +2013-01-02 Christopher Faylor + + * DevNotes: Add entry cgf-000020, relating to previous checkin. + +2013-01-02 Christopher Faylor + + * cygtls.h (_cygtls::signal_exit): Delete from class. + * exception.h (cygwin_exception): New class. + (cygwin_exception::dumpstack): Declare new function. + (cygwin_exception::context): Ditto. + (cygwin_exception::dump_exception): Ditto. + * exceptions.cc (cygwin_exception::dump_exception): Move into + cygwin_exception class. Accommodate new variable names. + (cygwin_exception::dumpstack): Ditto stackdump -> dumpstack. + (exception::handle): Move andreas processing earlier. Defer signal + processing decisions to the signal thread where they belong. Pass + exception information to sig_send via new siginfo_t si_cyg field. + (ctrl_c_handler): Wait for SIGHUP signal to be processed since it could + cause a process exit and we don't want races with thread exit lock. + (signal_exit): Move back here from sigproc.cc. Modify arguments and + remove from sigpacket class. Decide when to dump core based on signal + type. + (sigpacket::process): Handle exiting signals in context of threads + rather than in the signal thread. Signal debugger on non-Windows + signals. Remove setup_signal_exit call. + * sigproc.cc (no_signals_available): Remove argument. + (signal_exit_code): Delete. + (close_my_readsig): Ditto. + (_cygtls::signal_exit): Move to exceptions.cc. + (sigproc_terminate): Don't attempt to terminate signal thread. + (setup_signal_exit): Delete. + (exit_thread): Use new si_cyg entry in siginfo_t. + (sig_send): Just use empty initializer for si. Accommodate change in + no_signals_available argument. + (wait_sig): Remove attempt to "go asynchronous" on process exit. + Delete __SIGEXIT handling. Don't ever exit. + * sigproc.h: Remove __SIGEXIT from signal enum. Renumber. + * include/cygwin/signal.h (siginfo_t): Add si_cyg entry. diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 0b930c3cd..200807895 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1,7 +1,7 @@ /* fhandler.h Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc. + 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. This file is part of Cygwin. @@ -1246,6 +1246,13 @@ enum ansi_intensity #define gotrparen 9 #define MAXARGS 10 +enum cltype +{ + cl_curr_pos = 1, + cl_disp_beg, + cl_disp_end +}; + class dev_console { WORD default_color, underline_color, dim_color; @@ -1286,7 +1293,7 @@ class dev_console { short Top, Bottom; } scroll_region; - struct + struct console_attrs { SHORT winTop; SHORT winBottom; @@ -1294,6 +1301,8 @@ class dev_console COORD dwBufferSize; COORD dwCursorPosition; WORD wAttributes; + int set_cl_x (cltype); + int set_cl_y (cltype); } info; COORD dwLastCursorPosition; @@ -1346,7 +1355,7 @@ private: /* Output calls */ void set_default_attr (); - void clear_screen (int, int, int, int); + void clear_screen (cltype, cltype, cltype, cltype); void scroll_screen (int, int, int, int, int, int); void cursor_set (bool, int, int); void cursor_get (int *, int *); diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc index a853a10b5..4228ffabb 100644 --- a/winsup/cygwin/fhandler_console.cc +++ b/winsup/cygwin/fhandler_console.cc @@ -1,7 +1,7 @@ /* fhandler_console.cc Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011, 2012, 2013 Red Hat, Inc. + 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Red Hat, Inc. This file is part of Cygwin. @@ -294,16 +294,12 @@ fhandler_console::mouse_aware (MOUSE_EVENT_RECORD& mouse_event) /* Adjust mouse position by window scroll buffer offset and remember adjusted position in state for use by read() */ CONSOLE_SCREEN_BUFFER_INFO now; - if (GetConsoleScreenBufferInfo (get_output_handle (), &now)) - { - dev_state.dwMousePosition.X = mouse_event.dwMousePosition.X - now.srWindow.Left; - dev_state.dwMousePosition.Y = mouse_event.dwMousePosition.Y - now.srWindow.Top; - } - else - { - /* Cannot adjust position by window scroll buffer offset */ - return 0; - } + if (!GetConsoleScreenBufferInfo (get_output_handle (), &now)) + /* Cannot adjust position by window scroll buffer offset */ + return 0; + + dev_state.dwMousePosition.X = mouse_event.dwMousePosition.X - now.srWindow.Left; + dev_state.dwMousePosition.Y = mouse_event.dwMousePosition.Y - now.srWindow.Top; return ((mouse_event.dwEventFlags == 0 || mouse_event.dwEventFlags == DOUBLE_CLICK) && mouse_event.dwButtonState != dev_state.dwLastButtonState) @@ -315,71 +311,6 @@ fhandler_console::mouse_aware (MOUSE_EVENT_RECORD& mouse_event) || dev_state.use_mouse >= 3)); } -/* The following three functions were adapted (i.e., mildly modified) from - http://stackoverflow.com/questions/14699043/replacement-to-systemcolor */ - -/* Split a rectangular region into two smaller rectangles based on the - largest dimension. */ -static void -region_split (SHORT width, SHORT height, COORD coord, - const SMALL_RECT& region, COORD& coord_a, - SMALL_RECT& region_a, COORD& coord_b, - SMALL_RECT& region_b) -{ - coord_a = coord_b = coord; - region_a = region_b = region; - - if (height >= width) - { - SHORT half = height / 2; - coord_b.Y += half; - region_b.Top += half; - region_a.Bottom = region_b.Top - 1; - } - else - { - SHORT half = width / 2; - coord_b.X += half; - region_b.Left += half; - region_a.Right = region_b.Left - 1; - } -} - -/* Utility function to figure out the distance between two points. */ -static SHORT -delta (SHORT first, SHORT second) -{ - return (second >= first) ? (second - first + 1) : 0; -} - -/* Subdivide the ReadConsoleInput operation into smaller and smaller chunks as - needed until it succeeds in reading the entire screen buffer. */ -static BOOL -ReadConsoleOutputWrapper (HANDLE h, PCHAR_INFO buf, - COORD bufsiz, COORD coord, - SMALL_RECT& region) -{ - SHORT width = delta (region.Left, region.Right); - SHORT height = delta (region.Top, region.Bottom); - - if ((width == 0) || (height == 0)) - return TRUE; - - BOOL success = ReadConsoleOutputW (h, buf, bufsiz, coord, ®ion); - if (success) - /* it worked */; - else if (GetLastError () == ERROR_NOT_ENOUGH_MEMORY && (width * height) > 1) - { - COORD coord_a, coord_b; - SMALL_RECT region_a, region_b; - region_split (width, height, coord, region, coord_a, region_a, - coord_b, region_b); - success = ReadConsoleOutputWrapper (h, buf, bufsiz, coord_a, region_a) - && ReadConsoleOutputWrapper (h, buf, bufsiz, coord_b, region_b); - } - return success; -} - void __reg3 fhandler_console::read (void *pv, size_t& buflen) { @@ -870,6 +801,7 @@ fhandler_console::scroll_screen (int x1, int y1, int x2, int y2, int xn, int yn) fill.Attributes = dev_state.current_win32_attr; ScrollConsoleScreenBuffer (get_output_handle (), &sr1, &sr2, dest, &fill); +#if 0 /* CGF: 2014-01-04 Assuming that we don't need this anymore */ /* ScrollConsoleScreenBuffer on Windows 95 is buggy - when scroll distance * is more than half of screen, filling doesn't work as expected */ @@ -879,6 +811,7 @@ fhandler_console::scroll_screen (int x1, int y1, int x2, int y2, int xn, int yn) clear_screen (0, 1 + dest.Y + sr1.Bottom - sr1.Top, sr2.Right, sr2.Bottom); else /* reverse scroll */ clear_screen (0, sr1.Top, sr2.Right, dest.Y - 1); +#endif } int @@ -1257,12 +1190,32 @@ dev_console::set_default_attr () set_color (NULL); } +int +dev_console::console_attrs::set_cl_x (cltype x) +{ + if (x == cl_disp_beg) + return 0; + if (x == cl_disp_end) + return dwWinSize.X - 1; + return dwCursorPosition.X; +} + +int +dev_console::console_attrs::set_cl_y (cltype y) +{ + if (y == cl_disp_end) + return winBottom; + if (y == cl_disp_beg) + return winTop; + return dwCursorPosition.Y; +} + /* * Clear the screen context from x1/y1 to x2/y2 cell. * Negative values represents current screen dimensions */ void -fhandler_console::clear_screen (int x1, int y1, int x2, int y2) +fhandler_console::clear_screen (cltype xc1, cltype yc1, cltype xc2, cltype yc2) { COORD tlc; DWORD done; @@ -1270,14 +1223,10 @@ fhandler_console::clear_screen (int x1, int y1, int x2, int y2) dev_state.fillin_info (get_output_handle ()); - if (x1 < 0) - x1 = dev_state.info.dwWinSize.X - 1; - if (y1 < 0) - y1 = dev_state.info.winBottom; - if (x2 < 0) - x2 = dev_state.info.dwWinSize.X - 1; - if (y2 < 0) - y2 = dev_state.info.winBottom; + int x1 = dev_state.info.set_cl_x (xc1); + int y1 = dev_state.info.set_cl_y (yc1); + int x2 = dev_state.info.set_cl_x (xc2); + int y2 = dev_state.info.set_cl_y (yc2); num = abs (y1 - y2) * dev_state.info.dwBufferSize.X + abs (x1 - x2) + 1; @@ -1412,6 +1361,60 @@ bool fhandler_console::write_console (PWCHAR buf, DWORD len, DWORD& done) return true; } +/* The following three functions were adapted (i.e., mildly modified) from + http://stackoverflow.com/questions/14699043/replacement-to-systemcolor */ + +/* Split a rectangular region into two smaller rectangles based on the + largest dimension. */ +static void +region_split (PCHAR_INFO& buf, COORD& bufsiz, SMALL_RECT& region, + PCHAR_INFO& buf_b, COORD& bufsiz_b, SMALL_RECT& region_b) +{ + region_b = region; + bufsiz_b = bufsiz; + + SHORT half = (1 + region.Bottom - region.Top) / 2; + region_b.Top += half; + region.Bottom = (bufsiz.Y = region_b.Top) - 1; + buf_b = buf + (half * (1 + region.Right)); + bufsiz_b.Y = region_b.Bottom - region_b.Top; +} + +/* Utility function to figure out the distance between two points. */ +static SHORT +delta (SHORT first, SHORT second) +{ + return (second >= first) ? (second - first + 1) : 0; +} + +/* Subdivide the ReadConsoleInput operation into smaller and smaller chunks as + needed until it succeeds in reading the entire screen buffer. */ +static BOOL +ReadConsoleOutputWrapper (HANDLE h, PCHAR_INFO buf, COORD bufsiz, + SMALL_RECT& region) +{ + COORD coord = {}; + SHORT width = delta (region.Left, region.Right); + SHORT height = delta (region.Top, region.Bottom); + + if ((width == 0) || (height == 0)) + return TRUE; + + BOOL success = ReadConsoleOutputW (h, buf, bufsiz, coord, ®ion); + if (success) + /* it worked */; + else if (GetLastError () == ERROR_NOT_ENOUGH_MEMORY && (width * height) > 1) + { + PCHAR_INFO buf_b; + COORD bufsiz_b; + SMALL_RECT region_b; + region_split (buf, bufsiz, region, buf_b, bufsiz_b, region_b); + success = ReadConsoleOutputWrapper (h, buf, bufsiz, region) + && ReadConsoleOutputWrapper (h, buf_b, bufsiz_b, region_b); + } + return success; +} + #define BAK 1 #define ESC 2 #define NOR 0 @@ -1628,13 +1631,13 @@ fhandler_console::char_command (char c) if (c == 'h') /* save */ { CONSOLE_SCREEN_BUFFER_INFO now; - COORD cob = { 0, 0 }; if (!GetConsoleScreenBufferInfo (get_output_handle (), &now)) break; - dev_state.savebufsiz.X = now.srWindow.Right - now.srWindow.Left + 1; - dev_state.savebufsiz.Y = now.srWindow.Bottom - now.srWindow.Top + 1; + /* Assume starting from 0/0 */ + dev_state.savebufsiz.X = 1 + now.srWindow.Right; + dev_state.savebufsiz.Y = 1 + now.srWindow.Bottom; if (dev_state.savebuf) cfree (dev_state.savebuf); @@ -1643,7 +1646,7 @@ fhandler_console::char_command (char c) BOOL res = ReadConsoleOutputWrapper (get_output_handle (), dev_state.savebuf, - dev_state.savebufsiz, cob, + dev_state.savebufsiz, now.srWindow); if (!res) debug_printf ("ReadConsoleOutputWrapper failed, %E"); @@ -1718,16 +1721,15 @@ fhandler_console::char_command (char c) switch (dev_state.args_[0]) { case 0: /* Clear to end of screen */ - cursor_get (&x, &y); - clear_screen (x, y, -1, -1); + clear_screen (cl_curr_pos, cl_curr_pos, cl_disp_end, cl_disp_end); break; case 1: /* Clear from beginning of screen to cursor */ cursor_get (&x, &y); - clear_screen (0, 0, x, y); + clear_screen (cl_disp_beg, cl_disp_beg, cl_curr_pos, cl_curr_pos); break; case 2: /* Clear screen */ - clear_screen (0, 0, -1, -1); - cursor_set (true, 0,0); + clear_screen (cl_disp_beg, cl_disp_beg, cl_disp_end, cl_disp_end); + cursor_set (true, 0, 0); break; default: goto bad_escape; @@ -1750,16 +1752,13 @@ fhandler_console::char_command (char c) switch (dev_state.args_[0]) { case 0: /* Clear to end of line */ - cursor_get (&x, &y); - clear_screen (x, y, -1, y); + clear_screen (cl_curr_pos, cl_curr_pos, cl_disp_end, cl_curr_pos); break; case 2: /* Clear line */ - cursor_get (&x, &y); - clear_screen (0, y, -1, y); + clear_screen (cl_disp_beg, cl_curr_pos, cl_disp_end, cl_curr_pos); break; case 1: /* Clear from bol to cursor */ - cursor_get (&x, &y); - clear_screen (0, y, x, y); + clear_screen (cl_disp_beg, cl_curr_pos, cl_curr_pos, cl_curr_pos); break; default: goto bad_escape; @@ -2165,7 +2164,7 @@ fhandler_console::write (const void *vsrc, size_t len) dev_state.vt100_graphics_mode_G0 = false; dev_state.vt100_graphics_mode_G1 = false; dev_state.iso_2022_G1 = false; - clear_screen (0, 0, -1, -1); + clear_screen (cl_disp_beg, cl_disp_beg, cl_disp_end, cl_disp_end); cursor_set (true, 0, 0); dev_state.state_ = normal; } @@ -2208,9 +2207,7 @@ fhandler_console::write (const void *vsrc, size_t len) dev_state.state_ = gotcommand; } else - { - dev_state.state_ = gotcommand; - } + dev_state.state_ = gotcommand; break; case gotcommand: char_command (*src++); diff --git a/winsup/cygwin/release/1.7.28 b/winsup/cygwin/release/1.7.28 index 8950bb897..1807e5173 100644 --- a/winsup/cygwin/release/1.7.28 +++ b/winsup/cygwin/release/1.7.28 @@ -29,3 +29,6 @@ Bug Fixes - The console buffer should no longer be cleared when the resolution of the console exceeds some magic threshold. Fixes: http://cygwin.com/ml/cygwin/2013-12/threads.html#00406 + +- Fix inadvertent clearing of entire console buffer on clear screen. + See: http://cygwin.com/ml/cygwin/2014-01/msg00011.html