int procfs_docpuinfo(struct proc *curp, struct proc *p, struct pfsnode *pfs, struct uio *uio) { char buf[512], *cp; int len, error; len = sizeof buf; if (procfs_getcpuinfstr(buf, &len) < 0) return EIO; if (len == 0) return 0; len -= uio->uio_offset; cp = buf + uio->uio_offset; len = imin(len, uio->uio_resid); if (len <= 0) error = 0; else error = uiomove(cp, len, uio); return error; }
int procfs_docpuinfo(struct lwp *curl, struct proc *p, struct pfsnode *pfs, struct uio *uio) { int len = LBFSZ; char *bf = malloc(len, M_TEMP, M_WAITOK); int error; if (procfs_getcpuinfstr(bf, &len) < 0) { error = ENOSPC; goto done; } if (len == 0) { error = 0; goto done; } error = uiomove_frombuf(bf, len, uio); done: free(bf, M_TEMP); return error; }