diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 6aabfab9e..cb7448b4c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,12 @@ +2002-06-30 Christopher Faylor + + * fhandler.h (fhandler_process::p): New field. + (fhandler_process:fill_filebuf): Revert to same definition as virtual + in parent class. + (fhandler_process::open): Fill out p field rather than passing as an + argument. + (fhandler_process::fill_filebuf): Use p pointer rather than argument. + 2002-06-29 Pierre Humblet * security.cc (extract_nt_dom_user): Check for all buffer overflows. diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index e0521d4ef..d04966a36 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1128,13 +1128,14 @@ class fhandler_registry: public fhandler_proc struct _pinfo; class fhandler_process: public fhandler_proc { + pinfo *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 (pinfo& p); + void fill_filebuf (); }; typedef union diff --git a/winsup/cygwin/fhandler_process.cc b/winsup/cygwin/fhandler_process.cc index 86393db05..f2b896314 100644 --- a/winsup/cygwin/fhandler_process.cc +++ b/winsup/cygwin/fhandler_process.cc @@ -227,12 +227,14 @@ fhandler_process::open (path_conv *pc, int flags, mode_t mode) } fileid = process_file_no; - fill_filebuf (p); + this->p = &p; + fill_filebuf (); if (flags & O_APPEND) position = filesize; else position = 0; + this->p = NULL; } success: @@ -245,7 +247,7 @@ out: } void -fhandler_process::fill_filebuf (pinfo& p) +fhandler_process::fill_filebuf () { switch (fileid) { @@ -262,22 +264,22 @@ fhandler_process::fill_filebuf (pinfo& p) switch (fileid) { case PROCESS_PPID: - num = p->ppid; + num = (*p)->ppid; break; case PROCESS_UID: - num = p->uid; + num = (*p)->uid; break; case PROCESS_PGID: - num = p->pgid; + num = (*p)->pgid; break; case PROCESS_SID: - num = p->sid; + num = (*p)->sid; break; case PROCESS_GID: - num = p->gid; + num = (*p)->gid; break; case PROCESS_CTTY: - num = p->ctty; + num = (*p)->ctty; break; default: // what's this here for? num = 0; @@ -291,11 +293,11 @@ fhandler_process::fill_filebuf (pinfo& p) { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = MAX_PATH); - if (p->process_state & (PID_ZOMBIE | PID_EXITED)) + if ((*p)->process_state & (PID_ZOMBIE | PID_EXITED)) strcpy (filebuf, ""); else { - mount_table->conv_to_posix_path (p->progname, filebuf, 1); + mount_table->conv_to_posix_path ((*p)->progname, filebuf, 1); int len = strlen (filebuf); if (len > 4) { @@ -311,16 +313,16 @@ fhandler_process::fill_filebuf (pinfo& p) { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 40); - __small_sprintf (filebuf, "%d\n", p->dwProcessId); + __small_sprintf (filebuf, "%d\n", (*p)->dwProcessId); filesize = strlen (filebuf); break; } case PROCESS_WINEXENAME: { - int len = strlen (p->progname); + int len = strlen ((*p)->progname); if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = (len + 2)); - strcpy (filebuf, p->progname); + strcpy (filebuf, (*p)->progname); filebuf[len] = '\n'; filesize = len + 1; break; @@ -329,21 +331,21 @@ fhandler_process::fill_filebuf (pinfo& p) { if (!filebuf) filebuf = (char *) cmalloc (HEAP_BUF, bufalloc = 2048); - filesize = format_process_status (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 (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 (p, filebuf, bufalloc); + filesize = format_process_statm ((*p), filebuf, bufalloc); break; } }