Module Name: src Committed By: christos Date: Sat Sep 3 13:24:19 UTC 2011
Modified Files: src/usr.bin/fstat: fstat.c Log Message: - minor KNF - for system processes (0, 1) where fd_lastfile == -1, fail early. - instead of printing the pcb connection address, print the pathname if possible for unix domain sockets. To generate a diff of this commit: cvs rdiff -u -r1.90 -r1.91 src/usr.bin/fstat/fstat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/fstat/fstat.c diff -u src/usr.bin/fstat/fstat.c:1.90 src/usr.bin/fstat/fstat.c:1.91 --- src/usr.bin/fstat/fstat.c:1.90 Wed Apr 13 20:35:35 2011 +++ src/usr.bin/fstat/fstat.c Sat Sep 3 09:24:19 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: fstat.c,v 1.90 2011/04/14 00:35:35 rmind Exp $ */ +/* $NetBSD: fstat.c,v 1.91 2011/09/03 13:24:19 christos Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -39,7 +39,7 @@ #if 0 static char sccsid[] = "@(#)fstat.c 8.3 (Berkeley) 5/2/95"; #else -__RCSID("$NetBSD: fstat.c,v 1.90 2011/04/14 00:35:35 rmind Exp $"); +__RCSID("$NetBSD: fstat.c,v 1.91 2011/09/03 13:24:19 christos Exp $"); #endif #endif /* not lint */ @@ -322,11 +322,15 @@ if (p->p_fd == 0 || p->p_cwdi == 0) return; if (!KVM_READ(p->p_fd, &filed, sizeof (filed))) { - warnx("can't read filedesc at %p for pid %d", (void *)(uintptr_t)p->p_fd, Pid); + warnx("can't read filedesc at %p for pid %d", + (void *)(uintptr_t)p->p_fd, Pid); return; } + if (filed.fd_lastfile == -1) + return; if (!KVM_READ(p->p_cwdi, &cwdi, sizeof(cwdi))) { - warnx("can't read cwdinfo at %p for pid %d", (void *)(uintptr_t)p->p_cwdi, Pid); + warnx("can't read cwdinfo at %p for pid %d", + (void *)(uintptr_t)p->p_cwdi, Pid); return; } if (!KVM_READ(filed.fd_dt, &dt, sizeof(dt))) { @@ -335,7 +339,8 @@ } if ((unsigned)filed.fd_lastfile >= dt.dt_nfiles || filed.fd_freefile > filed.fd_lastfile + 1) { - dprintf("filedesc corrupted at %p for pid %d", (void *)(uintptr_t)p->p_fd, Pid); + dprintf("filedesc corrupted at %p for pid %d", + (void *)(uintptr_t)p->p_fd, Pid); return; } /* @@ -476,7 +481,7 @@ break; } } - return (badtype); + return badtype; } static void @@ -685,21 +690,21 @@ if (!KVM_READ(VTOLAYER(vp), &layer_node, sizeof(layer_node))) { dprintf("can't read layer_node at %p for pid %d", VTOLAYER(vp), Pid); - return ("error"); + return "error"; } if (!KVM_READ(vp->v_mount, &mount, sizeof(struct mount))) { dprintf("can't read mount struct at %p for pid %d", vp->v_mount, Pid); - return ("error"); + return "error"; } vp = layer_node.layer_lowervp; if (!KVM_READ(vp, &vn, sizeof(struct vnode))) { dprintf("can't read vnode at %p for pid %d", vp, Pid); - return ("error"); + return "error"; } if ((badtype = vfilestat(&vn, fsp)) == NULL) fsp->fsid = mount.mnt_stat.f_fsidx.__fsid_val[0]; - return (badtype); + return badtype; } static char * @@ -715,10 +720,10 @@ for (mt = mhead; mt != NULL; mt = mt->next) if (m == mt->m) - return (mt->mntonname); + return mt->mntonname; if (!KVM_READ(m, &mount, sizeof(struct mount))) { warnx("can't read mount table at %p", m); - return (NULL); + return NULL; } if ((mt = malloc(sizeof (struct mtab))) == NULL) { err(1, "malloc(%u)", (unsigned int)sizeof(struct mtab)); @@ -728,7 +733,7 @@ MNAMELEN); mt->next = mhead; mhead = mt; - return (mt->mntonname); + return mt->mntonname; } #ifdef INET6 @@ -925,22 +930,42 @@ case AF_LOCAL: /* print address of pcb and connected pcb */ if (so.so_pcb) { + char shoconn[4], *cp; + (void)printf(" %lx", (long)so.so_pcb); if (kvm_read(kd, (u_long)so.so_pcb, (char *)&unpcb, sizeof(struct unpcb)) != sizeof(struct unpcb)){ dprintf("can't read unpcb at %p", so.so_pcb); goto bad; } - if (unpcb.unp_conn) { - char shoconn[4], *cp; - cp = shoconn; - if (!(so.so_state & SS_CANTRCVMORE)) - *cp++ = '<'; - *cp++ = '-'; - if (!(so.so_state & SS_CANTSENDMORE)) - *cp++ = '>'; - *cp = '\0'; + cp = shoconn; + if (!(so.so_state & SS_CANTRCVMORE)) + *cp++ = '<'; + *cp++ = '-'; + if (!(so.so_state & SS_CANTSENDMORE)) + *cp++ = '>'; + *cp = '\0'; + if (unpcb.unp_addr) { + struct sockaddr_un *sun = + malloc(unpcb.unp_addrlen); + if (sun == NULL) + err(1, "malloc(%zu)", + unpcb.unp_addrlen); + if (kvm_read(kd, (u_long)unpcb.unp_addr, + sun, unpcb.unp_addrlen) != + (ssize_t)unpcb.unp_addrlen) { + dprintf("can't read sun at %p", + unpcb.unp_addr); + free(sun); + } else { + (void)printf(" %s %s", + shoconn, sun->sun_path); + free(sun); + break; + } + } + if (unpcb.unp_conn) { (void)printf(" %s %lx", shoconn, (long)unpcb.unp_conn); } @@ -1037,8 +1062,8 @@ warn("stat(%s)", filename); return 0; } - if ((cur = malloc(sizeof(DEVS))) == NULL) { - err(1, "malloc(%u)", (unsigned int)sizeof(DEVS)); + if ((cur = malloc(sizeof(*cur))) == NULL) { + err(1, "malloc(%zu)", sizeof(*cur)); } cur->next = devs; devs = cur;