diff options
| author | Bruce Evans <bde@FreeBSD.org> | 1998-01-16 16:45:05 +0000 | 
|---|---|---|
| committer | Bruce Evans <bde@FreeBSD.org> | 1998-01-16 16:45:05 +0000 | 
| commit | d7fb4b13b902fa73973cc80b6805397e4b316ba2 (patch) | |
| tree | a5054c0dc739291458e065ab0860b7f61aa6d06e /lib/libkvm/kvm_proc.c | |
| parent | a8d70a4bb79880af16867870480db0a5d558fb3b (diff) | |
Notes
Diffstat (limited to 'lib/libkvm/kvm_proc.c')
| -rw-r--r-- | lib/libkvm/kvm_proc.c | 23 | 
1 files changed, 14 insertions, 9 deletions
| diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c index d167f34ee5ee..d8a1b8eef342 100644 --- a/lib/libkvm/kvm_proc.c +++ b/lib/libkvm/kvm_proc.c @@ -686,30 +686,35 @@ kvm_uread(kd, p, uva, buf, len)  	int fd;  	if (!ISALIVE(kd)) { -		_kvm_err(kd, kd->program, "cannot read user space from dead kernel"); -		return(0); +		_kvm_err(kd, kd->program, +		    "cannot read user space from dead kernel"); +		return (0);  	} -	cp = buf; -  	sprintf(procfile, "/proc/%d/mem", p->p_pid);  	fd = open(procfile, O_RDONLY, 0); -  	if (fd < 0) {  		_kvm_err(kd, kd->program, "cannot open %s", procfile);  		close(fd);  		return (0);  	} - +	cp = buf;  	while (len > 0) { +		errno = 0;  		if (lseek(fd, (off_t)uva, 0) == -1 && errno != 0) { -			_kvm_err(kd, kd->program, "invalid address (%x) in %s", uva, procfile); +			_kvm_err(kd, kd->program, "invalid address (%x) in %s", +			    uva, procfile);  			break;  		}  		amount = read(fd, cp, len);  		if (amount < 0) { -			_kvm_err(kd, kd->program, "error reading %s", procfile); +			_kvm_syserr(kd, kd->program, "error reading %s", +			    procfile); +			break; +		} +		if (amount == 0) { +			_kvm_err(kd, kd->program, "EOF reading %s", procfile);  			break;  		}  		cp += amount; @@ -718,5 +723,5 @@ kvm_uread(kd, p, uva, buf, len)  	}  	close(fd); -	return (ssize_t)(cp - buf); +	return ((ssize_t)(cp - buf));  } | 
