diff options
author | Christopher Faylor <me@cgf.cx> | 2000-07-29 16:24:59 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-07-29 16:24:59 +0000 |
commit | 84c7d4093270dc07de4531ab6648a12daaff77c3 (patch) | |
tree | 067ed4cf0bffd057a63b2f472bcab39854f86c17 /winsup/cygwin/syscalls.cc | |
parent | 53211514a0466b7e29f6f53c11b769befddfdfa6 (diff) | |
download | cygnal-84c7d4093270dc07de4531ab6648a12daaff77c3.tar.gz cygnal-84c7d4093270dc07de4531ab6648a12daaff77c3.tar.bz2 cygnal-84c7d4093270dc07de4531ab6648a12daaff77c3.zip |
* include/cygwin/version.h: Bump DLL minor version number to 5 due to all of
the changes below. Redefine process structure to avoid a fixed size table.
Redefine pinfo/_pinfo classes. Use these throughout.
* dcrt0.cc (dll_crt0_1): Accomodate set_myself argument change.
(__api_fatal): Accomodate _pinfo::record_death argument change.
* exceptions.cc (really_exit): Ditto.
(sig_handle_tty_stop): Use pinfo constructor to access process info.
(events_init): Don't create pinfo_mutex since it is no longer required.
* external.cc (fillout_pinfo): Use winpids class to iterate over all system
pids.
(cygwin_internal): lock_pinfo_for_update and unlock_pinfo are now noops.
* fhandler_termios.cc (fhandler_termios::set_ctty): Use pinfo constructor to
access process info.
* fork.cc (fork): Reorganize to initialize child info after the child has
started since that is when we know the child's winpid, which is necessary to
allocate the pinfo shared memory.
* mmap.cc (recreate_mmaps_after_fork): Change arg type to _pinfo.
* pinfo.cc: Rename pinfo methods to _pinfo throughout. Eliminate pinfo_list
stuff.
(set_myself): Accept a pid argument now. Call pinfo initializer to initialize
myself. Detect when this is an "execed" process and create an "indirect" pid
block.
(pinfo_init): Accomodate set_myself arg change.
(procinfo): Remove.
(pinfo::lock_pinfo): Remove.
(pinfo::unlock_pinfo): Remove.
(pinfo::init): New method. Allocates shared memory space for process pinfo
structure.
(pinfo::record_death): Don't call locking functions.
(cygwin_winpid_to_pid): Simplify by using new pinfo constructor.
(EnumProcessesW95): New function for iterating over processes on Windows 95.
(winpids::winpids): New constructor for winpids class. Sets up a list of
process ids.
(enum_init): Initialize w95/wnt pid enumerators.
* shared.cc (shared-info::initialize): Remove pid initialization.
* shared.h: Move pinfo stuff into pinfo.h.
(class shared_info): Remove pinfo_list element.
* signal.cc (kill_worker): Use pinfo constructor to access process info.
(kill_pgrp): Ditto. Use winpids methods to access list of processes.
* sigproc.cc: Throughout, modify to use _pinfo where appropriate.
(proc_exists (pid_t)): New function. Determines if a process exists based on
the pid.
(proc_exists (_pinfo *p): Use new proc_exists function above.
(proc_subproc): Copy pinfo stuff around rather than _pinfo pointers. Try to be
careful about releasing shared memory when we don't need it anymore. Remove
pinfo locks.
(remove_zombies): Remove pinfo memory when zombie is going away.
* sigproc.h: Reflect _pinfo/pinfo changes in sigproc.cc.
* spawn.cc (spawn_guts): Eliminate pinfo *child argument. Reorganize to only
initialize child pinfo after process has been started and we know the windows
pid.
(_spawnve): Reflect spawn_guts changes.
* syscalls.cc (setpgid): Use pinfo constructor to access process info.
(getpgid): Ditto.
(internal_getlogin): Use _pinfo.
* winsup.h: Eliminate pinfo_mutex. Eliminate spawn_guts declaration since it
is static now. Reflect set_myself argument change.
* include/sys/cygwin.h: Add some PID_* enums to accomodate new pinfo stuff.
* include/cygwin/version.h: Update minor version for cygdrive changes below.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 6123a47a0..154c05a1f 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -21,9 +21,9 @@ details. */ #include <errno.h> #include <limits.h> #include "winsup.h" +#include <unistd.h> #include <winnls.h> #include <lmcons.h> /* for UNLEN */ -#include <unistd.h> extern BOOL allow_ntsec; @@ -1413,8 +1413,7 @@ pathconf (const char *file, int v) } } -extern "C" -char * +extern "C" char * ctermid (char *str) { static NO_COPY char buf[16]; @@ -1714,23 +1713,25 @@ setpgid (pid_t pid, pid_t pgid) set_errno (EINVAL); goto out; } - pinfo *p; - p = procinfo (pid); - if (p == NULL) - { - set_errno (ESRCH); - goto out; - } - /* A process may only change the process group of itself and its children */ - if (p == myself || p->ppid == myself->pid) - { - p->pgid = pgid; - res = 0; - } else { - set_errno (EPERM); - goto out; + pinfo p (pid); + if (!p) + { + set_errno (ESRCH); + goto out; + } + /* A process may only change the process group of itself and its children */ + if (p == myself || p->ppid == myself->pid) + { + p->pgid = pgid; + res = 0; + } + else + { + set_errno (EPERM); + goto out; + } } out: syscall_printf ("pid %d, pgid %d, res %d", pid, pgid, res); @@ -1744,7 +1745,7 @@ getpgid (pid_t pid) if (pid == 0) pid = getpid (); - pinfo *p = procinfo (pid); + pinfo p (pid); if (p == 0) { set_errno (ESRCH); @@ -1824,7 +1825,7 @@ setuid (uid_t uid) return ret; } -extern char *internal_getlogin (struct pinfo *pi); +extern char *internal_getlogin (_pinfo *pi); /* seteuid: standards? */ extern "C" @@ -1863,7 +1864,7 @@ seteuid (uid_t uid) myself->impersonated = TRUE; } - struct pinfo pi; + struct _pinfo pi; pi.psid = (PSID) pi.sidbuf; /* pi.token is used in internal_getlogin() to determine if impersonation is active. If so, the token is used for |