diff options
Diffstat (limited to 'compat/shm.h')
-rw-r--r-- | compat/shm.h | 85 |
1 files changed, 55 insertions, 30 deletions
diff --git a/compat/shm.h b/compat/shm.h index 814ce90c..7cd7693d 100644 --- a/compat/shm.h +++ b/compat/shm.h @@ -1,41 +1,66 @@ -/* Copyright (c) 2013 Stanislaw Halik <sthalik@misaki.pl> +#ifndef SHM_HEADER_GUARD +#define SHM_HEADER_GUARD - * 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 +#include "macros1.h" -#if defined(_WIN32) -#include <windows.h> +#ifndef SHM_WIN32_INIT +# ifdef _WIN32 +# define SHM_WIN32 +# else +# undef SHM_WIN32 +# endif #else -#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> +# if SHM_WIN32_INIT +# define SHM_WIN32 +# else +# undef SHM_WIN32 +# endif #endif -#include "macros.hpp" -#include "export.hpp" +#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 -class OTR_COMPAT_EXPORT shm_wrapper final -{ +struct SHM_TYPE_NAME { void* mem; -#if defined(_WIN32) - HANDLE mutex, mapped_file; +#ifdef SHM_WIN32 + void* mutex; + void* mapped_file; #else int fd, size; #endif - -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; } }; + +#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)(SHM_TYPE_NAME* __restrict self, __VA_ARGS__) + +SHM_FUN(void, init, const char* shm_name, const char* mutex_name, int map_size); +SHM_FUN(void, free); +SHM_FUN(void, lock); +SHM_FUN(void, unlock); +SHM_FUN(void*,ptr); +SHM_FUN(bool, success); + +#ifndef BUILD_SHM +# undef SHM_FUN +# undef SHM_FUN_NAME +#endif + +#endif // SHM_HEADER_GUARD |