/* * 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 #include #include #include #ifdef HAVE_PRCTL #include #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 #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, const char **supp_groups); 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 */