1 /* util.h
2 * Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 *
6 * Logging and other utility functions.
7 */
8
9 #ifndef _UTIL_H_
10 #define _UTIL_H_
11
12 #include <stdlib.h>
13 #include <sys/types.h>
14 #include <syslog.h>
15 #include <unistd.h>
16
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20
21 /* clang-format off */
22 #define die(_msg, ...) do { \
23 syslog(LOG_ERR, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__); \
24 abort(); \
25 } while (0)
26
27 #define pdie(_msg, ...) \
28 die(_msg ": %m", ## __VA_ARGS__)
29
30 #define warn(_msg, ...) \
31 syslog(LOG_WARNING, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
32
33 #define pwarn(_msg, ...) \
34 warn(_msg ": %m", ## __VA_ARGS__)
35
36 #define info(_msg, ...) \
37 syslog(LOG_INFO, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
38
39 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
40 /* clang-format on */
41
42 extern const char *log_syscalls[];
43 extern const size_t log_syscalls_len;
44
is_android()45 static inline int is_android()
46 {
47 #if defined(__ANDROID__)
48 return 1;
49 #else
50 return 0;
51 #endif
52 }
53
54 void __asan_init(void) __attribute__((weak));
55
running_with_asan()56 static inline int running_with_asan()
57 {
58 return &__asan_init != 0;
59 }
60
61 int lookup_syscall(const char *name);
62 const char *lookup_syscall_name(int nr);
63
64 long int parse_constant(char *constant_str, char **endptr);
65 int parse_size(size_t *size, const char *sizespec);
66
67 char *strip(char *s);
68 char *tokenize(char **stringp, const char *delim);
69
70 char *path_join(const char *external_path, const char *internal_path);
71
72 /*
73 * consumebytes: consumes @length bytes from a buffer @buf of length @buflength
74 * @length Number of bytes to consume
75 * @buf Buffer to consume from
76 * @buflength Size of @buf
77 *
78 * Returns a pointer to the base of the bytes, or NULL for errors.
79 */
80 void *consumebytes(size_t length, char **buf, size_t *buflength);
81
82 /*
83 * consumestr: consumes a C string from a buffer @buf of length @length
84 * @buf Buffer to consume
85 * @length Length of buffer
86 *
87 * Returns a pointer to the base of the string, or NULL for errors.
88 */
89 char *consumestr(char **buf, size_t *buflength);
90
91 #ifdef __cplusplus
92 }; /* extern "C" */
93 #endif
94
95 #endif /* _UTIL_H_ */
96