make headers C++ safe

This commit is contained in:
John Sully 2019-02-15 16:55:40 -05:00
parent 05685ed792
commit 90c6c37628
15 changed files with 162 additions and 6 deletions

52
.vscode/settings.json vendored
View File

@ -1,6 +1,56 @@
{
"files.associations": {
"zmalloc.h": "c",
"stat.h": "c"
"stat.h": "c",
"array": "cpp",
"atomic": "cpp",
"*.tcc": "cpp",
"cctype": "cpp",
"chrono": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"condition_variable": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"list": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"fstream": "cpp",
"functional": "cpp",
"future": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"limits": "cpp",
"memory": "cpp",
"mutex": "cpp",
"new": "cpp",
"numeric": "cpp",
"optional": "cpp",
"ostream": "cpp",
"ratio": "cpp",
"scoped_allocator": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"thread": "cpp",
"cinttypes": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"typeinfo": "cpp",
"utility": "cpp"
}
}

View File

@ -31,6 +31,10 @@
#ifndef __ADLIST_H__
#define __ADLIST_H__
#ifdef __cplusplus
extern "C" {
#endif
/* Node, List, and Iterator are the only data structures used currently. */
typedef struct listNode {
@ -92,4 +96,8 @@ void listJoin(list *l, list *o);
#define AL_START_HEAD 0
#define AL_START_TAIL 1
#ifdef __cplusplus
}
#endif
#endif /* __ADLIST_H__ */

View File

@ -73,6 +73,7 @@ thread_local aeEventLoop *g_eventLoopThisThread = NULL;
enum class AE_ASYNC_OP
{
PostFunction,
PostCppFunction,
DeleteFileEvent,
};
typedef struct aeCommand
@ -80,7 +81,10 @@ typedef struct aeCommand
AE_ASYNC_OP op;
int fd;
int mask;
aePostFunctionProc *proc;
union {
aePostFunctionProc *proc;
std::function<void()> *pfn;
};
void *clientData;
} aeCommand;
@ -108,6 +112,13 @@ void aeProcessCmd(aeEventLoop *eventLoop, int fd, void *, int )
((aePostFunctionProc*)cmd.proc)(cmd.clientData);
break;
}
case AE_ASYNC_OP::PostCppFunction:
{
std::unique_lock<decltype(g_lock)> ulock(g_lock);
(*cmd.pfn)();
delete cmd.pfn;
}
}
}
}
@ -123,6 +134,16 @@ int aePostFunction(aeEventLoop *eventLoop, aePostFunctionProc *proc, void *arg)
return AE_OK;
}
int aePostFunction(aeEventLoop *eventLoop, std::function<void()> fn)
{
aeCommand cmd;
cmd.op = AE_ASYNC_OP::PostCppFunction;
cmd.pfn = new std::function<void()>(fn);
auto size = write(eventLoop->fdCmdWrite, &cmd, sizeof(cmd));
AE_ASSERT(size == sizeof(cmd));
return AE_OK;
}
aeEventLoop *aeCreateEventLoop(int setsize) {
aeEventLoop *eventLoop;
int i;

View File

@ -33,6 +33,9 @@
#ifndef __AE_H__
#define __AE_H__
#ifdef __cplusplus
#include <functional>
#endif
#include <time.h>
#include "fastlock.h"
@ -126,6 +129,11 @@ typedef struct aeEventLoop {
/* Prototypes */
aeEventLoop *aeCreateEventLoop(int setsize);
int aePostFunction(aeEventLoop *eventLoop, aePostFunctionProc *proc, void *arg);
#ifdef __cplusplus
} // EXTERN C
int aePostFunction(aeEventLoop *eventLoop, std::function<void()> fn);
extern "C" {
#endif
void aeDeleteEventLoop(aeEventLoop *eventLoop);
void aeStop(aeEventLoop *eventLoop);
int aeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,

View File

@ -33,6 +33,10 @@
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define ANET_OK 0
#define ANET_ERR -1
#define ANET_ERR_LEN 256
@ -77,4 +81,8 @@ int anetFormatAddr(char *fmt, size_t fmt_len, char *ip, int port);
int anetFormatPeer(int fd, char *fmt, size_t fmt_len);
int anetFormatSock(int fd, char *fmt, size_t fmt_len);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -3,10 +3,18 @@
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
#ifdef REDIS_TEST
int crc64Test(int argc, char *argv[]);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -35,6 +35,10 @@
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef __DICT_H
#define __DICT_H
@ -186,4 +190,8 @@ extern dictType dictTypeHeapStringCopyKey;
extern dictType dictTypeHeapStrings;
extern dictType dictTypeHeapStringCopyKeyValue;
#ifdef __cplusplus
}
#endif
#endif /* __DICT_H */

View File

@ -36,6 +36,10 @@
#include "config.h"
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
void memrev16(void *p);
void memrev32(void *p);
void memrev64(void *p);
@ -75,4 +79,8 @@ uint64_t intrev64(uint64_t v);
int endianconvTest(int argc, char *argv[]);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -27,11 +27,8 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
extern "C"
{
#include "server.h"
#include "atomicvar.h"
}
#include <sys/uio.h>
#include <math.h>
#include <ctype.h>

View File

@ -33,6 +33,10 @@
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Representation of a radix tree as implemented in this file, that contains
* the strings "foo", "foobar" and "footer" after the insertion of each
* word. When the node represents a key inside the radix tree, we write it
@ -215,4 +219,8 @@ void raxSetDebugMsg(int onoff);
* in a low level way, so this function is exported as well. */
void raxSetData(raxNode *n, void *data);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -1,7 +1,7 @@
extern "C" {
#include "rio.h"
#include "server.h"
}
#include "server.h"
#include <unistd.h>
#include <sys/wait.h>

View File

@ -40,6 +40,10 @@ extern const char *SDS_NOINIT;
#include <stdarg.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef char *sds;
/* Note: sdshdr5 is never used, we just access the flags byte directly.
@ -288,4 +292,8 @@ void sds_free(void *ptr);
int sdsTest(int argc, char *argv[]);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -74,6 +74,10 @@ typedef long long mstime_t; /* millisecond time type. */
#include "endianconv.h"
#include "crc64.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Error codes */
#define C_OK 0
#define C_ERR -1
@ -2307,4 +2311,8 @@ inline int ielFromEventLoop(const aeEventLoop *eventLoop)
#define redisDebugMark() \
printf("-- MARK %s:%d --\n", __FILE__, __LINE__)
#ifdef __cplusplus
}
#endif
#endif

View File

@ -33,6 +33,10 @@
#include <stdint.h>
#include "sds.h"
#ifdef __cplusplus
extern "C" {
#endif
/* The maximum number of characters needed to represent a long double
* as a string (long double has a huge range).
* This should be the size of the buffer given to ld2string */
@ -58,4 +62,8 @@ int pathIsBaseName(char *path);
int utilTest(int argc, char **argv);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@ -86,6 +86,10 @@
#define HAVE_DEFRAG
#endif
#ifdef __cplusplus
extern "C" {
#endif
void *zmalloc(size_t size, enum MALLOC_CLASS mclass);
void *zcalloc(size_t size, enum MALLOC_CLASS mclass);
void *zrealloc(void *ptr, size_t size, enum MALLOC_CLASS mclass);
@ -116,4 +120,8 @@ size_t zmalloc_usable(void *ptr);
int zmalloc_test(int argc, char **argv);
#endif
#ifdef __cplusplus
}
#endif
#endif /* __ZMALLOC_H */