2012-04-01 Christopher Faylor * dtable.cc (dtable::fixup_close): Define new function. (dtable::fixup_after_exec): Use fixup_close() and detect when it was not possible to open an inherited file handle. (dtable::fixup_after_fork): Defensively close any file handles which were not, for some reason, inheritable. * dtable.h: Make #pragma once. (dtable::fixup_close): Declare new function. * fhandler_console.cc (fhandler_console::set_unit): Set I/O handles to NULL when this function fails. 2012-04-01 Corinna Vinschen * fhandler_dev.cc (fhandler_dev::readdir): Fix formatting. Simplify code. Use device::type() to fetch dirent compatible device type. Add comment. 2012-03-31 Christopher Faylor * devices.h (device::exists_func): Redefine field. (device::dev_on_fs): Remove unneeded bit field. Just make a normal boolean. (device::exists): Redefine function. * devices.in: Move previous functions earlier since they are now only defined static. Rename some functions due to an as-yet unresolved bug in gendevices. Rename posix part of internal-only devices with a double-slash. gendevices will eventuall translate that to a ":". (device::parse): Rework to use dev pointer and dev_storage_end. * devices.cc: Regenerate. * gendevices: Translate "// to ": after shilka processing. 2012-03-31 Corinna Vinschen * devices.cc: Regenerate. * devices.h (device::exists_func): New member function pointer, replacing noexpose. (device::expose): Remove. (device::exists_never): Declare. (device::exists_ptys): Declare. (device::exists_cons): Declare. (device::exists_console): Declare. (device::exists_nt_dev): Declare. (device::exists): Declare. * devices.in (dev_storage): Replace former noexpose values with pointers to matching exists_XXX method. (device::exists_never): New method. (device::exists_ptys): New method. (device::exists_cons): New method. (device::exists_console): New method. (device::exists_nt_dev): New method. (device::exists): New method. * fhandler_dev.cc (fhandler_dev::readdir): Replace call to device::expose with call to device::exists and drop all further existence filtering since it's done in device::exists now. * path.cc (path_conv::check): Replace call to device::expose with call to device::exists. 2012-03-30 Christopher Faylor * devices.cc: Regenerate. * devices.h (device::noexpose): New field. (device::dev_on_fs): Make a bit field. (get_major): Use proper type for declaration. (expose): New field. (ext_dev_storage): Delete declaration. (dev_storage_size): Ditto. (dev_storage): New declaration. (dev_storage_end): Ditto. * devices.in: Mark /dev/ptym*, /dev/com*, /dev/pipe, /dev/fifo, and "/dev" as "no expose". * fhandler.h (fhandler_dev::lastrealpos): Delete declaration. (fhandler_dev::devidx): Declare new field. * fhandler_disk_file.cc: Move fhandler_dev functions into fhandler_dev.cc. * fhandler_dev.cc: Add includes needed for functions moved from fhandler_disk_file.cc. (dev_storage_scan_start): Define place to start listing devices. (dev_storage_size): Define size of array to scan. (fhandler_dev::fhandler_dev): Move here from fhandler_disk_file.cc. (fhandler_dev::opendir): Ditto. (fhandler_dev::readdir): Just check devidx for non-NULL to determine when to go to disk for /dev content. Use dev_storage rather than ext_dev_storage. Iterate over dev_storage using devidx pointer. Use accessor functions rather than raw references to the device struct. Only increment dir->__d_position when we are actually going to be returning something. Add debug_printf for exit. (fhandler_dev::rewinddir): Set devidx as appropriate depending on whether there's a /dev on disk or not. * gendevices: Don't mark dev_storage static but do put it in the _RDATA section. * path.cc (path_conv::check): Use new "device::expose()" function to decide to forbid programs from referencing internal device types. 2012-03-30 Corinna Vinschen * posix.sgml (std-notes): Change description of flock restrictions. 2012-03-30 Corinna Vinschen * devices.h (DEV_TTY_MAJOR): Define, use throughout where appropriate. (DEV_VIRTFS_MAJOR): Ditto. * fhandler_dev.cc (fhandler_dev::readdir): Add comments. Tweak tests for invisible devices. Don't print comX devices, only ttySX. Drop requirement to call stat64. 2012-03-29 Corinna Vinschen * Makefile.in (DLL_OFILES): Add fhandler_dev.o. * devices.h (DEV_DEV_MAJOR): Define. (FH_DEV): Redefine in terms of DEV_DEV_MAJOR. (ext_dev_storage): Declare. (dev_storage_size): Declare. (dev_dev_storage): Declare. (dev_dev): Define. (isdev_dev): Define. * devices.in (dev_dev_storage): Activate. (ext_dev_storage): Define as externally available pointer to dev_storage. (dev_storage_size): Define to contain number of dev_storage elements. * dir.cc (rmdir): Handle /dev as always not empty. * dtable.cc (fh_alloc): Handle DEV_DEV_MAJOR. * fhandler.h (fhandler_dev): New class, derived from fhandler_disk_file. (fhandler_union): Add fhandler_dev member. * fhandler_disk_file.cc (class __DIR_mounts): Handle /dev directory to make sure it always exists. * fhandler_dev.cc: New file implementing /dev. * globals.cc (ro_u_dev): New R/O unicode string. * path.cc (path_conv::check): Handle FH_DEV device. 2012-03-29 Christopher Faylor * fhandler_console.cc (fhandler_console::set_unit): Don't succeed unless we are opening a console actually associated with this process. 2012-03-29 Corinna Vinschen * sec_acl.cc (acl32): Fix potential crash if build_fh_name returns NULL. 2012-03-29 Christopher Faylor * exceptions.cc (ctrl_c_handler): Don't generate a SIGINT if we've execed a non-cygwin process. Let the Windows process deal with it itself. 2012-03-28 Christopher Faylor * sigproc.cc (proc_terminate): Avoid releasing myself. 2012-03-28 Corinna Vinschen * times.cc (clock_setres): Set minperiod to period. 2012-03-27 Corinna Vinschen * fhandler_process.cc (process_tab): Add entry for mountinfo. (format_process_mountstuff): New function, derived from format_process_mounts. Only open another user's user_info shared memory area if the process is owned by another user. Actually access the opened shared user_info to get the right mount table. For other users, don't print remote cygdrive mount points. Print mountinfo or mounts output depending on the bool mountinfo argument. (format_process_mounts): Just call format_process_mountstuff with mountinfo set to false. (format_process_mountinfo): Ditto with mountinfo set to true. 2012-03-27 Corinna Vinschen * times.cc (clock_setres): Revert previous change. 2012-03-26 Corinna Vinschen * fhandler.h (class fhandler_dev_clipboard): Add fstat method. * fhandler_clipboard.cc (cygcb_t): New type for Cygwin-specific clipboard format. (set_clipboard): Use new clipboard format to allow setting a timestamp. (fhandler_dev_clipboard::fstat): New method. Read modification and access timestamp as well as length from clipboard data. (fhandler_dev_clipboard::read): Use new clipboard format. 2012-03-26 Corinna Vinschen * hires.h (hires_ms::dmsecs): Drop unused method. * times.cc (JITTER): Remove. (gtod): Revert to process-local variable. (hires_ms::nsecs): Just return system time to disallow discrepancy with the OS. (hires_ms::resolution): Return coarsest timer value from OS. Add comment to explain why. (clock_setres): Ditto. 2012-03-21 Christopher Faylor * child_info.h: Reset magic number. 2012-03-21 Christopher Faylor * child_info.h (child_info::postfork): Define new function. * fork.cc (frok::parent): Call postfork to do all of the manipulation required prior to calling pinfo::remember. * pinfo.h (pinfo::set_rd_proc_pipe): Just set pinfo's rd_proc_pipe. Don't bother setting it to NULL. * sigproc.cc (child_info_spawn::wait_for_myself): Call postfork to set up myself for waiting. * spawn.cc (child_info_spawn::worker): Avoid now-unnecessary global lock. Consistently test mode rather than chtype when making wr_proc_pipe decisions. Call postfork() to set up stuff prior to pinfo::remember. 2012-03-21 Corinna Vinschen * cygtls.cc (well_known_dlls): Add advapi32.dll. 2012-03-21 Christopher Faylor * child_info.h: Reset magic number. (child_info_spawn::wait_for_myself): Move function to sigproc.cc. * pinfo.cc (is_toplevel_proc): Delete unneeded variable. * sigproc.cc (child_info_spawn::wait_for_myself): Move function from header to here. Do all setup required to properly wait for top-level execed process to exit. * spawn.cc (child_info_spawn::worker): Attempt to properly handle _P_DETACH. Set wr_proc_pipe if top-level process even when execing. Just call wait_for_myself() to... wait for myself. Don't call cleanup twice. 2012-03-21 Christopher Faylor * pinfo.cc (proc_waiter): Remove debugging. 2012-03-20 Christopher Faylor * dtable.cc (set_std_handle): Call SetStdHandle with NULL if fd is closed. (dtable::release): "Close" standard handle if appropriate. * dcrt0.cc (dll_crt0_0): Fix minor switch formatting problem. * fork.cc (frok::parent): Make minor comment indentation change. 2012-03-20 Corinna Vinschen * syscalls.cc (lseek): Fix debug output. 2012-03-20 Christian Franke * ntdll.h (SharedUserData): Add volatile qualifier. This fixes a possible infinite loop in hires_ms::timeGetTime_ns. 2012-03-20 Corinna Vinschen * include/cygwin/socket.h: Fix definitions of MCAST_INCLUDE and MCAST_EXCLUDE. 2012-03-20 Christopher Faylor * child_info.h (CURR_CHILD_INFO_MAGIC): Reset. (child_info::rd_proc_pipe): Declare new field. (child_info::wr_proc_pipe): Ditto. (child_info::prefork): Declare new function, derived from previous pinfo version. * dcrt0.cc (child_info_fork::handle_fork): Close previous wr_proc_pipe when appropriate and assign new one from passed-in child_info block. (child_info_spawn::handle_spawn): Assign our wr_proc_pipe handle from passed-in child_info block. * fork.cc (child_info::prefork): Define new function. (frok::child): Clear rd_proc_pipe and wr_proc_pipe so they will not be closed by the child_info destructor. (frok::parent): Use child_info prefork handling, outside of retry loop. Set rd_proc_pipe in child's pinfo after successful CreateProcess. Eliminate postfork call. * globals.cc (my_wr_proc_pipe): Define/declare new variable. * pinfo.cc (pinfo::pending_rd_proc_pipe): Delete. (pinfo::pending_wr_proc_pipe): Ditto. (pinfo::prefork): Ditto. (pinfo::postfork): Ditto. (pinfo::postexec): Ditto. (pinfo::wait): Assume that rd_proc_pipe is set up correctly prior to call. (_pinfo::alert_parent): Replace "wr_proc_pipe" with "my_wr_proc_pipe". * pinfo.h (_pinfo::_wr_proc_pipe): Delete declaration. (_pinfo::set_rd_proc_pipe): Define new function. (pinfo::pending_rd_proc_pipe): Delete declaration. (pinfo::pending_wr_proc_pipe): Ditto. (pinfo::prefork): Ditto. (pinfo::postfork): Ditto. (pinfo::postexec): Ditto. (pinfo::wr_proc_pipe): Ditto. * sigproc.cc (child_info::child_info): Clear rd_proc_pipe and wr_proc_pipe. (child_info::cleanup): Close rd_proc_pipe and wr_proc_pipe if necessary. (child_info_fork::child_info_fork): Set forker_finished to NULL by default. (child_info_spawn::child_info_spawn): Use my_wr_proc_pipe rather than myself->wr_proc_pipe. (child_info::sync): Ditto. (child_info_spawn::cleanup): Call child_info::cleanup. * spawn.cc (child_info_spawn::worker): Remove call to myself.prefork(). Set wr_proc_pipe when execing or set up new rd_proc_pipe/wr_proc_pipe via child_info::prefork when spawning. Remove call to pinfo::postexec. Set rd_proc_pipe in child pinfo when spawning. Use my_wr_proc_pipe rather than myself->wr_proc_pipe. Remove call to postfork. 2012-03-19 Christopher Faylor * pinfo.cc (pinfo_init): Cosmetic change: unset "destroy" for myself. (pinfo::wait): Change some comments. (pinfo::prefork): Move a comment. (pinfo::postfork): Set pending_*_pipe variables to NULL if closed. (pinfo::postexec): Use right name when closing handle. (_pinfo::alert_parent): Ditto. * sigproc.h (hold_everything): Remove debugging label. 2012-03-19 Christopher Faylor * cygserver_ipc.h: Include sigproc.h for signal_arrived declaration. 2012-03-19 Christopher Faylor * cygprops.h: Use #pragma once. * mkglobals_h: Ditto for generated globals.h file. * globals.cc: Use specific NO_GLOBALS_H flag to control inclusion of globals.h. * winsup.h: Honor NO_GLOBALS_H to control inclusion of globals.h. Make clear_procimptoken extern inline so that it is only defined when needed. 2012-03-19 Corinna Vinschen * thread.cc (cancelable_wait): Don't malloc tbi, just make it a struct on the stack to avoid memory leak. 2012-03-19 Christopher Faylor * pinfo.cc (pinfo::wait): Handle case where prefork was not called prior to calling wait(). This is the case when we are reabsorbing processes after being execed. 2012-03-16 Christopher Faylor * fork.cc (lock_signals): Move to sigproc.h. (lock_pthread): Ditto. (hold_everything): Ditto. (frok::parent): Call myself.prefork() just before calling CreateProcess. Call myself.postfork () on function exit. * pinfo.cc (pinfo::pending_rd_proc_pipe): Define. (pinfo::pending_wr_proc_pipe): Ditto. (_pinfo::dup_proc_pipe): Delete. (pinfo::wait): Move pipe creation into pinfo::prefork. Set pipe variables from pending_*. (_pinfo::sync_proc_pipe): Delete. (_pinfo::proc_pipe_owner): Ditto. (pinfo::prefork): Define new function. (pinfo::postfork): Ditto. (pinfo::postexec): Ditto. (_pinfo::alert_parent): Remove obsolete call to sync_proc_pipe. (_pinfo::dup_proc_pipe): Delete declaration. (_pinfo::sync_proc_pipe): Ditto. (pinfo::pending_rd_proc_pipe): Declare. (pinfo::pending_wr_proc_pipe): Ditto. (pinfo::prefork): Declare new function. (pinfo::postfork): Ditto. (pinfo::postexec): Ditto. (pinfo::wr_proc_pipe): Define new wrapper function. * sigproc.h: Include "sync.h". Move locking functions from fork to here. * spawn.cc (child_info_spawn::worker): Delete now-unneeded requirement to record orig_wr_proc_pipe. Call hold_everything prior to doing anything. Call myself.prefork() if spawning. Replace wr_proc_pipe synchronization with call to myself.postexec(). Call myself.postfork() if not execing. * sync.h: Replace #ifdef wrapper with "#pragma once". 2012-03-13 Corinna Vinschen * hookapi.cc (hook_or_detect_cygwin): Change condition when to use importRVAMaxSize or importRVASize for the mapping size. Make sure to map never more than the section size. Change comments accordingly. 2012-03-13 Corinna Vinschen * include/netdb.h (h_errno): Add self-referencing macro and comment. 2012-03-12 Corinna Vinschen Christopher Faylor * fhandler.h (wait_return): Add overlapped_nullread. * fhandler.cc (fhandler_base_overlapped::wait_overlapped): Detect zero-byte read as a special case. (fhandler_base_overlapped::raw_read): Keep looping when zero-byte read detected without EOF. (fhandler_base_overlapped::raw_write): Quiet gcc warning by adding overlapped_nullread to switch statement even though it will never actually be hit. 2012-03-10 Christopher Faylor * dtable.cc (fh_alloc): Treat pc.dev as unsigned. * fhandler_console.cc (fhandler_console::set_unit): Use lock always to avoid races between competing cygwin processes running on the console. 2012-03-09 Corinna Vinschen * hookapi.cc (find_first_notloaded_dll): Fix a compiler warning. 2012-03-09 Corinna Vinschen * hookapi.cc (rvadelta): Add parameter to return maximum available size from start of import RVA table to end of section. (find_first_notloaded_dll): Take big executables into account. Use offset and size computation as in hook_or_detect_cygwin, just simpler. (hook_or_detect_cygwin): Return NULL rather than false througout. Change computation of required mapping size to take non-gcc compilers into account. Explain the differences and what we do against them. Don't alloca buf if fn is NULL. Never use buf if fn is NULL. 2012-03-08 Corinna Vinschen * net.cc (call_gaa): New thread function to call GetAdaptersAddresses. (get_adapters_addresses): Call call_gaa. If necessary, call it as child thread. Explain why that's necessary. 2012-03-08 Václav Zeman * path.cc (readlink): Avoid calling strlen() twice. 2012-03-07 Corinna Vinschen * Throughout, replace usage of w32api's min with MIN from sys/param.h. 2012-03-07 Christopher Faylor * pinfo.cc (_pinfo::dup_proc_pipe): Reorganize to provide more information for failing condition. (pinfo::wait): Pass name of function to dup_proc_pipe. Eliminate error check for dup_proc_pipe since it never actually returned an error. * pinfo.h (_pinfo::dup_proc_pipe): Add an argument. * spawn.cc (child_info_spawn::worker): Pass name of function to dup_proc_pipe. 2012-03-07 Corinna Vinschen * glob.cc (MAXPATHLEN): Reinstantiate with a value of 8192. 2012-03-05 Denis Excoffier * pinfo.cc (_pinfo::dup_proc_pipe): Fix order of arguments in debug output. 2012-03-05 Corinna Vinschen * init.cc (dll_entry): Move wincap.init call back from here... * dcrt0.cc (dll_crt0_0): ...to here. 2012-03-05 Corinna Vinschen * cygheap.h (enum fcwd_version_t): Move here from path.cc. (class fcwd_access_t): Ditto. Only declare methods. (class cwdstuff): Move fast_cwd_ptr and fast_cwd_version from shared DLL section here. * path.cc: Keep fcwd_access_t method definitions. (fcwd_access_t::fast_cwd_version): New method. (find_fast_cwd_pointer): Change comment. Mention test on W8CP. (cwdstuff::init): Initialize fast_cwd_ptr and fast_cwd_version. 2012-03-05 Corinna Vinschen * dll_init.cc (dll_list::operator[]): Extend comment a bit more to explain previous patch. 2012-03-04 Corinna Vinschen * dll_init.cc (dll_list::alloc): Compare linked DLLs by basename only. Explain why. Add code to check if a DLL with the same basename but different path is the same DLL. Bail out if not. (in_load_after_fork): New static NO_COPY bool to allow to differ between linked and loaded DLL at fork. (dll_list::load_after_fork): Set in_load_after_fork accordingly. (dll_dllcrt0_1): Don't treat DLL as linked if in_load_after_fork is set. Drop test for in_forkee. 2012-03-04 Corinna Vinschen * dll_init.cc: Revert pathname changes from 2012-02-08. (dll_list::operator[]): Add long comment to explain the misery. (dll_list::alloc): Skip long pathname prefix potentially returned by GetModuleFileNameW. * dll_init.h (dll_list::find_by_modname): Add back declaration. 2012-03-04 Corinna Vinschen * winver.rc: Bump copyright date. 2012-03-03 Christopher Faylor * fhandler_console.cc (fhandler_console::dup): Only set ctty when we haven't specifically called setsid. * fhandler_tty.cc (fhandler_pty_slave::dup): Ditto. Also add comment documenting research into rxvt problem. * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Don't check specifically for myself->ctty == -1. Test for > 0 as that is the correct test. (fhandler_termios::sigflush): Ditto. 2012-03-02 Corinna Vinschen * flock.cc (allow_others_to_sync): Reorder conditional expression to check for DACL presence first, since otherwise dacl pointer value is undefined. Add comment. 2012-03-02 Corinna Vinschen * flock.cc (allow_others_to_sync): Use RtlGetDaclSecurityDescriptor rather than accessing the SECURITY_DESCRIPTOR structure directly. Take no DACL and NULL DACL into account. 2012-03-02 Corinna Vinschen * fhandler_console.cc (fhandler_console::input_tcsetattr): Revert previous patch. (fhandler_console::open_setup): Install Ctrl-C handler here, if this console is the controlling tty and the process hasn't been started by a Cygwin process. 2012-03-02 Corinna Vinschen * fhandler_console.cc (fhandler_console::input_tcsetattr): Set the state of the Ctrl-C handler depending on the setting of ENABLE_PROCESSED_INPUT. 2012-02-28 Eric Blake * include/sys/termios.h (tcgetsid): Fix return type. * termios.cc (tcgetsid): Likewise. * fhandler_termios.cc (fhandler_termios::tcgetsid): Likewise. * fhandler.h (fhandler_base): Likewise. * fhandler.cc (fhandler_base::tcgetsid): Likewise. 2012-02-28 Corinna Vinschen * cygtls.cc (well_known_dlls): Add shlwapi.dll. 2012-02-27 Corinna Vinschen * cygtls.cc (dll_cmp): New comparison function for bsearch. (well_known_dlls): New array containing well-known DLLs. (_cygtls::call2): Add code for BLODA detection. * net.cc (fdsock): Ditto. 2012-02-26 Corinna Vinschen * environ.cc (enum settings): Add setbool. Rename justset to setdword to avoid future problems. (struct parse_thing): Change all justset to setbool for bool variables. (parse_options): Add a case for setbool setting for bool variables since justset (now setdword) always writes a DWORD value, thus overwriting adjacent memory locations. * external.cc (cygwin_internal): Drop extern declaration. 2012-02-26 Corinna Vinschen * environ.cc (dos_file_warning): Drop declaration. (ignore_case_with_glob): Ditto. (allow_winsymlinks): Ditto. (reset_com): Move definition to globals.cc. (struct parse_thing): Add "detect_bloda" option. * fhandler_serial.cc (fhandler_serial::open): Drop (incorrect) declaration of reset_com. * globals.cc (ignore_case_with_glob): Move definition into C++-only block. (dos_file_warning): Define. (allow_winsymlinks): Define. (reset_com): Define. (detect_bloda): Define. * path.cc (dos_file_warning): Drop definition here. (allow_winsymlinks): Drop definition here. 2012-02-26 Corinna Vinschen * flock.cc (LOCK_DIR_NAME_FMT): Define. (LOCK_DIR_NAME_LEN): Define. (LOCK_DIR_NAME_DEV_OFF): Define. (LOCK_DIR_NAME_INO_OFF): Define. (LOCK_OBJ_NAME_FMT): Define. Add comment. (class lockf_t): Use bitsize-explicit types. Declare from_obj_name, (class inode_t): Make use, unuse and inuse methods public. Add a lock argument to get method declaration. (inode_t::get): Add lock argument. Only lock node if lock arg is true. (inode_t::inode_t): Use LOCK_DIR_NAME_FMT as format string. (lockf_t::from_obj_name): New method to generate lockf_t content from lock event object basename. (inode_t::get_all_locks_list): Just call from_obj_name here and copy result into final lockf_t. (create_lock_obj_attr): Use LOCK_OBJ_NAME_FMT as format string. (create_lock_in_parent): New thread function to create lockf_t structure in parent process. (delete_lock_in_parent): New thread function to reap stale BSD locks in parent process. (lockf_t::create_lock_obj): Try to duplicate lock object handle into parent process and call create_lock_in_parent as parent remote thread. (lockf_t::del_lock_obj): Call delete_lock_in_parent as parent remote thread. (fhandler_disk_file::lock): Add lock arg to inode_t::get call. 2012-02-25 Christopher Faylor * include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 12. 2012-02-21 Yaakov Selkowitz * cygwin.din (scandirat): Export. * posix.sgml (std-gnu): Add scandirat. * syscalls.cc (scandirat): New function. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. * include/sys/dirent.h (scandirat): Declare. 2012-02-21 Corinna Vinschen Based on an idea from Nick Lowe : * shared.cc (shared_info::init_obcaseinsensitive): Check actual state of case sensitivity on post-Windows 2000 systems. * wincap.h (wincaps::kernel_is_always_casesensitive): New element. * wincap.cc: Implement above element throughout. 2012-02-20 Corinna Vinschen * flock.cc (inode_t::del_my_locks): Drop useless counter lc. Close lock object handle explicitely in case of called during fork. Add comment to explain why. * fork.cc (frok::child): Drop declaration of fixup_lockf_after_fork. 2012-02-17 Corinna Vinschen * timer.cc (getitimer): Don't create another local ret variable in timer_gettime calling branch. Simplify conditional since timer_gettime always returns 0 or -1 anyway. 2012-02-17 Corinna Vinschen * ntdll.h (struct _PEB): Add EnvironmentUpdateCount member. * spawn.cc (child_info_spawn::worker): Speed up job recognition. Expand comment to explain every little detail and so we never forget. * wincap.h (wincaps::has_program_compatibility_assitant): New element. * wincap.cc: Implement above element throughout. 2012-02-17 Corinna Vinschen * mount.cc (get_disk_type): Drop unneeded toupper call. Convert case constants to wide chars. 2012-02-16 Corinna Vinschen * autoload.cc (NetUseGetInfo): Define. * fhandler_disk_file.cc (fhandler_cygdrive::opendir): Rename flptst to drive. Call new get_disk_type function rather than is_floppy and check SMB drives with the NetUseGetInfo function. Explain why. * mount.cc (get_disk_type): New function to evaluate disk type from native NT device name. (is_floppy): Remove. * mount.h (enum disk_type): Define. (get_disk_type): Declare. * path.h (is_floppy): Drop declaration. 2012-02-15 Corinna Vinschen * miscfuncs.cc: Revert change from 2012-02-13 which used the Windows-provided stack rather than an own stack created in CygwinCreateThread. (struct thread_wrapper_arg): Rename commitsize to stacklimit. (CygwinCreateThread): Rename commitsize to real_stacklimit. 2012-02-15 Corinna Vinschen * dtable.cc (dtable::init_std_file_from_handle): Use tmp_pathbuf for name. (handle_to_fn): Ditto for device. Fix size in QueryDosDeviceW call. 2012-02-15 Christopher Faylor * smallprint.cc (tmpbuf): Declare new class holding a static buffer, protected by a lock. (__small_vsprintf): Use tmpbuf to hold large buffer. (__small_vswprintf): Ditto. 2012-02-15 Corinna Vinschen * flock.cc (lf_setlock): Add timeout variable and set before calling WFMO. Drop debug output if process is not available. Set timeout to 0 instead. Document timeout 0 in WFMO comment. (lf_getblock): Drop invalid F_POSIX lock type shortcut. Only return overlap if event is not signalled. Fix comment. 2012-02-14 Christopher Faylor * pinfo.cc (_pinfo::set_ctty): Revert 2012-02-07 change to skip function if tty in question == our ctty. * syscalls.cc (setsid): Avoid two function calls. * dtable.cc (dtable::dup_worker): Remove debugging. * init.cc (search_for): Calculate for every new process rather than using shared value. (threadfunc_ix): Fill in for every new process rather than sing shared value. 2012-02-14 Corinna Vinschen * fhandler_disk_file.cc (fhandler_cygdrive::fstat): Don't bother to set st_nlink correctly, just set it to 1 to avoid potential network timeouts. 2012-02-14 Corinna Vinschen * flock.cc (lf_setlock): Don't close waited lock object handle before we own the node lock. Fix comment. 2012-02-14 Corinna Vinschen * cygheap.cc (init_cygheap::init_installation_root): Convert function init_installation_root into a cygheap method. * cygheap.h (struct init_cygheap): Move installation_root, installation_key, and installation_key_buf from shared .cygwin_dll_common DLL section to cygheap. Declare new method init_installation_root. * dtable.cc (handle_to_fn): Accommodate the move of installation strings to the cygheap. * external.cc (cygwin_internal): Ditto. * fhandler_console.cc (fhandler_console::open_shared_console): Ditto. * fhandler_mailslot.cc (fhandler_mailslot::get_object_attr): Ditto. * fhandler_tty.cc: Ditto, throughout. * mount.cc (mount_info::init): Ditto. * pipe.cc (fhandler_pipe::create): Ditto. * shared.cc: Ditto, throughout. (installation_root): Remove. (installation_key): Move to cygheap. (installation_key_buf): Ditto. (installation_root_inited): Remove. (SPIN_WAIT): Remove. (init_installation_root): Move to cygheap. (memory_init): Call cygheap->init_installation_root right after cygheap->user.init. Drop call of init_installation_root function. * shared_info.h (init_installation_root): Drop declaration. (installation_root): Ditto. (installation_key): Ditto. * uinfo.cc (pwdgrp::load): Accommodate the move of installation strings to the cygheap. 2012-02-14 Corinna Vinschen * thread.cc: Drop including unused headers. 2012-02-13 Corinna Vinschen * miscfuncs.cc (struct thread_wrapper_arg): Convert char * to PBYTE. Change related casts throughout. (thread_wrapper): Only do the thread change if the application provided the stack. Otherwise, just use the Windows-provided stack. Set up POSIX guardpage here, if necessary. Move related comment from CygwinCreateThread here. (CygwinCreateThread): Never allocate and set up own stack here. Just compute stack size to reserve and use value in CreateThread call if stack hasn't been provided by the application. 2012-02-13 Corinna Vinschen * Makefile.in (clean): Remove non-existant regexp dir. * collate.h: New header. (__collate_range_cmp): Declare. (__collate_load_error): Define. * glob.cc: Pull in latest version from FreeBSD. Simplify and reduce Cygwin-specific changes. * regex/regcomp.c: Include collate.h on Cygwin as well. (__collate_range_cmp): Move from here... * nlsfuncs.cc (__collate_range_cmp): ...to here. * miscfuncs.cc (thread_wrapper): Fix typo in comment. (CygwinCreateThread): Take dead zone of Windows stack into account. Change the way how the stack is commited and how to handle guardpages. Explain how and why. * thread.h (PTHREAD_DEFAULT_STACKSIZE): Change definition. Explain why. 2012-02-12 Yaakov Selkowitz * include/pthread.h: Include time.h as required by POSIX. 2012-02-12 Christopher Faylor * exception.h (stackdump): Declare. * exceptions.cc (stackdump): Rework to perform all operations needed for a stackdump and to avoid recursion. (exception::handle): Use simplified stackdump interface. * sigproc.cc (signal::exit): Ditto. Delete now, uneeded declaration. 2012-02-11 Corinna Vinschen * miscfuncs.cc (DEFAULT_STACKSIZE): Remove. (CygwinCreateThread): Simplify code by assuming that now stack-related input values are undefined. Set stack protection to PAGE_READWRITE, as is default on Windows. Add lengthy comment to explain POSIX guardpage. * thread.cc (pthread_attr::pthread_attr): Initialize stacksize as PTHREAD_DEFAULT_STACKSIZE. Initialize guardsize as PTHREAD_DEFAULT_GUARDSIZE. * thread.h (PTHREAD_DEFAULT_STACKSIZE): Define. Add comment to explain. (PTHREAD_DEFAULT_GUARDSIZE): Define. 2012-02-10 Corinna Vinschen * miscfuncs.cc (DEFAULT_STACKSIZE): Set to 1 Megs. Drop comment about RLIMIT_STACK. * registry.cc (get_registry_hive_path): Expect the user hive path to be never longer than MAX_PATH. Don't prepend native NT path prefix here. Add comment. (load_registry_hive): Prepend native NT path prefix here. Additionally try to load user's classes hive. * uinfo.cc (cygheap_user::env_userprofile): Reduce size of userprofile_env_buf to MAX_PATH. Add comment. 2012-02-10 Christopher Faylor * syscalls.cc (setsid): On second thought, in the spirit of keeping things kludgy, set ctty to -2 here as a special flag, and... (open): ...only eschew setting O_NOCTTY when that case is detected. 2012-02-10 Christopher Faylor * syscalls.cc (open): Semi-revert (?) to allowing open of a tty to become controlling tty if there is no controlling tty. 2012-02-09 Christopher Faylor * exceptions.cc (setup_handler): Reduce system_printf to sigproc_printf since it is for a transient situation which will undoubtedly be handled. 2012-02-09 Corinna Vinschen * fhandler_dsp.cc (fhandler_dev_dsp::Audio_out::write): Set bytes_to_write to 0 in case it fits into the buffer, otherwise suffer early EOF in caller. 2012-02-09 Corinna Vinschen * dll_init.h (struct dll): Re-add modname. * dll_init.cc: Throughout, use modname where it was used before. (dll_list::operator[]): Use modname. Move comment from dll_list::alloc here and remove hint about GetModuleBaseNameW. (dll_list::alloc): Store full path in name, pointer to basename in modname. Search dll using modname. 2012-02-08 Christopher Faylor * dtable.cc (dtable::init_std_file_from_handle): Reinstate opening tty handles with O_RDWR permissions. 2012-02-08 Corinna Vinschen * thread.cc (__pthread_cond_wait_init): New static function replacing __pthread_cond_dowait. Only check and potentially initialize cond and mutex, drop call to (*cond)->wait. (pthread_cond_timedwait): Replace call to __pthread_cond_dowait with separate calls to __pthread_cond_wait_init and (*cond)->wait to be able to initialize cond before accessing its clock_id member. (pthread_cond_wait): Ditto (more or less). 2012-02-08 Christian Franke * include/sys/wait.h: Remove C++ inline functions for `union wait'. For C++ use `void *' as __wait_status_ptr_t instead. This is less type safe but fixes compile error on `wait(NULL)'. Remove extra `;'. 2012-02-08 Corinna Vinschen * sigproc.cc (child_info_fork::abort): Call TerminateProcess rather than ExitProcess. 2012-02-08 Corinna Vinschen * uinfo.cc (cygheap_user::env_userprofile): Simplify since network drives are not supported here. 2012-02-08 Corinna Vinschen * uinfo.cc (cygheap_user::env_userprofile): Convert native userprofile path returned from get_registry_hive_path to Win32 path. 2012-02-08 Corinna Vinschen * dll_init.cc: Throughout, drop usage of modname in favor of name. (dll_list::find_by_modname): Remove. (dll_list::alloc): Only store module basename in name. Add comment to explain why. Simplify address check. Fix formatting in comment. * dll_init.h (struct dll): Drop modname and find_by_modname. 2012-02-08 Corinna Vinschen * dll_init.cc (dll_list::alloc): Add DLL name to fabort output. Fix fabort string in case of bss start. 2012-02-08 Corinna Vinschen * include/sys/sysmacros.h: Include sys/types.h. 2012-02-07 Corinna Vinschen * mount.cc (mount_info::create_root_entry): Fix format specifier in api_fatal message. 2012-02-07 Corinna Vinschen * include/process.h: Move here from include/cygwin subdir. * exec.cc: Change include of process.h to reflect the fact that it's now back in include. * spawn.cc: Ditto. * syscalls.cc: Ditto. 2012-02-07 Christopher Faylor * cygheap.cc (init_cygheap::manage_console_count): Delete. * cygheap.h (init_cygheap::manage_console_count): Ditto. (init_cygheap::console_count): Ditto. * fhandler.h (fhandler_console::has_a): Ditto. (fhandler_console::free_console): Declare new function. * fhandler_console.cc (fhandler_console::free_console): Define new function. (fhandler_console::open_setup): Delete call to manage_console_count. (fhandler_console::close): Ditto. Replace with call to free_console(). * fhandler_tty.cc (fhandler_pty_slave::open): Delete call to manage_console_count. (fhandler_pty_slave::cleanup): Ditto. (fhandler_pty_slave::close): Call fhandler_console::free_console() if this is our controlling tty. * pinfo.cc (_pinfo::set_ctty): Skip function if tty in question == our ctty. Delete call to manage_console_count. * syscalls.cc (close_all_files): Avoid locking and avoid setting errno when iterating over fds. 2012-02-07 Christopher Faylor * include/cygwin/version.h: Bump CYGWIN_VERSION_DLL_MINOR to 11. 2012-02-03 Václav Zeman * grp.cc (pwdgrp::parse_group): Convert grp from macro to reference. * passwd.cc (pwdgrp::parse_passwd): Ditto for res. 2012-02-02 Christopher Faylor * syscalls.cc (close_all_files): Use cygheap_fdget to manipulate fhandler. Use debug_only_printf. 2012-02-02 Corinna Vinschen Fix memory and handle leaks due to fdopendir: * dir.cc (closedir): Call global close instead of just releasing the fhandler. * fhandler_disk_file.cc (fhandler_disk_file::closedir): Don't close fhandler handle here, rely on global closedir doing the right thing. * fhandler_registry.cc (fhandler_registry::readdir): Also delete d_hash when closing registry key. (fhandler_registry::rewinddir): Ditto. Avoid infinite recursion in VirtualStore under UAC: * fhandler_registry.cc (VIRT_CLASSES_KEY_PREFIX): Define. (VIRT_CLASSES_KEY_SUFFIX): Ditto. (VIRT_CLASSES_KEY): Ditto. (VIRT_CLASSES_LINKTGT): Ditto. (fhandler_registry::exists): Return virt_symlink as file type if this is a Classes key under the VirtualStore. (fhandler_registry::fstat): Handle virt_symlink. (fhandler_registry::readdir): Return DT_LNK as d_type if this is a Classes key under the VirtualStore. (fhandler_registry::fill_filebuf): Handle Classes symlink. Handle user impersonation in /proc/registry access: * autoload.cc (RegOpenUserClassesRoot): Define. (RegOpenCurrentUser): Define. * fhandler_registry.cc (RegOpenUserClassesRoot): Declare function missing in w32api. (RegOpenCurrentUser): Ditto. (fetch_hkey): New function. (fhandler_registry::open): Call fetch_hkey to get root registry key. (open_key): Ditto. 2012-02-01 Christopher Faylor * fcntl.cc (fcntl64): Add introductory debug statement. Call dup3 directly via dtable method to avoid over-incrementing refcnt. 2012-02-01 Christopher Faylor * dtable.cc (dtable::dup_worker): Add comment explaining why refcnt isn't incremented here. (dtable::dup3): Simplify slightly. Add comment. * syscalls.cc (dup3): Increment refcnt here, similarly to dup2. 2012-02-01 Christopher Faylor * fhandler.cc (fhandler_base_overlapped::has_ongoing_io): Don't block GetOverlappedResult since previous IsEventSignalled will have reset the handle. * select.cc (cygwin_select): Remove space before parentheses in syscall debugging output. (pipe_data_available): Streamline if block. 2012-01-31 Christopher Faylor * syscalls.cc (dup3): Fix debug typo. * fhandler.cc (flush_async_io): Assume only called for writer. Call GetOverlappedResult directly rather than kludging call to has_ongoing_io. (fhandler_base_overlapped::close): Only start flush thread when closing write handle. Only cancel I/O when reading. 2012-01-28 Corinna Vinschen * cygwin.din: Fix order (DATA first). 2012-01-27 Corinna Vinschen * dcrt0.cc (is_dos_path): New macro to recognize drive letter and UNC DOS paths. (globify): Call is_dos_path instead of isdrive. 2012-01-26 Christopher Faylor * sigproc.cc (child_info::retry_count): Default to 1. 2012-01-23 Corinna Vinschen * syscalls.cc (gethostid): Simplify. Just fetch MachineGuid and create hash from there. 2012-01-22 Christopher Faylor * fhandler.h (fhandler_fifo::arm): Declare new function. * fhandler_fifo.cc (fhandler_fifo::arm): Define new function. (fhandler_fifo::open): Fix handling of RDWR pipes to avoid opening a second handle. Use arm() function to set events. (fhandler_fifo::raw_read): Correctly go into "connect again logic" when we detect another writer is available. Use arm() function to set event. * pipe.cc (fhandler_pipe::create): Add more detail to debugging output. 2012-01-22 Christopher Faylor * cygheap.h (cygheap_fdmanip::release): Simplify. * dtable.cc (dtable::release): Make void again. Skip not_open check since it is guaranteed to be open. Don't bother deleting here since actual deletion will be handled in cygheap_fdget::~cygheap_fdget. * dtable.h (dtable::release): Make void again. * syscalls.cc (dup2): Bump fhandler use count on successful dup. 2012-01-22 Christopher Faylor * cygheap.h (cygheap_fdget::~cygheap_fdget): Simplify now that refcnt reports reference count changes itself. * fhandler.cc (fhandler_base::reset): Set _refcnt to 0. * fhandler.h (fhandler_base::refcnt): Report refcnt when debugging. * select.cc (cygwin_select): Set return_on_signal to indicate when select should be interrupted. (select_stuff::wait): Keep looping unless return_on_signal is set. * select.h (select_stuff::return_on_signal): New variable. (select_stuff::select_stuff): Zero return_on_signal. 2012-01-20 Corinna Vinschen * fhandler.h (fhandler_registry::opendir): Declare. * fhandler_registry.cc (fhandler_registry::opendir): New function. 2012-01-13 Yaakov Selkowitz * include/cygwin/config.h (_GLIBC_EXTENSION): Define. 2012-01-11 Christopher Faylor * spawn.cc (child_info_spawn::worker): Delete debugging. 2012-01-11 Christopher Faylor Update copyright on all files checked in so far this year. * fhandler.h: Use #pragma once rather than ifdef guards. (fhandler_console::tc_getpgid): Return our pgid if we have never opened a console. * fork.cc: Rearrange includes to accommodate fhandler.h use of pinfo.h. * sigproc.cc: Ditto. * spawn.cc: Ditto. (child_info_spawn::worker): Query myself->pgid rather than calling expensive function. * thread.h: Use #pragma once rather than ifdef guards. * pinfo.h: Use #pragma once rather than ifdef guards. (pinfo::remember): Don't define if sigproc.h has not been included. (pinfo::reattach): Ditto. * sigproc.h: Use #pragma once rather than ifdef guards. Use different test to see if pinfo.h has been included. 2012-01-09 Corinna Vinschen * include/cygwin/process.h: Move here from newlib. * exec.cc: Change include of process.h to reflect the fact that it's now in the include/cygwin subfolder. * spawn.cc: Ditto. * syscalls.cc: Ditto. 2012-01-09 Corinna Vinschen * miscfuncs.cc (thread_wrapper): Make sure stack is 16 byte aligned to make gcc-3 compiled pthread applications happy. 2012-01-08 Christopher Faylor * dtable.cc (dtable::stdio_init): Always initialize console when we have one. * fhandler_termios.cc (fhandler_termios::tcsetpgrp): Use a better method to print tty name for debugging. (fhandler_termios::bg_check): Ditto. * pinfo.cc (_pinfo::set_ctty): Remove leftover debugging stuff. Simplify behavior when setting tty's sid and pgid to avoid overwriting previously set values. * spawn.cc (ch_spawn): Cosmetic change. 2012-01-06 Yaakov Selkowitz * cygwin.din (pthread_sigqueue): Export. * posix.sgml (std-gnu): Add pthread_sigqueue. * thread.cc (pthread_sigqueue): New function. * thread.h (pthread_sigqueue): New function. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. 2012-01-02 Christopher Faylor * path.cc (get_current_dir_name): Avoid memory leak. Don't return PWD contents if directory doesn't actually exist. 2012-01-01 Yaakov Selkowitz * cygwin.din (get_current_dir_name): Export. * path.cc (get_current_dir_name): New function. * posix.sgml (std-gnu): Add get_current_dir_name. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump.