diff options
Diffstat (limited to 'src/util.h')
-rw-r--r-- | src/util.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..eaceeeb --- /dev/null +++ b/src/util.h @@ -0,0 +1,97 @@ +/* + * util.h - routeup/tlsdated utility functions + * Copyright (c) 2012 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef UTIL_H +#define UTIL_H + +#include <errno.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> + +#ifdef HAVE_PRCTL +#include <sys/prctl.h> +#ifndef PR_SET_NO_NEW_PRIVS +# define PR_SET_NO_NEW_PRIVS 38 +#endif +#ifndef PR_GET_NO_NEW_PRIVS +# define PR_GET_NO_NEW_PRIVS 39 +#endif +#endif + +#include "src/rtc.h" + +#ifdef TARGET_OS_HAIKU +#include <stdarg.h> +#endif + +#define API __attribute__((visibility("default"))) + +extern const char *kTempSuffix; +#define IGNORE_EINTR(expr) ({ \ + typeof(expr) _r; \ + while ((_r = (expr)) == -1 && errno == EINTR); \ + _r; \ +}) + +extern int verbose; +extern int verbose_debug; +void initalize_syslog (void); +void terminate_syslog (void); +void die (const char *fmt, ...); +void verb (const char *fmt, ...); +extern void logat (int isverbose, const char *fmt, ...); + +#define verb_debug debug +#define debug(fmt, ...) if (verbose_debug) logat(1, fmt, ## __VA_ARGS__) +#define info(fmt, ...) logat(0, fmt, ## __VA_ARGS__) +#define pinfo(fmt, ...) logat(1, fmt ": %s", ## __VA_ARGS__, strerror(errno)) +#define error(fmt, ...) logat(0, fmt, ## __VA_ARGS__) +#define perror(fmt, ...) logat(0, fmt ": %s", ## __VA_ARGS__, strerror(errno)) +#define fatal(fmt, ...) do { logat(0, fmt, ## __VA_ARGS__); exit(1); } while (0) +#define pfatal(fmt, ...) do { \ + logat(0, fmt ": %s", ## __VA_ARGS__, strerror(errno)); \ + exit(1); \ +} while (0) + +static inline int min (int x, int y) +{ + return x < y ? x : y; +} + +void drop_privs_to (const char *user, const char *group); +void no_new_privs (void); +const char *sync_type_str (int sync_type); + +struct state; +enum event_id_t; +void trigger_event (struct state *state, enum event_id_t e, int sec); + +struct platform { + int (*rtc_open)(struct rtc_handle *); + int (*rtc_write)(struct rtc_handle *, const struct timeval *tv); + int (*rtc_read)(struct rtc_handle *, struct timeval *tv); + int (*rtc_close)(struct rtc_handle *); + + int (*file_open)(const char *path, int write, int cloexec); + int (*file_close)(int fd); + /* Atomic file write and read */ + int (*file_write)(int fd, void *buf, size_t sz); + int (*file_read)(int fd, void *buf, size_t sz); + + int (*time_get)(struct timeval *tv); + + int (*pgrp_enter)(void); + int (*pgrp_kill)(void); + + int (*process_signal)(pid_t pid, int sig); + int (*process_wait)(pid_t pid, int *status, int timeout); +}; + +extern struct platform *platform; + +#endif /* !UTIL_H */ |