static int read_header(struct pevent *pevent, const char *events_dir) { struct stat st; char *header; char *buf; int len; int ret = -1; header = append_file(events_dir, "header_page"); ret = stat(header, &st); if (ret < 0) goto out; len = read_file(header, &buf); if (len < 0) goto out; pevent_parse_header_page(pevent, buf, len, sizeof(long)); free(buf); ret = 0; out: free(header); return ret; }
static int read_header_files(struct pevent *pevent) { unsigned long long size; char *header_page; char buf[BUFSIZ]; int ret = 0; if (do_read(buf, 12) < 0) return -1; if (memcmp(buf, "header_page", 12) != 0) { pr_debug("did not read header page"); return -1; } size = read8(pevent); header_page = malloc(size); if (header_page == NULL) return -1; if (do_read(header_page, size) < 0) { pr_debug("did not read header page"); free(header_page); return -1; } if (!pevent_parse_header_page(pevent, header_page, size, pevent_get_long_size(pevent))) { /* * The commit field in the page is of type long, * use that instead, since it represents the kernel. */ pevent_set_long_size(pevent, pevent->header_page_size_size); } free(header_page); if (do_read(buf, 13) < 0) return -1; if (memcmp(buf, "header_event", 13) != 0) { pr_debug("did not read header event"); return -1; } size = read8(pevent); skip(size); return ret; }