Commit Graph

415 Commits

Author SHA1 Message Date
Corinna Vinschen 4c25744f86 * autoload.cc: Add autoload statement for `WSASetLastError'.
* net.cc (cygwin_connect): Change error code to WSAEINPROGRESS
        when connect returns WSAEWOULDBLOCK.
2000-11-07 20:01:09 +00:00
Christopher Faylor c0188ae7cb * dcrt0.cc (sigthread::init): Reinstitute sigthread lock as a critical section.
(dll_crt0_1): Move sigthread lock initialization to earlier in startup.
* exceptions.cc (interrupt_on_return): Remove previous kludgy attempt to detect
an invalid frame.
(call_handler): Eliminate inner for loop.  Grab signal critical section lock
where appropriate.
* sigproc.cc (proc_subproc): Restore uid setting.
* sigproc.h (sigthread): Reinstitute sigthread lock as a critical section.
(sigframe): Grab the sigthread lock before clearing frame to avoid having the
signal thread use an invalid frame.
2000-11-06 23:12:05 +00:00
Christopher Faylor a98b1584c2 * path.cc (mount_info::read_cygdrive_info_from_registry): Use
CYGWIN_INFO_CYGDRIVE_PREFIX, CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX, and
CYGWIN_INFO_CYGDRIVE_FLAGS.
* path.cc (mount_info::write_cygdrive_info_to_registry): Use
CYGWIN_INFO_CYGDRIVE_PREFIX and CYGWIN_INFO_CYGDRIVE_FLAGS.
* path.cc (mount_info::remove_cygdrive_info_from_registry): Ditto.
* path.cc (mount_info::get_cygdrive_prefixes): Use CYGWIN_INFO_CYGDRIVE_PREFIX.
* include/cygwin/version.h: Add CYGWIN_INFO_CYGDRIVE_FLAGS,
CYGWIN_INFO_CYGDRIVE_PREFIX, and CYGWIN_INFO_CYGDRIVE_DEFAULT_PREFIX.
2000-11-06 16:40:29 +00:00
Christopher Faylor df664bc1a8 * errno.cc (strerror): Change EAGAIN case to return "Resource temporarily
unavailable" instead of "No more processes".
2000-11-06 16:13:44 +00:00
Christopher Faylor f8038d021f Fix typo. 2000-11-06 06:38:21 +00:00
Christopher Faylor dd11f11fae * child_info.h (child_info): Add pppid_handle for closing the parent's of the
parent handle.
* dcrt0.cc (_dll_crt0): Close parent's parent handle when spawned or forked.
* debug.cc (add_handle): Correct erroneous reference to handle structure when
printing warning.
* exceptions.cc (interrupt_now): Always return 1.
(interrupt_on_return): Accept a sigthread argument.  Check to see if this
argument has been trashed prior to setting up the stack return.
(call_handler): Add a loop around attempts to dispatch signals to detect case
where interrupt_on_return fails.
(_sigdelayed): Set up a temporary frame pointer prior to calling stuff that
could trigger an interrupt or the stack walking code will be very confused.
* fork.cc (fork_parent): Move a lot of the setup of the child process into
proc_subproc.
* spawn.cc (spawn_guts): Ditto.  Use ppid_handle to contact logical parent when
reparenting.
* pinfo.h (_pinfo): Remember the logical handle of the parent process.
* sigproc.cc (proc_subproc): Record most stuff necessary for the _pinfo
structure that is inferrable from myself when adding children.
(wait_sig): Always set 'pending_signals' flag when about to kick off the signal
scanning loop.  Reset it only if there are no pending signals.
2000-11-06 06:36:32 +00:00
Christopher Faylor 95101076e5 * pinfo (wait_subproc): Son of neverending debug tweaking. 2000-11-05 18:47:28 +00:00
Christopher Faylor 914f7bf565 * pinfo (wait_subproc): Neverending debug tweaking. 2000-11-05 16:47:00 +00:00
Christopher Faylor 0c9ae85d56 * pinfo.cc (winpids:add): New method.
(winpids::enumNT): New method renamed from EnumProcessesNT.  Use add method to
add elements to the lists.
(winpids::enum9x): New method renamed from EnumProcesses9x.  Use add method to
add elements to the lists.
(winpids::enum_init): Accept 'winpid' parameter to control whether to add all
windows pids to the list.
(winpids::release): New method.
* pinfo.h (winpids): Reflect above changes.
* signal.cc (kill_pgrp): Ditto.
* external.cc (fillout_pinfo): Ditto.
2000-11-05 06:42:23 +00:00
Christopher Faylor 7edb836a68 * exceptions.cc (handle_sigsuspend): Record frame here for signalling.
(set_process_mask): Ditto.
2000-11-05 03:08:39 +00:00
Christopher Faylor 1ae469adf4 * sigproc.cc (wait_subproc): Still more debugging cleanup. 2000-11-04 19:25:55 +00:00
Christopher Faylor e46db834d9 * pinfo.cc (EnumProcessesNT): Avoid 0 pids.
(EnumProcesses9x): Ditto.
* sigproc.cc (remove_childe): Eliminate.
(proc_subproc): Move remove_child stuff here.
(wait_subproc): Synchronize with proc_subproc when error occurs.  Add more
debugging info.
* sigproc.h (procstuff): Add an entry.
* spawn.cc (spawn_guts): Add sigframe here.
2000-11-04 05:54:57 +00:00
Christopher Faylor c2445f2abc * sigproc.cc (wait_subproc): Refine debug output. 2000-11-04 01:08:23 +00:00
Christopher Faylor bb5d559a73 * pinfo.cc (pinfo::init): Reverse order of setting status and pid info in an
execed process to avoid a race.
* sigproc.cc (wait_subproc): Print more info when a WFSO error occurs.
* automode.c: New file.
* syscalls.cc (close_all_files): Streamline slightly.
* cygheap.cc (ccalloc): Clear *entire* allocated array.
2000-11-03 04:27:03 +00:00
Christopher Faylor ed15374b49 * ntdll.h: Remove IO_COUNTERS definition since it is now in winnt.h. 2000-11-02 06:59:07 +00:00
Christopher Faylor 6d87f7d7c4 * pinfo.cc (EnumProcessesNT): New function. Eliminates dependence on psapi.h.
(EnumProcesses9x): Rename from EnumProcessesW95.  Change arguments to be more
useful for cygwin.
(winpids::init): Accomodate argument changes.
(enum_init): Ditto.
* pinfo.h (winpids): Make pidlist dynamically extendable by storing it as a
pointer and remembering the size.
* ntdll.h: Add extra definitions needed for EnumProcessesNT.  Reformat via
'indent'.
2000-11-02 05:25:56 +00:00
Christopher Faylor e2fa502354 * exceptions.cc (interruptible): Remove obsolete tests.
(sigreturn): Construct pseudo-frame-pointer so that signal handler can figure
out where to put return address when signals are coming in quickly.
* path.cc (cwdstuff::get): Allow length 0 buffer length when buffer when NULL.
2000-11-02 02:15:02 +00:00
Christopher Faylor b12796a06d * path.h (has_exec_chars): Standard function for checking for executable magic
numbers.
* path.cc (symlink_info::check): Use the above function.
* fhandler.cc (fhandler_disk_file::open): Ditto.
2000-10-31 23:14:29 +00:00
Christopher Faylor 772e2322bd * path.cc (_readlink): Return ENOENT when file does not exist. 2000-10-31 23:01:21 +00:00
Corinna Vinschen 0f34137539 * fhandler.h (fhandler_dev_raw): Add method `fixup_after_exec'. 2000-10-31 22:38:00 +00:00
Corinna Vinschen 7cccedf8de * fhandler.h (fhandler_dev_raw): Add definition for method
`fixup_after_fork'.
        * fhandler_raw.cc (fhandler_dev_raw::fhandler_dev_raw): Add
        `set_need_fixup_after_fork' call.
        (fhandler_dev_raw::~fhandler_dev_raw): Revert to user space
        allocation.
        (fhandler_dev_raw::open): Ditto.
        (fhandler_dev_raw::dup): Ditto. Reset buffer pointer.
        (fhandler_dev_raw::fixup_after_fork): New function.
        * fhandler_tape.cc (fhandler_dev_tape::open): Revert to user space
        memory allocation.
        (fhandler_dev_tape::ioctl): Ditto. Change behaviour on MTSETBLK when
        new size is 1.
