projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use M_IOBUF instead of M_TEMP for malloc'd buffers.
[unix-history]
/
sys
/
kern
/
kern_kinfo.c
diff --git
a/sys/kern/kern_kinfo.c
b/sys/kern/kern_kinfo.c
index
605787e
..
98c350c
100644
(file)
--- a/
sys/kern/kern_kinfo.c
+++ b/
sys/kern/kern_kinfo.c
@@
-31,10
+31,11
@@
* SUCH DAMAGE.
*
* from: @(#)kern_kinfo.c 7.17 (Berkeley) 6/26/91
* SUCH DAMAGE.
*
* from: @(#)kern_kinfo.c 7.17 (Berkeley) 6/26/91
- * $Id: kern_kinfo.c,v 1.
4 1993/11/07 21:44:42 wollman
Exp $
+ * $Id: kern_kinfo.c,v 1.
8 1993/12/09 09:11:00 davidg
Exp $
*/
#include "param.h"
*/
#include "param.h"
+#include "systm.h"
#include "proc.h"
#include "kinfo.h"
#include "ioctl.h"
#include "proc.h"
#include "kinfo.h"
#include "ioctl.h"
@@
-58,6
+59,7
@@
struct getkerninfo_args {
};
/* ARGSUSED */
};
/* ARGSUSED */
+int
getkerninfo(p, uap, retval)
struct proc *p;
register struct getkerninfo_args *uap;
getkerninfo(p, uap, retval)
struct proc *p;
register struct getkerninfo_args *uap;
@@
-67,11
+69,6
@@
getkerninfo(p, uap, retval)
int bufsize; /* max size of users buffer */
int needed, locked, (*server)(), error = 0;
int bufsize; /* max size of users buffer */
int needed, locked, (*server)(), error = 0;
- if(uap->size != (int *)NULL)
- if (error = copyin((caddr_t)uap->size, (caddr_t)&bufsize,
- sizeof (bufsize)))
- goto done;
-
switch (ki_type(uap->op)) {
case KINFO_PROC:
switch (ki_type(uap->op)) {
case KINFO_PROC:
@@
-98,9
+95,14
@@
getkerninfo(p, uap, retval)
error = (*server)(uap->op, NULL, NULL, uap->arg, &needed);
goto done;
}
error = (*server)(uap->op, NULL, NULL, uap->arg, &needed);
goto done;
}
+
+ if (error = copyin((caddr_t)uap->size, (caddr_t)&bufsize,
+ sizeof (bufsize)))
+ goto done;
+
while (kinfo_lock.kl_lock) {
kinfo_lock.kl_want++;
while (kinfo_lock.kl_lock) {
kinfo_lock.kl_want++;
- tsleep(&kinfo_lock, PRIBIO+1, "kinflck", 0);
+ tsleep(
(caddr_t)
&kinfo_lock, PRIBIO+1, "kinflck", 0);
kinfo_lock.kl_want--;
kinfo_lock.kl_locked++;
}
kinfo_lock.kl_want--;
kinfo_lock.kl_locked++;
}
@@
-120,7
+122,7
@@
getkerninfo(p, uap, retval)
release:
kinfo_lock.kl_lock--;
if (kinfo_lock.kl_want)
release:
kinfo_lock.kl_lock--;
if (kinfo_lock.kl_want)
- wakeup(&kinfo_lock);
+ wakeup(
(caddr_t)
&kinfo_lock);
done:
if (!error)
*retval = needed;
done:
if (!error)
*retval = needed;
@@
-132,14
+134,18
@@
done:
*/
#define KINFO_PROCSLOP (5 * sizeof (struct kinfo_proc))
*/
#define KINFO_PROCSLOP (5 * sizeof (struct kinfo_proc))
+int
kinfo_doproc(op, where, acopysize, arg, aneeded)
kinfo_doproc(op, where, acopysize, arg, aneeded)
+ int op;
char *where;
char *where;
- int *acopysize, *aneeded;
+ int *acopysize;
+ int arg;
+ int *aneeded;
{
register struct proc *p;
register struct kinfo_proc *dp = (struct kinfo_proc *)where;
{
register struct proc *p;
register struct kinfo_proc *dp = (struct kinfo_proc *)where;
- register needed = 0;
- int buflen;
+ register
int
needed = 0;
+ int buflen
= 0
;
int doingzomb;
struct eproc eproc;
int error = 0;
int doingzomb;
struct eproc eproc;
int error = 0;
@@
-244,8
+250,10
@@
fill_eproc(p, ep)
ep->e_flag = ep->e_sess->s_ttyvp ? EPROC_CTTY : 0;
if (SESS_LEADER(p))
ep->e_flag |= EPROC_SLEADER;
ep->e_flag = ep->e_sess->s_ttyvp ? EPROC_CTTY : 0;
if (SESS_LEADER(p))
ep->e_flag |= EPROC_SLEADER;
- if (p->p_wmesg)
+ if (p->p_wmesg)
{
strncpy(ep->e_wmesg, p->p_wmesg, WMESGLEN);
strncpy(ep->e_wmesg, p->p_wmesg, WMESGLEN);
+ ep->e_wmesg[WMESGLEN] = 0; /* prevents fault on long wmesg */
+ }
ep->e_xsize = ep->e_xrssize = 0;
ep->e_xccount = ep->e_xswrss = 0;
}
ep->e_xsize = ep->e_xrssize = 0;
ep->e_xccount = ep->e_xswrss = 0;
}
@@
-253,9
+261,13
@@
fill_eproc(p, ep)
/*
* Get file structures.
*/
/*
* Get file structures.
*/
+int
kinfo_file(op, where, acopysize, arg, aneeded)
kinfo_file(op, where, acopysize, arg, aneeded)
+ int op;
register char *where;
register char *where;
- int *acopysize, *aneeded;
+ int *acopysize;
+ int arg;
+ int *aneeded;
{
int buflen, needed, error;
struct file *fp;
{
int buflen, needed, error;
struct file *fp;