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.