• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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