| 273 | } |
| 274 | |
| 275 | static int |
| 276 | kread_string(kvm_t *kvm, const void *kvm_pointer, char *buffer, int buflen) |
| 277 | { |
| 278 | ssize_t ret; |
| 279 | int i; |
| 280 | |
| 281 | for (i = 0; i < buflen; i++) { |
| 282 | ret = kvm_read(kvm, __DECONST(unsigned long, kvm_pointer) + |
| 283 | i, &(buffer[i]), sizeof(char)); |
| 284 | if (ret < 0) |
| 285 | return (MEMSTAT_ERROR_KVM); |
| 286 | if ((size_t)ret != sizeof(char)) |
| 287 | return (MEMSTAT_ERROR_KVM_SHORTREAD); |
| 288 | if (buffer[i] == '\0') |
| 289 | return (0); |
| 290 | } |
| 291 | /* Truncate. */ |
| 292 | buffer[i-1] = '\0'; |
| 293 | return (0); |
| 294 | } |
| 295 | |
| 296 | static int |
| 297 | kread_symbol(kvm_t *kvm, int index, void *address, size_t size, |
no outgoing calls
no test coverage detected