aboutsummaryrefslogtreecommitdiff
path: root/src/util.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.h')
-rw-r--r--src/util.h97
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 */