Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
perf
util
util.h
Go to the documentation of this file.
1
#ifndef GIT_COMPAT_UTIL_H
2
#define GIT_COMPAT_UTIL_H
3
4
#define _FILE_OFFSET_BITS 64
5
6
#ifndef FLEX_ARRAY
7
/*
8
* See if our compiler is known to support flexible array members.
9
*/
10
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
11
# define FLEX_ARRAY
/* empty */
12
#elif defined(__GNUC__)
13
# if (__GNUC__ >= 3)
14
# define FLEX_ARRAY
/* empty */
15
# else
16
# define FLEX_ARRAY 0
/* older GNU extension */
17
# endif
18
#endif
19
20
/*
21
* Otherwise, default to safer but a bit wasteful traditional style
22
*/
23
#ifndef FLEX_ARRAY
24
# define FLEX_ARRAY 1
25
#endif
26
#endif
27
28
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
29
30
#ifdef __GNUC__
31
#define TYPEOF(x) (__typeof__(x))
32
#else
33
#define TYPEOF(x)
34
#endif
35
36
#define MSB(x, bits) ((x) & TYPEOF(x)(~0ULL << (sizeof(x) * 8 - (bits))))
37
#define HAS_MULTI_BITS(i) ((i) & ((i) - 1))
/* checks if an integer has more than 1 bit set */
38
39
/* Approximation of the length of the decimal representation of this type. */
40
#define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
41
42
#define _ALL_SOURCE 1
43
#define _BSD_SOURCE 1
44
#define HAS_BOOL
45
46
#include <unistd.h>
47
#include <
stdio.h
>
48
#include <sys/stat.h>
49
#include <sys/statfs.h>
50
#include <fcntl.h>
51
#include <stdbool.h>
52
#include <stddef.h>
53
#include <
stdlib.h
>
54
#include <stdarg.h>
55
#include <string.h>
56
#include <errno.h>
57
#include <limits.h>
58
#include <sys/param.h>
59
#include <sys/types.h>
60
#include <
dirent.h
>
61
#include <sys/time.h>
62
#include <time.h>
63
#include <signal.h>
64
#include <fnmatch.h>
65
#include <assert.h>
66
#include <regex.h>
67
#include <
utime.h
>
68
#include <sys/wait.h>
69
#include <sys/poll.h>
70
#include <sys/socket.h>
71
#include <sys/ioctl.h>
72
#include <inttypes.h>
73
#include <linux/magic.h>
74
#include "
types.h
"
75
#include <sys/ttydefaults.h>
76
77
extern
const
char
*
graph_line
;
78
extern
const
char
*
graph_dotted_line
;
79
extern
char
buildid_dir
[];
80
81
/* On most systems <limits.h> would have given us this, but
82
* not on some systems (e.g. GNU/Hurd).
83
*/
84
#ifndef PATH_MAX
85
#define PATH_MAX 4096
86
#endif
87
88
#ifndef PRIuMAX
89
#define PRIuMAX "llu"
90
#endif
91
92
#ifndef PRIu32
93
#define PRIu32 "u"
94
#endif
95
96
#ifndef PRIx32
97
#define PRIx32 "x"
98
#endif
99
100
#ifndef PATH_SEP
101
#define PATH_SEP ':'
102
#endif
103
104
#ifndef STRIP_EXTENSION
105
#define STRIP_EXTENSION ""
106
#endif
107
108
#ifndef has_dos_drive_prefix
109
#define has_dos_drive_prefix(path) 0
110
#endif
111
112
#ifndef is_dir_sep
113
#define is_dir_sep(c) ((c) == '/')
114
#endif
115
116
#ifdef __GNUC__
117
#define NORETURN __attribute__((__noreturn__))
118
#else
119
#define NORETURN
120
#ifndef __attribute__
121
#define __attribute__(x)
122
#endif
123
#endif
124
125
/* General helper functions */
126
extern
void
usage
(
const
char
*
err
)
NORETURN
;
127
extern
void
die
(
const
char
*
err
, ...)
NORETURN
__attribute__
((
format
(
printf
, 1, 2)));
128
extern
int
error
(
const
char
*err, ...)
__attribute__
((
format
(printf, 1, 2)));
129
extern
void
warning
(
const
char
*err, ...)
__attribute__
((
format
(printf, 1, 2)));
130
131
#include "../../../include/linux/stringify.h"
132
133
#define DIE_IF(cnd) \
134
do { if (cnd) \
135
die(" at (" __FILE__ ":" __stringify(__LINE__) "): " \
136
__stringify(cnd) "\n"); \
137
} while (0)
138
139
140
extern
void
set_die_routine
(
void
(*
routine
)(
const
char
*err,
va_list
params
)
NORETURN
);
141
142
extern
int
prefixcmp
(
const
char
*
str
,
const
char
*
prefix
);
143
extern
void
set_buildid_dir
(
void
);
144
extern
void
disable_buildid_cache
(
void
);
145
146
static
inline
const
char
*skip_prefix(
const
char
*
str
,
const
char
*
prefix
)
147
{
148
size_t
len
=
strlen
(prefix);
149
return
strncmp
(str, prefix, len) ?
NULL
: str + len;
150
}
151
152
#ifdef __GLIBC_PREREQ
153
#if __GLIBC_PREREQ(2, 1)
154
#define HAVE_STRCHRNUL
155
#endif
156
#endif
157
158
#ifndef HAVE_STRCHRNUL
159
#define strchrnul gitstrchrnul
160
static
inline
char
*gitstrchrnul(
const
char
*
s
,
int
c
)
161
{
162
while
(*s && *s != c)
163
s++;
164
return
(
char
*)
s
;
165
}
166
#endif
167
168
/*
169
* Wrappers:
170
*/
171
extern
char
*
xstrdup
(
const
char
*
str
);
172
extern
void
*
xrealloc
(
void
*
ptr
,
size_t
size
)
__attribute__
((weak));
173
174
175
static
inline
void
*
zalloc
(
size_t
size
)
176
{
177
return
calloc(1, size);
178
}
179
180
static
inline
int
has_extension(
const
char
*
filename
,
const
char
*
ext
)
181
{
182
size_t
len
=
strlen
(filename);
183
size_t
extlen =
strlen
(ext);
184
185
return
len > extlen && !
memcmp
(filename + len - extlen, ext, extlen);
186
}
187
188
/* Sane ctype - no locale, and works with signed chars */
189
#undef isascii
190
#undef isspace
191
#undef isdigit
192
#undef isxdigit
193
#undef isalpha
194
#undef isprint
195
#undef isalnum
196
#undef islower
197
#undef isupper
198
#undef tolower
199
#undef toupper
200
201
extern
unsigned
char
sane_ctype
[256];
202
#define GIT_SPACE 0x01
203
#define GIT_DIGIT 0x02
204
#define GIT_ALPHA 0x04
205
#define GIT_GLOB_SPECIAL 0x08
206
#define GIT_REGEX_SPECIAL 0x10
207
#define GIT_PRINT_EXTRA 0x20
208
#define GIT_PRINT 0x3E
209
#define sane_istest(x,mask) ((sane_ctype[(unsigned char)(x)] & (mask)) != 0)
210
#define isascii(x) (((x) & ~0x7f) == 0)
211
#define isspace(x) sane_istest(x,GIT_SPACE)
212
#define isdigit(x) sane_istest(x,GIT_DIGIT)
213
#define isxdigit(x) \
214
(sane_istest(toupper(x), GIT_ALPHA | GIT_DIGIT) && toupper(x) < 'G')
215
#define isalpha(x) sane_istest(x,GIT_ALPHA)
216
#define isalnum(x) sane_istest(x,GIT_ALPHA | GIT_DIGIT)
217
#define isprint(x) sane_istest(x,GIT_PRINT)
218
#define islower(x) (sane_istest(x,GIT_ALPHA) && sane_istest(x,0x20))
219
#define isupper(x) (sane_istest(x,GIT_ALPHA) && !sane_istest(x,0x20))
220
#define tolower(x) sane_case((unsigned char)(x), 0x20)
221
#define toupper(x) sane_case((unsigned char)(x), 0)
222
223
static
inline
int
sane_case(
int
x
,
int
high
)
224
{
225
if
(
sane_istest
(x,
GIT_ALPHA
))
226
x = (x & ~0x20) | high;
227
return
x
;
228
}
229
230
int
mkdir_p
(
char
*
path
,
mode_t
mode
);
231
int
copyfile
(
const
char
*
from
,
const
char
*to);
232
233
s64
perf_atoll
(
const
char
*
str
);
234
char
**
argv_split
(
const
char
*
str
,
int
*argcp);
235
void
argv_free
(
char
**argv);
236
bool
strglobmatch
(
const
char
*
str
,
const
char
*
pat
);
237
bool
strlazymatch
(
const
char
*
str
,
const
char
*
pat
);
238
int
strtailcmp
(
const
char
*
s1
,
const
char
*
s2
);
239
unsigned
long
convert_unit
(
unsigned
long
value
,
char
*
unit
);
240
int
readn
(
int
fd
,
void
*
buf
,
size_t
size
);
241
242
struct
perf_event_attr
;
243
244
void
event_attr_init
(
struct
perf_event_attr
*
attr
);
245
246
#define _STR(x) #x
247
#define STR(x) _STR(x)
248
249
/*
250
* Determine whether some value is a power of two, where zero is
251
* *not* considered a power of two.
252
*/
253
254
static
inline
__attribute__
((
const
))
255
bool
is_power_of_2
(
unsigned
long
n
)
256
{
257
return
(n != 0 && ((n & (n - 1)) == 0));
258
}
259
260
size_t
hex_width
(
u64
v
);
261
262
char
*
rtrim
(
char
*
s
);
263
264
void
dump_stack
(
void
);
265
266
#endif
Generated on Thu Jan 10 2013 14:12:14 for Linux Kernel by
1.8.2