* fork.cc (fork): Set sigframe here, since it can pause for a considerable
amount of time.
* environ.cc (_addenv): Add debugging.
* fhandler.cc: Eliminate unneeded include.
* smallprint.c: Ditto.
Corinna Vinschen [Sun, 22 Oct 2000 10:13:30 +0000 (10:13 +0000)]
* pinfo.cc (pinfo_init): Eliminate call to `set_process_privileges'.
* security.cc (write_sd): Call `set_process_privileges' on the first
call to `write_sd'.
(set_process_privileges): Eliminate adjusting SE_BACKUP_NAME privilege.
* fhandler.h (fhandler_console): Remove tcsetpgrp.
* fhandler_console.cc (fhandler_console::tcsetpgrp): Eliminate.
* fork.cc (fork_parent): Avoid returning same pid twice in a row regardless of
OS.
* pinfo.cc (pinfo::init): Rename create argument to flags and treat it as such.
* signal.cc (set_sigcatchers): New function.
(signal): Use set_sigcatchers to increment or decrement sigcatcher tracker.
(sigaction): Ditto. Add debugging output.
* spawn.cc (spawn_guts): Always quote first argv[0] argument when it's a
COMSPEC shell.
* external.cc (fillout_pinfo): Pass PID_NOREDIR flag to pinfo init to avoid
finding execed processes twice.
* signal.cc (kill_pgrp): Ditto.
* spawn.cc (spawn_guts): Avoid passing first argument to CreateProcess when
running a windows shell so that CreateProcess will locate the shell.
Reorganize so that correct error is returned when CreateProcess fails.
Earnie Boyd [Thu, 19 Oct 2000 20:56:51 +0000 (20:56 +0000)]
* Makefile.in: increment VERSION. Change tar file name for dist and
bindist targets to be more standard.
* config.guess: Update with the currently published file.
* config.sub: ditto.
* configure.in: Use value of build_alias instead of testing for
directory names to set BUILDENV.
* configure: ditto.
* lib/Makefile.in: Change the name of the targets install,
install-headers and install-libraries to xinstall, xinstall-headers
and xinstall-libraries for system target specified installation.
Recreate targets install, install-headers and install-libraries for
exec-prefix specified installation. Ditto for the uninstall targets of
the same name.
Earnie Boyd [Thu, 19 Oct 2000 20:56:50 +0000 (20:56 +0000)]
* Makefile.in: increment VERSION. Change tar file name for dist and
bindist targets to be more standard.
* config.guess: Update with the currently published file.
* config.sub: ditto.
* configure.in: Use value of build_alias instead of testing for
directory names to set BUILDENV.
* configure: ditto.
* lib/Makefile.in: Change the name of the targets install,
install-headers and install-libraries to xinstall, xinstall-headers
and xinstall-libraries for system target specified installation.
Recreate targets install, install-headers and install-libraries for
exec-prefix specified installation. Ditto for the uninstall targets of
the same name.
* sigproc.h (sigthread): Eliminate locking for now since per thread signalling
is not available.
* dcrt0.cc (sigthread::init): Ditto.
(dll_crt0_1): Move set_process_privileges call (temporarily?) to pinfo_init.
(pinfo_init): Only call set_process_privileges when allow_ntsec.
DJ Delorie [Thu, 19 Oct 2000 00:45:39 +0000 (00:45 +0000)]
* dcrt0.cc (dll_crt0_1): init cygcwd before forkee branch
* environ.cc (conv_start_chars): Cache a table of "first
characters" for environment variables needing conversion.
(getwinenv): Use it.
(environ_init): Create it, also check first chars for TERM and
CYGWIN.
* path.cc: Use lookup table for case insensitive comparisons.
* exceptions.cc (call_handler): Make signal pending if sigsave.sig is still
active.
* syscalls.cc (_read): Don't clear errno.
* sigproc.cc (wait_sig): Don't scan the waiting process list after a SIGCHLD if
there are no zombies to reap.
* winsup.h: Use __builtin_strcmp.
* environ.cc (posify): Don't initialize len unless it is required
(from DJ Delorie <dj@redhat.com>).
* sigproc.cc (proc_subproc): Remove unneeded test for correct process in
PROC_ADDCHILD. Return 0 when terminated child has just been reparented.
(wait_subproc): Only send SIGCHLD when proc_subproc returns != 0.
* strace.cc (strace::vsprntf): Only strip .exe extension from program name.
DJ Delorie [Tue, 17 Oct 2000 01:46:26 +0000 (01:46 +0000)]
* fhandler_clipboard.cc: new file
* Makefile.in: include fhandler_clipboard.o in DLL_OFILES list.
* fhandler.h: add FH_CLIPBOARD to the devices enum.
(fhandler_dev_clipboard): new
* path.cc (windows_device_names): add "\\dev\\clipboard"
(get_device_number): check for "clipboard"
* dcrt0.cc: declare a few more functions from winuser.h
* dtable.cc (dtable::build_fhandler): check for FH_CLIPBOARD in
switch().
* debug.cc (add_handle): Issue warning on attempts to add the same handle more
than once.
* fhandler_tty.cc (fhandler_tty_slave::open): Protect some handles.
(fhandler_tty_common::close): Use proper name when closing handles.
(fhandler_pty_master::close): Don't close to_slave or from_slave since they've
already been closed earlier in the function.
* sigproc.cc (proc_subproc): Don't protect vchild->hProcess. Expect that the
caller will do this, instead.
* tty.cc (tty_list::terminate): Use proper name when closing handles.
(tty::make_pipes): Protect some handles.
* Makefile.in: Remove some obsolete stuff.
* dcrt0.cc (dll_crt0_1): Call signal_fixup_after_exec where appropriate. Set
myself->uid from parent version. Just use ThreadItem Init method. Close or
store hexec_proc as appropriate.
(_dll_crt0): Store user_data->forkee here so that proper tests can be made
subsequently.
(do_exit): Remove hExeced stuff.
* environ.cc (environ_init): Accept environ count as well as environ pointer.
* environ.h: Reflect above change.
* pinfo.cc (pinfo_init): Ditto. Accept environ count.
(fixup_in_spawned_child): Remove.
* spawn.cc (spawn_guts): Move signal code to dll_crt0_1. Don't suspend execing
process since it is no longer necessary. Store envc.
* exceptions.cc (signal_fixup_after_exec): New function.
(call_handler): Remove hExeced test.
* child_info.h (cygheap_exec_info): Store envc as well as envp.
(child_info_spawn): Store hexec_proc so that it can be closed in child.
* path.cc (normalize_posix_path): Avoid intermediate use of temporary cwd buf.
(normalize_win32_path): Ditto.
(cwdstuff::get_initial): Always set lock.
* sigproc.h: Remove hExeced.
* strace.cc (strace::vsprntf): Modify to accomodate for lack of hExeced.
* thread.cc (MTinterface::Init): Merge Init1 and ClearReent into this method.
(MTinterface::Init1): Eliminate.
(MTinterface::ClearReent): Eliminate.
* thread.h: Reflect above changes.
* include/sys/strace.h (strace): Make microseconds() public. Make various
functions 'regparm', throughout.
* pinfo.h (_pinfo): Inline simple signal manipulation functions. Requires
inclusion of thread.h which was removed from .cc files, where appropriate.
throughout.
* pinfo.cc: Eliminate signal manipulation functions.
(_pinfo::exit): Calculate total rusage for exiting process here.
* cygheap.cc (size2bucket): Eliminate.
(init_buckets): Ditto.
(_cmalloc): Calculate size and bits in a loop rather than going through a
function call.
(_crealloc): Use stored array index to calculate allocated size.
* spawn.cc (spawn_guts): Use _pinfo exit method to exit, calculating cpu usage.
* exceptions.cc (set_console_handler): Don't allocate
console_handler_thread_waiter. It is obsolete.
(ctrl_c_handler): Don't use console_handler_thread_waiter.
* path.cc (hash_path_name): Fix handling of relative names. Make case
insensitive.
* path.h (suffix_info): Use initializers.
* pinfo.h (_pinfo): Avoid initializers for null case.
* resource.cc (fill_rusage): Zero rest of rusage structure.
* security.cc (set_process_privileges): Don't reopen parent process. Just use
hMainProc.
* signal.cc (signal): Track when a signal handler has been used.
(sigaction): Ditto.
* sigproc.cc (pchildren): Use default initializer.
(zombies): Ditto.
(sigproc_terminate): Avoid closing handles that will be closed on exit anyway.
(wait_sig): Send signal to "parent" on EXECing, not FORKing.
(wait_subproc): Send SIGCHLD here rather than in proc_wait to avoid potential
muto conflicts.
* sigproc.h (sigthread): Don't initialize to zero. It's the default.
* spawn.cc (spawn_guts): Fill in resources from exec parent prior to
termination.
* sync.h (muto): Don't initialize to zero.
* syscalls.cc (close_all_files): Use one lock around entire loop and call
fhandler close/release stuff directly.
(_read): Don't use ready_for_read if there are not signal handlers active.
* dcrt0.cc (dll_crt0_1): Fix display of "title".
(do_exit): Use pinfo exit method to exit.
(__api_fatal): Ditto.
* exceptions.cc (signal_exit): Ditto.
* fork.cc (fork_child): Remove debugging stuff. Use pinfo_fixup_after fork in
place of exec_fixup_after_fork.
* pinfo.cc (pinfo_fixup_after_fork): New method.
(pinfo_fixup_in_spawned_child): Ditto.
(_pinfo::exit): New method.
(_pinfo::init): Remove recursion. Detect pathological case where pinfo
structure already exists for new pid.
* pinfo.h (_pinfo): Reorganize slightly. Add new method and new function
declarations.
* sigproc.cc (proc_exists): Previous simplification was a little to simple.
Try harder to detect if a process exists.
(proc_terminate): Use PID_EXITED setting to determine if process is still
around.
(WFSO): Remove debugging statement.
(WFMO): Ditto.
* spawn.cc (exec_fixup_after_fork): Eliminate.
(spawn_guts): Always set old_title to NULL. Is it really needed? Move
hexec_proc to pinfo.cc. Call pinfo_fixup_in_spawned_child to eliminate handle
link after a spawn.
* include/sys/cygwin.h: Remove PID_NOT_IN_USE. Add PID_EXITED.
Corinna Vinschen [Sat, 14 Oct 2000 08:55:44 +0000 (08:55 +0000)]
* cygwin.din: Add symbol hstrerror.
* net.cc: Change meaning of member `s' of struct host_errmap.
(set_host_errno): Fix error in loop condition.
(hstrerror): Ditto.
(herror): Add appropriate functionality.
* include/netdb.h: Add declaration of hstrerror.
* include/cygwin/version.h: Bump CYGWIN_VERSION_API_MINOR to 29.
* cygheap.cc (cygheap_fixup_in_child): Don't page round cygheap copied from
parent.
* dcrt0.cc (do_exit): Don't cleanup pinfo on exit. That happens automatically
now.
* exceptions.cc (signal_exit): Ditto.
* fork.cc (fork_parent): Use stack_here value passed in from fork().
(fork): Figure out top of stack here and pass it to fork_parent.
* pinfo.cc (_pinfo::record_death): Eliminate.
* pinfo.h (_pinfo): Ditto.
* sigproc.cc (proc_exists): Simplify.
(proc_terminate): Ditto.
(remove_zombie): Don't cleanup pinfo stuff.
(wait_sig): Send subproc_ready signal whether execed or spawned.
* spawn.cc (spawn_guts): Always create subproc_ready event. Use it for both
exec and spawn.
(_spawnve): Send proper mode to spawn_guts when mode != _P_OVERLAY.
* child_info: Bump child_info "version".
(child_info): Move some fields from child_info_spawn to here.
* cygheap.cc: Make cygheap pointers NOCOPY.
* dcrt0.cc (dll_crt0_1): Copy cygwin heap here regardless of whether we've been
forked or execed.
* dtable.cc (dtable::fixup_after_fork): Just release close-on-exec fds.
* exceptions.cc (stackdump): Respond to C warning.
* fork.cc: Reorganize to minimize stack copying.
(fork_child): New function.
(fork_parent): Ditto.
(sync_with_child): Don't suspend the forkee.
(sync_with_parent): Ditto. Make into a function.
* heap.cc (heap_init): Add some debugging output.
* path.cc (path_conv::check): Add an assertion.
(has_suffix): Ditto.
* security.cc (get_pw_sid): Defend against NULL.
* sigproc.cc (proc_subproc): Fix debugging output.
(wait_sig): Ditto.
* strace.cc: Make statics NO_COPY throughout.
(strace::vsprntf): Defend against NULL.
* errno.cc (seterrno_from_win_error): Fix debugging output.
* fhandler.cc (fhandler_base::fstat): Move to inline method in fhandler.h.
(fhandler_base::set_io_handle): Ditto.
* fhandler.h (fhandler_base): Make some methods inline.
* fhandler_console.cc (fhandler_console::write_normal): Make buffer larger.
* sigproc.h (sigframe::sigframe): Actually use set ebp parameter correctly.
* spawn.cc (spawn_guts): Set dwProcessId when exec'ing. Just exit immediately
after reparenting.
* syscalls.cc: Sprinkle sigframe stuff throughout.
* wait.cc (wait4): Set signal frame here.
* dcrt0.cc (__api_fatal): Don't rely on small_printf to display errors. Always
display problems to the console, if possible.
* fhandler.h (fhandler_dev_mem): Erase member `init_phase' and
member function `init'.
* fhandler_mem.cc: Add typedefs for NT internal data types
`SYSTEM_INFORMATION_CLASS' and `SYSTEM_BASIC_INFORMATION'.
Add prototype for `NtQuerySystemInformation' function.
(fhandler_dev_mem::fhandler_dev_mem): Takes over initialization task
from `init'. Use `NtQuerySystemInformation' function to evaluate the
size of physical memory instead of interval search.
(fhandler_dev_mem::init): Eliminated.
(fhandler_dev_mem::open): Don't call `init'.
(fhandler_dev_mem::read): Eliminate check for `init_phase'.
(dummy_autoload): Add load statement for `NtQuerySystemInformation'.
* ps.cc (main): Change order of reporting slightly so that windows pids are
more obvious.
* strace.cc (add_child): Just add child's pid directly.
(remove_child): No need to close the child process pid since ContinueDebugEvent
does that automatically.
(proc_child): Ditto for child thread.
* dtable.cc (set_std_handle): Use std_consts array to control SetStdHandle
settings.
(dtable::fixup_after_fork): Ditto.
* exceptions.cc (set_sig_errno): Remove some debugging output.
* path.cc (path_conv::check): Don't OR need_directory with flags sent to
symlink_info::check.
(symlink_info::check): Use PATH_ALL_EXEC to determine when a file is
executable.
* path.h (path_types): Add PATH_ALL_EXEC.
(isexec): Use PATH_ALL_EXEC so that cygexec types will be considered
executable.
* pinfo.h (_pinfo): Add a process handle that is kept open throughout the life
of a cygwin pid.
* sigproc.cc (proc_exists): Remove hopefully obsolete stuff.
(proc_subproc): Set up process handle that is kept open throughout the life of
a cygwin pid. Reorganize PROC_WAIT stuff to use common code.
(proc_terminate): Close pid lifetime process handle.
(checkstate): Cleanup.
(stopped_or_terminated): Move zombie cleanup.
(remove_zombie): To here.
* spawn.cc (spawn_guts): Reorganize reparenting code for 1247th time.
* include/ntsecapi.h: New file.
* include/subauth.h: Ditto.
* include/ipexport.h: Fix global header define not to contain
trailing underscore. Change layout according to standard.
* include/iphlpapi.h: Ditto.
* include/ipifcons.h: Ditto.
* include/iptypes.h: Ditto.
* include/ntdef.h: Ditto. Define conditional datatypes dependent
of inclusion of ntdecapi.h and subauth.h.
* lib/secur32.def: New stub for secur32.dll.
* fhandler.h (fhandler_dev_mem): Add methods mmap, munmap and msync.
Add `unit' member.
* fhandler_mem.cc (fhandler_dev_mem): Initialize `unit' as well.
(init): Care for differences between /dev/mem, /dev/kmem (not
implemented yet) and /dev/port.
(open): Change debug message to reflect the device.
(mmap): New function.
(munmap): Ditto.
(msync): Ditto.
(fstat): Use unit when setting st_dev in stat structure.
* mmap.cc (mmap): Handle MAP_ANONYMOUS flag.
Change error handling slightly.
* path.cc (get_device_number): Handle /dev/port.
* net.cc (set_socket_inheritance): Rename from duplicate_socket. Use NT
specific call when appropriate.
(__set_winsock_errno): Rename from set_winsock_errno. Accept function and line
as arguments.
* path.cc (path_conv::check): Continue the neverending battle to make cygwin
properly understand that path specs ending in a slash require that the path
refer to a directory. Windows does not do this by default.
(symlink_info::check): Remove ENOTDIR test. Move it to path_conv::check.
* path.h: Remove obsolete constant.
* winsup.h (set_winsock_errno): New macro.
=====================================
These changes require rebuilding all.
=====================================
* fhandler.h: Add mmap(), munmap() and msync() to fhandler_base
and fhandler_disk_file.
* mmem.cc (mmap): Eliminated device dependent implementation details.
These are moved to the appropriate fhandler class.
(munmap): Ditto.
(msync): Ditto.
(fhandler_base::mmap): New method.
(fhandler_base::munmap): Ditto.
(fhandler_base::msync): Ditto.
(fhandler_disk_file::mmap): Ditto.
(fhandler_disk_file::munmap): Ditto.
(fhandler_disk_file::msync): Ditto.
* net.cc: General cleanup.
(fdsock): Return pointer to created fhandler_socket.
(cygwin_socket): Use pointer returned by fdsock. Return correct errno when fd
< 0.
* exceptions.cc (interruptible): Add extra debugging.
* sigproc.h (wait_sig): Fill in frame pointer, by default, prior to calling or
suffer confusion due to September 7 change below.
* cygheap.cc (cygheap_init): Born again function.
(_cmalloc): Reorganize to accomodate muto locking.
(_cfree): Use muto lock to avoid multi-thread problems.
* cygheap.h (incygheap): Just use cygheap_max to find upper cygwin heap bounds.
* dcrt0.cc (dll_crt0_1): Reinstitute cygheap_init call.
* path.cc (getcwd): Just return cwdstuff::get result, allowing correct handling
of negative length.
(cwdstuff::get): Malloc a buffer if one is not available.
* include/ipifcons.h: New header file.
* include/iprtrmib.h: Move operational states to ipifcons.h.
* include/iphlpapi.h: Add missing parameters to GetIfTable()
declaration.
* Makefile.in: Add fhandler_mem.o to the dependencies.
* dtable.cc (dtable::build_fhandler): Add case for FH_MEM.
* fhandler.h: Add FH_MEM device type. Add class fhandler_dev_mem.
* fhandler_mem.cc: New file. Implementation of class fhandler_dev_mem.
* path.cc: Add /dev/mem to windows_device_names.
(get_device_number): Add FH_MEM type.