2000-10-31 22:20:59 +00:00
Corinna Vinschen 8e32a18e79 * fhandler_tape.cc (fhandler_dev_tape::open): Fix memory allocation.
Use Cygwin heap instead of user heap.
        (fhandler_dev_tape::ioctl): Ditto.
2000-10-31 19:59:16 +00:00
Christopher Faylor dd07a42567 * pinfo.cc (enum_init): Don't suffer silently if we can't load the process
enumerators.
2000-10-31 17:01:56 +00:00
Christopher Faylor d50d220655 * signal.cc (kill_pgrp): Revert 25-Oct change.
(kill_worker): Ditto.
2000-10-30 23:19:45 +00:00
Christopher Faylor f745abc7a0 * include/cygwin/version.h: Bump DLL minor version number to 6. 2000-10-30 01:53:02 +00:00
Christopher Faylor 75a57bf04a Whitespace cleanup.
* configure.in: Eliminate subdir stuff.
* configure: Regenerate.
* include/getopt.h (option): Make name field 'const'.
2000-10-28 05:41:44 +00:00
Corinna Vinschen a5cc215f75 * autoload.cc: New file keeping all autoload stuff.
* Makefile.in: Add autoload.o to dependencies.
        * dcrt0.cc: Move all autoload stuff to autoload.cc.
        * fhandler_mem.cc: Ditto.
        * net.cc: Ditto.
        * uinfo.cc: Ditto.
