Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--winsup/cygwin/ChangeLog19
-rw-r--r--winsup/cygwin/dir.cc1
-rw-r--r--winsup/cygwin/dll_init.cc4
-rw-r--r--winsup/cygwin/dtable.cc1
-rw-r--r--winsup/cygwin/environ.cc1
-rw-r--r--winsup/cygwin/exec.cc1
-rw-r--r--winsup/cygwin/fhandler.cc1
-rw-r--r--winsup/cygwin/fhandler.h6
-rw-r--r--winsup/cygwin/fhandler_disk_file.cc1
-rw-r--r--winsup/cygwin/fhandler_proc.cc63
-rw-r--r--winsup/cygwin/fhandler_process.cc67
-rw-r--r--winsup/cygwin/grp.cc1
-rw-r--r--winsup/cygwin/mmap.cc1
-rw-r--r--winsup/cygwin/passwd.cc1
-rw-r--r--winsup/cygwin/pinfo.h7
-rw-r--r--winsup/cygwin/pipe.cc1
-rw-r--r--winsup/cygwin/resource.cc1
-rw-r--r--winsup/cygwin/sched.cc1
-rw-r--r--winsup/cygwin/sec_acl.cc1
-rw-r--r--winsup/cygwin/sec_helper.cc1
-rw-r--r--winsup/cygwin/security.cc1
-rw-r--r--winsup/cygwin/shared.cc1
-rw-r--r--winsup/cygwin/sigproc.h3
-rw-r--r--winsup/cygwin/strace.cc1
-rw-r--r--winsup/cygwin/thread.cc1
-rw-r--r--winsup/cygwin/times.cc1
-rw-r--r--winsup/cygwin/tty.cc1
-rw-r--r--winsup/cygwin/uinfo.cc1
28 files changed, 83 insertions, 107 deletions
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 <cgf@redhat.com>
+
+ 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 <cgf@redhat.com>
+
+ * dll_init.cc (dll_list::detach): Don't run destructor on exit.
+
2002-06-01 Christopher Faylor <cgf@redhat.com>
* 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 <dirent.h>
-#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 <winsock.h>
-#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 <fcntl.h>
#include <sys/cygwin.h>
#include <cygwin/version.h>
-#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 <assert.h>
#include <limits.h>
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 <assert.h>
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 (!proc_exists (p))
- continue;
-
- if (p->pid == pid)
- return FH_PROCESS;
- }
+ if (pinfo (atoi (path)))
+ return FH_PROCESS;
- bool has_subdir = false;
- while (*path)
- if (SLASH_P (*path++))
- {
- has_subdir = true;
- break;
- }
+ 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++)
- {
- p = pids[i];
-
- if (!proc_exists (p))
- continue;
- if (p->pid == pid)
- goto found;
+ {
+ pinfo p (pid);
+ if (!p)
+ {
+ 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, "<defunct>");
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 <stdio.h>
#include <stdlib.h>
#include <errno.h>
-#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 <sys/termios.h>
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 <unistd.h>
#include <limits.h>
#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 <stdlib.h>
#include <syslog.h>
#include <sched.h>
-#include "sigproc.h"
#include "pinfo.h"
/* for getpid */
#include <unistd.h>
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 <ntdef.h>
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 <grp.h>
#include <pwd.h>
#include <errno.h>
-#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 <signal.h>
#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 <wingdi.h>
#include <winuser.h>
#include <ctype.h>
-#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 <assert.h>
#include <stdlib.h>
#include <syslog.h>
-#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 <lm.h>
#include <errno.h>
#include <sys/cygwin.h>
-#include "sigproc.h"
#include "pinfo.h"
#include "security.h"
#include "fhandler.h"