Added new perf utility to access CPU counters from userspace
[akaros.git] / tools / profile / perf / xlib.c
1 /* Copyright (c) 2015 Google Inc
2  * Davide Libenzi <dlibenzi@google.com>
3  * See LICENSE for details.
4  */
5
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 #include <stdint.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include <stdlib.h>
12 #include <unistd.h>
13 #include <fcntl.h>
14 #include <errno.h>
15 #include "xlib.h"
16
17 int xopen(const char *path, int flags, mode_t mode)
18 {
19         int fd = open(path, flags, mode);
20
21         if (fd < 0) {
22                 perror(path);
23                 exit(1);
24         }
25
26         return fd;
27 }
28
29 void xwrite(int fd, const void *data, size_t size)
30 {
31         ssize_t wcount = write(fd, data, size);
32
33         if (size != (size_t) wcount) {
34                 perror("Writing file");
35                 exit(1);
36         }
37 }
38
39 void xread(int fd, void *data, size_t size)
40 {
41         ssize_t rcount = read(fd, data, size);
42
43         if (size != (size_t) rcount) {
44                 perror("Reading file");
45                 exit(1);
46         }
47 }
48
49 void xpwrite(int fd, const void *data, size_t size, off_t off)
50 {
51         ssize_t wcount = pwrite(fd, data, size, off);
52
53         if (size != (size_t) wcount) {
54                 perror("Writing file");
55                 exit(1);
56         }
57 }
58
59 void xpread(int fd, void *data, size_t size, off_t off)
60 {
61         ssize_t rcount = pread(fd, data, size, off);
62
63         if (size != (size_t) rcount) {
64                 perror("Reading file");
65                 exit(1);
66         }
67 }
68
69 void *xmalloc(size_t size)
70 {
71         void *data = malloc(size);
72
73         if (!data) {
74                 perror("Allocating memory block");
75                 exit(1);
76         }
77
78         return data;
79 }
80
81 void *xzmalloc(size_t size)
82 {
83         void *data = xmalloc(size);
84
85         memset(data, 0, size);
86
87         return data;
88 }
89
90 char *xstrdup(const char *str)
91 {
92         char *dstr = strdup(str);
93
94         if (dstr == NULL) {
95                 perror("Duplicating a string");
96                 exit(1);
97         }
98
99         return dstr;
100 }