blob: 9c74cdbe70f9d4c3c3b12e3d9629ee601155a0ff [file] [log] [blame]
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -07001/* 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>
Jorge Lucangeli Obesf205fff2016-08-06 09:06:21 -040013#include <sys/types.h>
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070014#include <syslog.h>
Jorge Lucangeli Obesf205fff2016-08-06 09:06:21 -040015#include <unistd.h>
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070016
Jorge Lucangeli Obesa67bd6a2016-08-19 15:33:48 -040017#ifdef __cplusplus
18extern "C" {
19#endif
20
Jorge Lucangeli Obes0b208772017-04-19 14:15:46 -040021/* clang-format off */
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070022#define die(_msg, ...) do { \
Jorge Lucangeli Obesf205fff2016-08-06 09:06:21 -040023 syslog(LOG_ERR, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__); \
Jorge Lucangeli Obes2f61ee42014-06-16 11:08:18 -070024 abort(); \
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070025} while (0)
26
27#define pdie(_msg, ...) \
Mike Frysingerb5d7b9f2015-01-09 03:50:15 -050028 die(_msg ": %m", ## __VA_ARGS__)
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070029
30#define warn(_msg, ...) \
Jorge Lucangeli Obesf205fff2016-08-06 09:06:21 -040031 syslog(LOG_WARNING, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070032
Jorge Lucangeli Obesa2053902016-08-02 12:08:15 -040033#define pwarn(_msg, ...) \
34 warn(_msg ": %m", ## __VA_ARGS__)
35
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070036#define info(_msg, ...) \
Jorge Lucangeli Obesf205fff2016-08-06 09:06:21 -040037 syslog(LOG_INFO, "libminijail[%d]: " _msg, getpid(), ## __VA_ARGS__)
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070038
Mike Frysinger404d2bb2017-01-17 19:29:00 -050039#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
Jorge Lucangeli Obes0b208772017-04-19 14:15:46 -040040/* clang-format on */
Mike Frysinger404d2bb2017-01-17 19:29:00 -050041
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070042extern const char *log_syscalls[];
43extern const size_t log_syscalls_len;
44
Jorge Lucangeli Obes0b208772017-04-19 14:15:46 -040045static inline int is_android()
46{
Jorge Lucangeli Obes4b276a62016-01-07 14:31:33 -080047#if defined(__ANDROID__)
48 return 1;
49#else
50 return 0;
51#endif
52}
53
Evgenii Stepanov97ba2b22016-09-15 17:09:38 -070054void __asan_init(void) __attribute__((weak));
Jorge Lucangeli Obes9e35c092016-04-11 13:30:08 -070055
Jorge Lucangeli Obes0b208772017-04-19 14:15:46 -040056static inline int running_with_asan()
57{
Evgenii Stepanov97ba2b22016-09-15 17:09:38 -070058 return &__asan_init != 0;
Jorge Lucangeli Obes2413f372016-04-06 18:43:10 -070059}
60
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070061int lookup_syscall(const char *name);
62const char *lookup_syscall_name(int nr);
Jorge Lucangeli Obes7b2e29c2016-08-04 12:21:03 -040063
Luis Hector Chavez40b25742013-09-22 19:44:06 -070064long int parse_constant(char *constant_str, char **endptr);
Martin Pelikánab9eb442017-01-25 11:53:58 +110065int parse_size(size_t *size, const char *sizespec);
Jorge Lucangeli Obes7b2e29c2016-08-04 12:21:03 -040066
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070067char *strip(char *s);
Jorge Lucangeli Obes66cfc142012-11-30 15:42:52 -080068char *tokenize(char **stringp, const char *delim);
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070069
Jorge Lucangeli Obes7b2e29c2016-08-04 12:21:03 -040070char *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 */
80void *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 */
89char *consumestr(char **buf, size_t *buflength);
90
Jorge Lucangeli Obesa67bd6a2016-08-19 15:33:48 -040091#ifdef __cplusplus
92}; /* extern "C" */
93#endif
94
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070095#endif /* _UTIL_H_ */