Home | History | Annotate | Download | only in minijail
      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