2000-10-27 18:53:56 +00:00
Christopher Faylor 018a91fa2e * sigproc.cc (wait_sig): Add braces to avoid confusion. 2000-10-27 15:38:32 +00:00
Corinna Vinschen afd5033d83 * fhandler_socket.cc: New file.
* Makefile.in: Add fhandler_socket.o to dependencies.
        * fhandler.h: Change comment.
        * net.cc Move all fhandler_socket methods to fhandler_socket.cc.
        * winsup.h: Add declaration for `ws2_32_handle'.
2000-10-27 09:50:33 +00:00
Corinna Vinschen dd4f0b2343 * dtable.cc (dtable::release): Check for socket. Change
cnt_need_fixup_before accordingly.
        (dtable::dup2): Ditto.
        (dtable::fixup_before_fork): New method.
        (dtable::fixup_before_exec): Ditto.
        * dtable.h (class dtable): Add member `cnt_need_fixup_before'. Add
        definition for methods `dec_need_fixup_before', `inc_need_fixup_before',
        `need_fixup_before', `fixup_before_exec' and `fixup_before_fork'.
        * fhandler.h (class fhandler_base): Slight rearrangements. Add
        definitions for methods `fixup_before_fork_exec'.
        (class fhandler_socket): Eliminate superfluous constructor.
        Add member `prot_info_ptr'. Add destructor. Add definitions for
        methods `dup', `fixup_before_fork_exec', `fixup_after_fork' and
        `fixup_after_exec'.
        * fork.cc (fork_parent): Care for file types which need a fixup
        before fork. Start child in suspended state then.
        * net.cc: New global variable `ws2_32_handle' and `wsadata'.
        (fdsock): Check for Winsock version. Call `set_socket_inheritance'
        only if Winsock version < 2.0. Care for `need_fixup' count in fdtab.
        (cygwin_socket): Eliminate call to `set_socket_inheritance'.
        (cygwin_accept): Ditto.
        (cygwin_rcmd): Ditto.
        (cygwin_rresvport): Ditto.
        (cygwin_rexec): Ditto.
        (socketpair): Ditto.
        (fhandler_socket::fhandler_socket): Set `need_fork_fixup'. Allocate
        space for the WSAPROTOCOL_INFOA struct used in fixup.
        (fhandler_socket::~fhandler_socket): New destructor.
        (fhandler_socket::fixup_before_fork_exec): New method.
        (fhandler_socket::fixup_after_fork): Ditto.
        (fhandler_socket::dup): Ditto.
        (wsock_init): New static function.
        (LoadDLLinitfunc (wsock32)): Rearranged.
        (LoadDLLinitfunc (ws2_32)): New function.
        (dummy_autoload): Add autoload statemants for `WSADuplicateSocketA'
        and `WSASocketA'.
        * spawn.cc (spawn_guts): Care for file types which need a fixup
        before exec. Start child in suspended state then.
2000-10-26 10:13:41 +00:00
Christopher Faylor e21fa1ebb4 * signal.cc (kill_pgrp): Don't limit sending of signals to stopped processes
when sig < 0.
(kill_worker): Only send SIGCONT to stopped processes when sendSIGCONT.
2000-10-26 00:51:50 +00:00
Christopher Faylor cffaf20bf3 * exceptions.cc (sig_handle): Just make sure that wait_sig loops when receiving
a SIGCONT.  Don't block waiting for completion that will never occur.
2000-10-25 17:57:43 +00:00
Christopher Faylor 2e78b61dca * dtable.cc (dtable::fixup_after_exec): Use variable rather than constantly
indexing into fds array.
(dtable::fixup_after_fork): Ditto.
2000-10-25 14:17:27 +00:00
Corinna Vinschen 2f7356f39b * fhandler.cc (fhandler_base::fcntl): Treat O_NONBLOCK and OLD_O_NDELAY
as exactly the same. If one is set, both are set.
	* net.cc (fhandler_socket::fcntl): Ditto.
