summaryrefslogtreecommitdiffstats
path: root/lib/libprocstat/libprocstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libprocstat/libprocstat.c')
-rw-r--r--lib/libprocstat/libprocstat.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/lib/libprocstat/libprocstat.c b/lib/libprocstat/libprocstat.c
index 384fe73..22ca668 100644
--- a/lib/libprocstat/libprocstat.c
+++ b/lib/libprocstat/libprocstat.c
@@ -191,7 +191,7 @@ procstat_getprocs(struct procstat *procstat, int what, int arg,
len = *count * sizeof(*p);
p = malloc(len);
if (p == NULL) {
- warnx("malloc(%zd)", len);
+ warnx("malloc(%zu)", len);
goto fail;
}
bcopy(p0, p, len);
@@ -213,7 +213,7 @@ procstat_getprocs(struct procstat *procstat, int what, int arg,
}
p = malloc(len);
if (p == NULL) {
- warnx("malloc(%zd)", len);
+ warnx("malloc(%zu)", len);
goto fail;
}
error = sysctl(name, 4, p, &len, NULL, 0);
@@ -229,7 +229,7 @@ procstat_getprocs(struct procstat *procstat, int what, int arg,
*count = len / sizeof(*p);
return (p);
} else {
- warnx("unknown access method");
+ warnx("unknown access method: %d", procstat->type);
return (NULL);
}
fail:
@@ -271,11 +271,11 @@ procstat_freefiles(struct procstat *procstat, struct filestat_list *head)
}
free(head);
if (procstat->vmentries != NULL) {
- free (procstat->vmentries);
+ free(procstat->vmentries);
procstat->vmentries = NULL;
}
if (procstat->files != NULL) {
- free (procstat->files);
+ free(procstat->files);
procstat->files = NULL;
}
}
@@ -426,7 +426,7 @@ procstat_getfiles_kvm(struct procstat *procstat, struct kinfo_proc *kp, int mmap
nfiles = filed.fd_lastfile + 1;
ofiles = malloc(nfiles * sizeof(struct file *));
if (ofiles == NULL) {
- warn("malloc(%zd)", nfiles * sizeof(struct file *));
+ warn("malloc(%zu)", nfiles * sizeof(struct file *));
goto do_mmapped;
}
if (!kvm_read_all(kd, (unsigned long)filed.fd_ofiles, ofiles,
@@ -522,7 +522,8 @@ do_mmapped:
fflags = 0;
if (prot & VM_PROT_READ)
fflags = PS_FST_FFLAG_READ;
- if (prot & VM_PROT_WRITE)
+ if ((vmentry.eflags & MAP_ENTRY_COW) == 0 &&
+ prot & VM_PROT_WRITE)
fflags |= PS_FST_FFLAG_WRITE;
/*
@@ -696,7 +697,8 @@ procstat_getfiles_sysctl(struct procstat *procstat, struct kinfo_proc *kp, int m
fflags = 0;
if (kve->kve_protection & KVME_PROT_READ)
fflags = PS_FST_FFLAG_READ;
- if (kve->kve_protection & KVME_PROT_WRITE)
+ if ((kve->kve_flags & KVME_FLAG_COW) == 0 &&
+ kve->kve_protection & KVME_PROT_WRITE)
fflags |= PS_FST_FFLAG_WRITE;
offset = kve->kve_offset;
refcount = kve->kve_ref_count;
@@ -726,7 +728,7 @@ procstat_get_pipe_info(struct procstat *procstat, struct filestat *fst,
} else if (procstat->type == PROCSTAT_SYSCTL) {
return (procstat_get_pipe_info_sysctl(fst, ps, errbuf));
} else {
- warnx("unknow access method: %d", procstat->type);
+ warnx("unknown access method: %d", procstat->type);
snprintf(errbuf, _POSIX2_LINE_MAX, "error");
return (1);
}
@@ -790,7 +792,7 @@ procstat_get_pts_info(struct procstat *procstat, struct filestat *fst,
} else if (procstat->type == PROCSTAT_SYSCTL) {
return (procstat_get_pts_info_sysctl(fst, pts, errbuf));
} else {
- warnx("unknow access method: %d", procstat->type);
+ warnx("unknown access method: %d", procstat->type);
snprintf(errbuf, _POSIX2_LINE_MAX, "error");
return (1);
}
@@ -852,7 +854,7 @@ procstat_get_vnode_info(struct procstat *procstat, struct filestat *fst,
} else if (procstat->type == PROCSTAT_SYSCTL) {
return (procstat_get_vnode_info_sysctl(fst, vn, errbuf));
} else {
- warnx("unknow access method: %d", procstat->type);
+ warnx("unknown access method: %d", procstat->type);
snprintf(errbuf, _POSIX2_LINE_MAX, "error");
return (1);
}
@@ -1059,7 +1061,7 @@ procstat_get_socket_info(struct procstat *procstat, struct filestat *fst,
} else if (procstat->type == PROCSTAT_SYSCTL) {
return (procstat_get_socket_info_sysctl(fst, sock, errbuf));
} else {
- warnx("unknow access method: %d", procstat->type);
+ warnx("unknown access method: %d", procstat->type);
snprintf(errbuf, _POSIX2_LINE_MAX, "error");
return (1);
}
@@ -1283,7 +1285,7 @@ vntype2psfsttype(int type)
static char *
getmnton(kvm_t *kd, struct mount *m)
{
- static struct mount mnt;
+ struct mount mnt;
static struct mtab {
struct mtab *next;
struct mount *m;
@@ -1302,7 +1304,7 @@ getmnton(kvm_t *kd, struct mount *m)
err(1, NULL);
mt->m = m;
bcopy(&mnt.mnt_stat.f_mntonname[0], &mt->mntonname[0], MNAMELEN);
- mnt.mnt_stat.f_mntonname[MNAMELEN] = '\0';
+ mt->mntonname[MNAMELEN] = '\0';
mt->next = mhead;
mhead = mt;
return (mt->mntonname);
OpenPOWER on IntegriCloud