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 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 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