2000-10-25 08:47:23 +00:00
Christopher Faylor d220f0b21c * dcrt0.cc (do_exit): Remove debugging statement. 2000-10-25 03:59:07 +00:00
Christopher Faylor f8f9b12e6c * dcrt0.cc (do_exit): Don't bother looking for pgrp children to send SIGHUP if
process has never created any children.
* fork.cc (fork): Set flag indicating that there is another process with our
process group.
* spawn.cc (spawn_guts): Ditto.
* pinfo.h (set_has_pgid_children): New methods for setting when process has
children in its process group.
* syscalls.cc (setpgid): Clear has_gid_children if pgid changes.
2000-10-25 03:54:50 +00:00
Corinna Vinschen 8c8d0db462 * ntdll.h: New file.
* fhandler_mem.cc: Move ntdll.dll specific definitions and
        declarations to ntdll.h.
        * sysconf.cc (sysconf): Add support for _SC_NPROCESSORS_CONF,
        _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES and _SC_AVPHYS_PAGES.
2000-10-24 18:44:56 +00:00
Corinna Vinschen 90bb77ddcb * fhandler.cc (fhandler_base::fcntl): Behave properly when passed
previous version of O_NDELAY.
        * syscalls.cc: Move OLD_O_NDELAY to winsup.h.
        * winsup.h: Define OLD_O_NDELAY now.
2000-10-24 18:15:25 +00:00
Christopher Faylor 4c45a89744 * exceptions.cc (signal_exit): Kill any executing child process if we're dying.
* path.h: Remove unneeded extern.
* spawn.cc (std_suffixes): Make static.  Don't set dwProcessId here since it
makes the process unsignalable.  Set strace flag that this is an execed process
stub.
* strace.cc (strace::vsprntf): Use strace flag to indicate when to visually
flag that this is an exec stub.
* include/sys/strace.h (strace): Add 'execing' flag.
2000-10-24 02:25:27 +00:00
Christopher Faylor 06571ff689 * sigproc.cc (proc_subproc): Don't send a false positive if WNOHANG and no
processes are available for waiting.
2000-10-23 20:50:36 +00:00
Corinna Vinschen 38a1798645 * fhandler.cc (fhandler_base::fcntl): Setting flags in F_SETFL
branch according to Linux documentation.
2000-10-23 20:29:31 +00:00
Corinna Vinschen 1eb14bae8c * fcntl.cc (_fcntl): Rearrange as wrapper function. Move all
functionality except F_DUPFD to fhandler classes.
        * fhandler.cc (fhandler_base::fcntl): New method.
        * net.cc (fhandler_socket::fcntl): Ditto.
        * fhandler.h (class fhandler_base): Add method prototype for fcntl().
        (class fhandler_socket): Ditto.
2000-10-23 20:16:52 +00:00
Christopher Faylor f80cdaeecb * sigproc.cc (proc_subproc): Correctly handle flags for WNOHANG case. 2000-10-23 16:50:21 +00:00
Corinna Vinschen c434bd0840 * security.cc: Eliminate C++ comments throughout. 2000-10-23 08:02:38 +00:00
Christopher Faylor ad30b4ffca * 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.
2000-10-23 03:35:50 +00:00
Corinna Vinschen b150b20cfd * 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.
2000-10-22 10:13:30 +00:00
Christopher Faylor 5a84a8dc2e Fix typo. 2000-10-21 20:57:40 +00:00
Christopher Faylor 160c7abd0c * pinfo.cc (pinfo::init): Make PID_EXECED signal creation as well as
PID_IN_USE.
2000-10-21 19:28:49 +00:00
Christopher Faylor eca7c7291f * spawn.cc (spawn_guts): Don't do the reparenting step if we notice that the
child has exited prior to sending the subprocess_ready signal
(?).
2000-10-21 05:53:43 +00:00
Christopher Faylor b0de2aa284 * 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.
2000-10-21 04:53:49 +00:00