diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index e5ed794c8..90c97d0c6 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,22 @@ +2002-06-02 Christopher Faylor + + Remove unneeded sigproc.h includes throughout. + * fhandler.h (fhandler_proc::fill_filebuf): Take a pinfo argument. + * fhandler_proc.cc (fhandler_proc::get_proc_fhandler): Simplify search + for given pid. + (fhandler_proc::readdir): Assume that pid exists if it shows up in the + winpid list. + * fhandler_process.cc (fhandler_process::open): Simplify search for + given pid. Call fill_filebuf with pinfo argument. + (fhandler_process::fill_filebuf): Pass pinfo here and assume that it + exists. + * pinfo.h (pinfo::remember): Define differently if sigproc.h is not + included. + +2002-06-02 Christopher Faylor + + * dll_init.cc (dll_list::detach): Don't run destructor on exit. + 2002-06-01 Christopher Faylor * fhandler.cc (fhandler_base::fstat): Move dev and ino calculation into diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc index 94e2802cb..7de99329f 100644 --- a/winsup/cygwin/dir.cc +++ b/winsup/cygwin/dir.cc @@ -18,7 +18,6 @@ details. */ #define _COMPILING_NEWLIB #include -#include "sigproc.h" #include "pinfo.h" #include "cygerrno.h" #include "security.h" diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc index c3059ac40..8d5f34ca7 100644 --- a/winsup/cygwin/dll_init.cc +++ b/winsup/cygwin/dll_init.cc @@ -18,6 +18,7 @@ details. */ #include "path.h" #include "dtable.h" #include "cygheap.h" +#include "pinfo.h" extern void __stdcall check_sanity_and_sync (per_process *); @@ -183,6 +184,9 @@ dll_list::alloc (HINSTANCE h, per_process *p, dll_type type) void dll_list::detach (dll *d) { + if (!myself || myself->process_state == PID_EXITED) + return; + if (d->count <= 0) system_printf ("WARNING: try to detach an already detached dll ...\n"); else if (--d->count == 0) diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index e52e6dd00..51457fd0c 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -24,7 +24,6 @@ details. */ #define USE_SYS_TYPES_FD_SET #include -#include "sigproc.h" #include "pinfo.h" #include "cygerrno.h" #include "perprocess.h" diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index 93c87fb93..f07dd4a42 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -15,7 +15,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "perprocess.h" #include "security.h" diff --git a/winsup/cygwin/exec.cc b/winsup/cygwin/exec.cc index f3fab2ac7..1a3aebf7e 100644 --- a/winsup/cygwin/exec.cc +++ b/winsup/cygwin/exec.cc @@ -17,7 +17,6 @@ details. */ #include "security.h" #include "fhandler.h" #include "path.h" -#include "sigproc.h" #include "pinfo.h" #include "environ.h" diff --git a/winsup/cygwin/fhandler.cc b/winsup/cygwin/fhandler.cc index 2e2d0d076..71860d2a3 100644 --- a/winsup/cygwin/fhandler.cc +++ b/winsup/cygwin/fhandler.cc @@ -24,7 +24,6 @@ details. */ #include "dtable.h" #include "cygheap.h" #include "shared_info.h" -#include "sigproc.h" #include "pinfo.h" #include #include diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 31b540619..c5e17b101 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1091,6 +1091,7 @@ class fhandler_proc: public fhandler_virtual void fill_filebuf (); }; +class pinfo; class fhandler_registry: public fhandler_proc { public: @@ -1111,16 +1112,13 @@ class fhandler_registry: public fhandler_proc struct _pinfo; class fhandler_process: public fhandler_proc { - private: - pid_t saved_pid; - _pinfo *saved_p; public: fhandler_process (); int exists(); struct dirent *readdir (DIR *); int open (path_conv *real_path, int flags, mode_t mode = 0); int __stdcall fstat (struct __stat64 *buf, path_conv *) __attribute__ ((regparm (3))); - void fill_filebuf (); + void fill_filebuf (pinfo& p); }; typedef union diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 54c08ec4e..463ae4af3 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -24,7 +24,6 @@ details. */ #include "dtable.h" #include "cygheap.h" #include "shared_info.h" -#include "sigproc.h" #include "pinfo.h" #include diff --git a/winsup/cygwin/fhandler_proc.cc b/winsup/cygwin/fhandler_proc.cc index aa2324ef5..5d0a5a591 100644 --- a/winsup/cygwin/fhandler_proc.cc +++ b/winsup/cygwin/fhandler_proc.cc @@ -19,7 +19,6 @@ details. */ #include "security.h" #include "fhandler.h" #include "path.h" -#include "sigproc.h" #include "pinfo.h" #include "dtable.h" #include "cygheap.h" @@ -101,34 +100,24 @@ fhandler_proc::get_proc_fhandler (const char *path) return proc_fhandlers[i]; } - int pid = atoi (path); - winpids pids; - for (unsigned i = 0; i < pids.npids; i++) - { - _pinfo *p = pids[i]; + if (pinfo (atoi (path))) + return FH_PROCESS; - if (!proc_exists (p)) - continue; + bool has_subdir = false; + while (*path) + if (SLASH_P (*path++)) + { + has_subdir = true; + break; + } - if (p->pid == pid) - return FH_PROCESS; - } - - bool has_subdir = false; - while (*path) - if (SLASH_P (*path++)) - { - has_subdir = true; - break; - } - - if (has_subdir) - /* The user is trying to access a non-existent subdirectory of /proc. */ - return FH_BAD; - else - /* Return FH_PROC so that we can return EROFS if the user is trying to create - a file. */ - return FH_PROC; + if (has_subdir) + /* The user is trying to access a non-existent subdirectory of /proc. */ + return FH_BAD; + else + /* Return FH_PROC so that we can return EROFS if the user is trying to create + a file. */ + return FH_PROC; } /* Returns 0 if path doesn't exist, >0 if path is a directory, @@ -203,20 +192,12 @@ fhandler_proc::readdir (DIR * dir) winpids pids; int found = 0; for (unsigned i = 0; i < pids.npids; i++) - { - _pinfo *p = pids[i]; - - if (!proc_exists (p)) - continue; - - if (found == dir->__d_position - PROC_LINK_COUNT) - { - __small_sprintf (dir->__d_dirent->d_name, "%d", p->pid); - dir->__d_position++; - return dir->__d_dirent; - } - found++; - } + if (found++ == dir->__d_position - PROC_LINK_COUNT) + { + __small_sprintf (dir->__d_dirent->d_name, "%d", pids[i]->pid); + dir->__d_position++; + return dir->__d_dirent; + } set_errno (ENMFILE); return NULL; } diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 35f1c7bb4..aaeead63a 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -18,7 +18,6 @@ details. */ #include "cygerrno.h" #include "security.h" #include "fhandler.h" -#include "sigproc.h" #include "pinfo.h" #include "path.h" #include "shared_info.h" @@ -157,7 +156,6 @@ fhandler_process::open (path_conv *pc, int flags, mode_t mode) { int process_file_no = -1, pid; winpids pids; - _pinfo *p; int res = fhandler_virtual::open (pc, flags, mode); if (!res) @@ -218,29 +216,23 @@ fhandler_process::open (path_conv *pc, int flags, mode_t mode) res = 0; goto out; } - for (unsigned i = 0; i < pids.npids; i++) + + { + pinfo p (pid); + if (!p) { - p = pids[i]; - - if (!proc_exists (p)) - continue; - - if (p->pid == pid) - goto found; + set_errno (ENOENT); + res = 0; + goto out; } - set_errno (ENOENT); - res = 0; - goto out; -found: - fileid = process_file_no; - saved_pid = pid; - saved_p = p; - fill_filebuf (); + + fill_filebuf (p); if (flags & O_APPEND) position = filesize; else position = 0; + } success: res = 1; @@ -252,15 +244,8 @@ out: } void -fhandler_process::fill_filebuf () +fhandler_process::fill_filebuf (pinfo& p) { - // has this process gone away? - if (!proc_exists (saved_p) || saved_p->pid != saved_pid) - { - if (filebuf) - cfree(filebuf); - filesize = 0; bufalloc = (size_t) -1; - } switch (fileid) { case PROCESS_UID: @@ -276,22 +261,22 @@ fhandler_process::fill_filebuf () switch (fileid) { case PROCESS_PPID: - num = saved_p->ppid; + num = p->ppid; break; case PROCESS_UID: - num = saved_p->uid; + num = p->uid; break; case PROCESS_PGID: - num = saved_p->pgid; + num = p->pgid; break; case PROCESS_SID: - num = saved_p->sid; + num = p->sid; break; case PROCESS_GID: - num = saved_p->gid; + num = p->gid; break; case PROCESS_CTTY: - num = saved_p->ctty; + num = p->ctty; break; default: // what's this here for? num = 0; @@ -305,11 +290,11 @@ fhandler_process::fill_filebuf () { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = MAX_PATH); - if (saved_p->process_state & (PID_ZOMBIE | PID_EXITED)) + if (p->process_state & (PID_ZOMBIE | PID_EXITED)) strcpy (filebuf, ""); else { - mount_table->conv_to_posix_path (saved_p->progname, filebuf, 1); + mount_table->conv_to_posix_path (p->progname, filebuf, 1); int len = strlen (filebuf); if (len > 4) { @@ -325,16 +310,16 @@ fhandler_process::fill_filebuf () { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 40); - __small_sprintf (filebuf, "%d\n", saved_p->dwProcessId); + __small_sprintf (filebuf, "%d\n", p->dwProcessId); filesize = strlen (filebuf); break; } case PROCESS_WINEXENAME: { - int len = strlen (saved_p->progname); + int len = strlen (p->progname); if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = (len + 2)); - strcpy (filebuf, saved_p->progname); + strcpy (filebuf, p->progname); filebuf[len] = '\n'; filesize = len + 1; break; @@ -343,23 +328,23 @@ fhandler_process::fill_filebuf () { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 2048); - filesize = format_process_status (saved_p, filebuf, bufalloc); + filesize = format_process_status (p, filebuf, bufalloc); break; } case PROCESS_STAT: { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 2048); - filesize = format_process_stat (saved_p, filebuf, bufalloc); + filesize = format_process_stat (p, filebuf, bufalloc); break; } case PROCESS_STATM: { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 2048); - filesize = format_process_statm (saved_p, filebuf, bufalloc); + filesize = format_process_statm (p, filebuf, bufalloc); break; - } + } } } diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index 3ec8cd988..3511bcb92 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -17,7 +17,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "security.h" #include "fhandler.h" diff --git a/winsup/cygwin/mmap.cc b/winsup/cygwin/mmap.cc index 2446eb52b..c89cf4c7b 100644 --- a/winsup/cygwin/mmap.cc +++ b/winsup/cygwin/mmap.cc @@ -20,7 +20,6 @@ details. */ #include "dtable.h" #include "cygerrno.h" #include "cygheap.h" -#include "sigproc.h" #include "pinfo.h" #include "sys/cygwin.h" diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc index c526dd293..efc73f52e 100644 --- a/winsup/cygwin/passwd.cc +++ b/winsup/cygwin/passwd.cc @@ -18,7 +18,6 @@ details. */ #include "fhandler.h" #include "path.h" #include "dtable.h" -#include "sigproc.h" #include "pinfo.h" #include "cygheap.h" #include diff --git a/winsup/cygwin/pinfo.h b/winsup/cygwin/pinfo.h index a54c9b677..f68c155e5 100644 --- a/winsup/cygwin/pinfo.h +++ b/winsup/cygwin/pinfo.h @@ -8,6 +8,8 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ +#ifndef _PINFO_H +#define _PINFO_H /* Signal constants (have to define them here, unfortunately) */ enum @@ -152,7 +154,11 @@ public: _pinfo *operator * () const {return procinfo;} operator _pinfo * () const {return procinfo;} // operator bool () const {return (int) h;} +#ifdef _SIGPROC_H int remember () {destroy = 0; return proc_subproc (PROC_ADDCHILD, (DWORD) this);} +#else + int remember () {system_printf ("remember is not here"); return 0;} +#endif HANDLE shared_handle () {return h;} }; @@ -206,3 +212,4 @@ int __stdcall fixup_shms_after_fork (); void __stdcall fill_rusage (struct rusage *, HANDLE); void __stdcall add_rusage (struct rusage *, struct rusage *); +#endif /*_PINFO_H*/ diff --git a/winsup/cygwin/pipe.cc b/winsup/cygwin/pipe.cc index b87080792..5056219ac 100644 --- a/winsup/cygwin/pipe.cc +++ b/winsup/cygwin/pipe.cc @@ -19,7 +19,6 @@ details. */ #include "dtable.h" #include "cygheap.h" #include "thread.h" -#include "sigproc.h" #include "pinfo.h" static unsigned pipecount; diff --git a/winsup/cygwin/resource.cc b/winsup/cygwin/resource.cc index ca6cefc01..bc87127f8 100644 --- a/winsup/cygwin/resource.cc +++ b/winsup/cygwin/resource.cc @@ -17,7 +17,6 @@ details. */ #include #include #include "cygerrno.h" -#include "sigproc.h" #include "pinfo.h" #include "psapi.h" diff --git a/winsup/cygwin/sched.cc b/winsup/cygwin/sched.cc index 522fb0c02..7b4074d7f 100644 --- a/winsup/cygwin/sched.cc +++ b/winsup/cygwin/sched.cc @@ -22,7 +22,6 @@ #include #include #include -#include "sigproc.h" #include "pinfo.h" /* for getpid */ #include diff --git a/winsup/cygwin/sec_acl.cc b/winsup/cygwin/sec_acl.cc index 71a0147e8..e93073794 100644 --- a/winsup/cygwin/sec_acl.cc +++ b/winsup/cygwin/sec_acl.cc @@ -28,7 +28,6 @@ details. */ #include "fhandler.h" #include "path.h" #include "dtable.h" -#include "sigproc.h" #include "pinfo.h" #include "cygheap.h" diff --git a/winsup/cygwin/sec_helper.cc b/winsup/cygwin/sec_helper.cc index 603796a9f..7833d5a42 100644 --- a/winsup/cygwin/sec_helper.cc +++ b/winsup/cygwin/sec_helper.cc @@ -29,7 +29,6 @@ details. */ #include "fhandler.h" #include "path.h" #include "dtable.h" -#include "sigproc.h" #include "pinfo.h" #include "cygheap.h" diff --git a/winsup/cygwin/security.cc b/winsup/cygwin/security.cc index 819a33bc1..d906197ed 100644 --- a/winsup/cygwin/security.cc +++ b/winsup/cygwin/security.cc @@ -33,7 +33,6 @@ details. */ #include "fhandler.h" #include "path.h" #include "dtable.h" -#include "sigproc.h" #include "pinfo.h" #include "cygheap.h" #include diff --git a/winsup/cygwin/shared.cc b/winsup/cygwin/shared.cc index b3872a5a3..2e383ec40 100644 --- a/winsup/cygwin/shared.cc +++ b/winsup/cygwin/shared.cc @@ -15,7 +15,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "security.h" #include "fhandler.h" diff --git a/winsup/cygwin/sigproc.h b/winsup/cygwin/sigproc.h index b4cc45eb6..0960efae2 100644 --- a/winsup/cygwin/sigproc.h +++ b/winsup/cygwin/sigproc.h @@ -8,6 +8,8 @@ This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ +#ifndef _SIGPROC_H +#define _SIGPROC_H #include #define EXIT_SIGNAL 0x010000 @@ -124,3 +126,4 @@ extern char myself_nowait_nonmain_dummy[]; #define myself_nowait ((_pinfo *)myself_nowait_dummy) #define myself_nowait_nonmain ((_pinfo *)myself_nowait_nonmain_dummy) +#endif /*_SIGPROC_H*/ diff --git a/winsup/cygwin/strace.cc b/winsup/cygwin/strace.cc index 7c93865f1..a38e2dc0d 100644 --- a/winsup/cygwin/strace.cc +++ b/winsup/cygwin/strace.cc @@ -14,7 +14,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "perprocess.h" #include "cygwin_version.h" diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index 0f09e3718..42bffe65e 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -37,7 +37,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "perprocess.h" #include "security.h" diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc index 842d383b2..6769b4e74 100644 --- a/winsup/cygwin/times.cc +++ b/winsup/cygwin/times.cc @@ -20,7 +20,6 @@ details. */ #include "security.h" #include "fhandler.h" #include "path.h" -#include "sigproc.h" #include "pinfo.h" #include "hires.h" diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc index e9e13c363..f5143b282 100644 --- a/winsup/cygwin/tty.cc +++ b/winsup/cygwin/tty.cc @@ -21,7 +21,6 @@ details. */ #include "path.h" #include "dtable.h" #include "cygheap.h" -#include "sigproc.h" #include "pinfo.h" #include "cygwin/cygserver_transport.h" #include "cygwin/cygserver.h" diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index 5f6a5d25d..0a6fa515b 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -19,7 +19,6 @@ details. */ #include #include #include -#include "sigproc.h" #include "pinfo.h" #include "security.h" #include "fhandler.h"