1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2025-01-19 12:24:32 +00:00

revent: Added "magic" and file version to revent files.

revent files should now start with "REVENT" followed by the file format
version.
This commit is contained in:
Sebastian Goscik 2016-07-19 11:27:52 +01:00
parent 259b813a96
commit 139a0698c9
3 changed files with 45 additions and 9 deletions

Binary file not shown.

Binary file not shown.

View File

@ -42,7 +42,10 @@
#define INPDEV_MAX_DEVICES 16 #define INPDEV_MAX_DEVICES 16
#define INPDEV_MAX_PATH 30 #define INPDEV_MAX_PATH 30
const char magic[] = "REVENT";
//This should be incremented if any changes are made to the file format
uint16_t file_version = 1;
#ifndef ANDROID #ifndef ANDROID
int strlcpy(char *dest, char *source, size_t size) int strlcpy(char *dest, char *source, size_t size)
@ -241,16 +244,29 @@ void dump(const char *logfile)
int fdin = open(logfile, O_RDONLY); int fdin = open(logfile, O_RDONLY);
if (fdin < 0) die("Could not open eventlog %s\n", logfile); if (fdin < 0) die("Could not open eventlog %s\n", logfile);
int32_t nfds;
size_t rb = read(fdin, &nfds, sizeof(nfds));
if (rb != sizeof(nfds)) die("problems reading eventlog\n");
int *fds = malloc(sizeof(int)*nfds);
if (!fds) die("out of memory\n");
int32_t len; int32_t len;
int32_t i; int32_t i;
char buf[INPDEV_MAX_PATH]; char buf[INPDEV_MAX_PATH];
//Read magic
len = strlen(magic);
size_t rb = read(fdin, &buf[0], len);
if (rb != len) die("problems reading eventlog\n");
if(strcmp(magic, buf) != 0)
die("File is not an revent recording, are you using an old recording?");
//Read file format version
uint16_t version;
rb = read(fdin, &version, sizeof(version));
if (rb != sizeof(version)) die("problems reading eventlog\n");
printf("File format version: %i\n", version);
int32_t nfds;
rb = read(fdin, &nfds, sizeof(nfds));
if (rb != sizeof(nfds)) die("problems reading eventlog\n");
int *fds = malloc(sizeof(int)*nfds);
if (!fds) die("out of memory\n");
inpdev_t *inpdev = malloc(sizeof(inpdev_t)); inpdev_t *inpdev = malloc(sizeof(inpdev_t));
inpdev->id_pathc = nfds; inpdev->id_pathc = nfds;
for (i=0; i<nfds; i++) { for (i=0; i<nfds; i++) {
@ -295,7 +311,22 @@ int replay_buffer_init(replay_buffer_t **buffer, const char *logfile)
if (fdin < 0) if (fdin < 0)
die("Could not open eventlog %s\n", logfile); die("Could not open eventlog %s\n", logfile);
size_t rb = read(fdin, &(buff->num_fds), sizeof(buff->num_fds)); int32_t len, i;
//Read magic
char buf[7];
len = strlen(magic);
size_t rb = read(fdin, &buf[0], len);
if (rb != len) die("problems reading eventlog\n");
if(strcmp(magic, buf) != 0)
die("File is not an revent recording, are you using an old recording?");
//Read file format version
uint16_t version;
rb = read(fdin, &version, sizeof(version));
if (rb != sizeof(version)) die("problems reading eventlog\n");
rb = read(fdin, &(buff->num_fds), sizeof(buff->num_fds));
if (rb!=sizeof(buff->num_fds)) if (rb!=sizeof(buff->num_fds))
die("problems reading eventlog\n"); die("problems reading eventlog\n");
@ -303,7 +334,7 @@ int replay_buffer_init(replay_buffer_t **buffer, const char *logfile)
if (!buff->fds) if (!buff->fds)
die("out of memory\n"); die("out of memory\n");
int32_t len, i;
char path_buff[INPDEV_MAX_PATH]; char path_buff[INPDEV_MAX_PATH];
for (i = 0; i < buff->num_fds; i++) { for (i = 0; i < buff->num_fds; i++) {
memset(path_buff, 0, sizeof(path_buff)); memset(path_buff, 0, sizeof(path_buff));
@ -563,6 +594,11 @@ void record(inpdev_t *inpdev, int delay, const char *logfile)
fdout = fopen(logfile, "wb"); fdout = fopen(logfile, "wb");
if (!fdout) die("Could not open eventlog %s\n", logfile); if (!fdout) die("Could not open eventlog %s\n", logfile);
//Write magic & file format version
fwrite(&magic, strlen(magic), 1, fdout);
fwrite(&file_version, sizeof(file_version), 1, fdout);
//Write device paths
fwrite(&inpdev->id_pathc, sizeof(inpdev->id_pathc), 1, fdout); fwrite(&inpdev->id_pathc, sizeof(inpdev->id_pathc), 1, fdout);
for (i=0; i<inpdev->id_pathc; i++) { for (i=0; i<inpdev->id_pathc; i++) {
int32_t len = strlen(inpdev->id_pathv[i]); int32_t len = strlen(inpdev->id_pathv[i]);
@ -575,7 +611,7 @@ void record(inpdev_t *inpdev, int delay, const char *logfile)
fds[i] = open(inpdev->id_pathv[i], O_RDONLY); fds[i] = open(inpdev->id_pathv[i], O_RDONLY);
if (fds[i]>maxfd) maxfd = fds[i]; if (fds[i]>maxfd) maxfd = fds[i];
dprintf("opened %s with %d\n", inpdev->id_pathv[i], fds[i]); dprintf("opened %s with %d\n", inpdev->id_pathv[i], fds[i]);
if (fds[i]<0) die("could not open \%s\n", inpdev->id_pathv[i]); if (fds[i]<0) die("could not open %s\n", inpdev->id_pathv[i]);
} }
//Block SIGTERM //Block SIGTERM