| #include "ras.h" |
| |
| void event_attr_init(struct perf_event_attr *attr) |
| { |
| #if 0 |
| if (!perf_host) |
| attr->exclude_host = 1; |
| if (!perf_guest) |
| attr->exclude_guest = 1; |
| #endif |
| /* to capture ABI version */ |
| attr->size = sizeof(*attr); |
| } |
| |
| int filename__read_str(const char *filename, char **buf, size_t *sizep) |
| { |
| size_t size = 0, alloc_size = 0; |
| void *bf = NULL, *nbf; |
| int fd, n, err = 0; |
| |
| fd = open(filename, O_RDONLY); |
| if (fd < 0) |
| return -errno; |
| |
| do { |
| if (size == alloc_size) { |
| alloc_size += BUFSIZ; |
| nbf = realloc(bf, alloc_size); |
| if (!nbf) { |
| err = -ENOMEM; |
| break; |
| } |
| |
| bf = nbf; |
| } |
| |
| n = read(fd, bf + size, alloc_size - size); |
| if (n < 0) { |
| if (size) { |
| pr_warning("read failed %d: %s\n", |
| errno, strerror(errno)); |
| err = 0; |
| } else |
| err = -errno; |
| |
| break; |
| } |
| |
| size += n; |
| } while (n > 0); |
| |
| if (!err) { |
| *sizep = size; |
| *buf = bf; |
| } else |
| free(bf); |
| |
| close(fd); |
| return err; |
| } |