summaryrefslogtreecommitdiffhomepage
path: root/compat/shm.h
diff options
context:
space:
mode:
Diffstat (limited to 'compat/shm.h')
-rw-r--r--compat/shm.h87
1 files changed, 30 insertions, 57 deletions
diff --git a/compat/shm.h b/compat/shm.h
index 856b9c8c..814ce90c 100644
--- a/compat/shm.h
+++ b/compat/shm.h
@@ -1,68 +1,41 @@
-#ifndef SHM_HEADER_GUARD
-#define SHM_HEADER_GUARD
+/* Copyright (c) 2013 Stanislaw Halik <sthalik@misaki.pl>
-#include "macros1.h"
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ */
+#pragma once
-#ifndef SHM_WIN32_INIT
-# ifdef _WIN32
-# define SHM_WIN32
-# else
-# undef SHM_WIN32
-# endif
+#if defined(_WIN32)
+#include <windows.h>
#else
-# if SHM_WIN32_INIT
-# define SHM_WIN32
-# else
-# undef SHM_WIN32
-# endif
+#include <stdio.h>
+#include <string.h>
+#include <sys/file.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <unistd.h>
+#include <sys/types.h>
#endif
-#ifndef SHM_TYPE_NAME
-# define SHM_TYPE_NAME shm_mem_impl
-#endif
-
-#ifndef SHM_FUN_PREFIX
-# define SHM_FUN_PREFIX shm_mem_impl_
-#endif
-
-#ifndef SHM_EXPORT
-# define SHM_EXPORT
-#endif
-
-#ifndef __cplusplus
-# define SHM_EXTERN
-# include <stdbool.h>
-struct SHM_TYPE_NAME;
-typedef struct SHM_TYPE_NAME SHM_TYPE_NAME;
-#else
-# define SHM_EXTERN extern "C"
-#endif
+#include "macros.hpp"
+#include "export.hpp"
-struct SHM_TYPE_NAME {
+class OTR_COMPAT_EXPORT shm_wrapper final
+{
void* mem;
-#ifdef SHM_WIN32
- void* mutex;
- void* mapped_file;
+#if defined(_WIN32)
+ HANDLE mutex, mapped_file;
#else
int fd, size;
#endif
-};
-
-#define SHM_FUN_NAME(f) PP_CAT(SHM_FUN_PREFIX, f)
-#define SHM_FUN_(r, f)SHM_EXTERN SHM_EXPORT r SHM_FUN_NAME(f)
-#define SHM_FUN(r, f, ...) SHM_FUN_(r, f)(SHM_TYPE_NAME* self, __VA_ARGS__)
-#define SHM_FUN0(r, f) SHM_FUN_(r, f)(SHM_TYPE_NAME* self)
-
-SHM_FUN(void, init, const char* shm_name, const char* mutex_name, int map_size);
-SHM_FUN0(void, free);
-SHM_FUN0(void, lock);
-SHM_FUN0(void, unlock);
-SHM_FUN0(void*,ptr);
-SHM_FUN0(bool, success);
-#ifndef BUILD_SHM
-# undef SHM_FUN
-# undef SHM_FUN_NAME
-#endif
-
-#endif // SHM_HEADER_GUARD
+public:
+ cc_noinline shm_wrapper(const char *shm_name, const char *mutex_name, int map_size);
+ cc_noinline ~shm_wrapper();
+ cc_noinline bool lock();
+ cc_noinline bool unlock();
+ cc_noinline bool success();
+ inline void* ptr() { return mem; }
+};