mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-27 18:30:53 +02:00
Merge pull request #757 from wbenny/master
Add support for Windows Drivers
This commit is contained in:
commit
aec88c06a0
@ -97,8 +97,10 @@ typedef struct msgpack_object_kv {
|
|||||||
msgpack_object val;
|
msgpack_object val;
|
||||||
} msgpack_object_kv;
|
} msgpack_object_kv;
|
||||||
|
|
||||||
|
#if !defined(_KERNEL_MODE)
|
||||||
MSGPACK_DLLEXPORT
|
MSGPACK_DLLEXPORT
|
||||||
void msgpack_object_print(FILE* out, msgpack_object o);
|
void msgpack_object_print(FILE* out, msgpack_object o);
|
||||||
|
#endif
|
||||||
|
|
||||||
MSGPACK_DLLEXPORT
|
MSGPACK_DLLEXPORT
|
||||||
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o);
|
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o);
|
||||||
|
@ -34,6 +34,10 @@
|
|||||||
#error msgpack_pack_append_buffer callback is not defined
|
#error msgpack_pack_append_buffer callback is not defined
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable : 4204) /* nonstandard extension used: non-constant aggregate initializer */
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Integer
|
* Integer
|
||||||
@ -935,3 +939,7 @@ msgpack_pack_inline_func(_timestamp)(msgpack_pack_user x, const msgpack_timestam
|
|||||||
#undef msgpack_pack_real_int16
|
#undef msgpack_pack_real_int16
|
||||||
#undef msgpack_pack_real_int32
|
#undef msgpack_pack_real_int32
|
||||||
#undef msgpack_pack_real_int64
|
#undef msgpack_pack_real_int64
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
@ -42,10 +42,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# define _msgpack_atomic_counter_header <windows.h>
|
# if defined(_KERNEL_MODE)
|
||||||
# if !defined(WIN32_LEAN_AND_MEAN)
|
# define _msgpack_atomic_counter_header <ntddk.h>
|
||||||
# define WIN32_LEAN_AND_MEAN
|
# else
|
||||||
# endif /* WIN32_LEAN_AND_MEAN */
|
# define _msgpack_atomic_counter_header <windows.h>
|
||||||
|
# if !defined(WIN32_LEAN_AND_MEAN)
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
|
# endif /* WIN32_LEAN_AND_MEAN */
|
||||||
|
# endif
|
||||||
typedef long _msgpack_atomic_counter_t;
|
typedef long _msgpack_atomic_counter_t;
|
||||||
# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
|
# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
|
||||||
# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
|
# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
|
||||||
@ -180,11 +184,13 @@
|
|||||||
|
|
||||||
|
|
||||||
#if !defined(__cplusplus) && defined(_MSC_VER)
|
#if !defined(__cplusplus) && defined(_MSC_VER)
|
||||||
# if !defined(FALSE)
|
# if !defined(_KERNEL_MODE)
|
||||||
# define FALSE (0)
|
# if !defined(FALSE)
|
||||||
# endif
|
# define FALSE (0)
|
||||||
# if !defined(TRUE)
|
# endif
|
||||||
# define TRUE (!FALSE)
|
# if !defined(TRUE)
|
||||||
|
# define TRUE (!FALSE)
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# if _MSC_VER >= 1800
|
# if _MSC_VER >= 1800
|
||||||
# include <stdbool.h>
|
# include <stdbool.h>
|
||||||
|
@ -38,6 +38,11 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_KERNEL_MODE)
|
||||||
|
#undef assert
|
||||||
|
#define assert NT_ASSERT
|
||||||
|
#endif
|
||||||
|
|
||||||
msgpack_unpack_struct_decl(_stack) {
|
msgpack_unpack_struct_decl(_stack) {
|
||||||
msgpack_unpack_object obj;
|
msgpack_unpack_object obj;
|
||||||
size_t count;
|
size_t count;
|
||||||
|
@ -7,9 +7,15 @@
|
|||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
* http://www.boost.org/LICENSE_1_0.txt)
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
*/
|
*/
|
||||||
|
#if defined(_KERNEL_MODE)
|
||||||
|
# undef _NO_CRT_STDIO_INLINE
|
||||||
|
# define _NO_CRT_STDIO_INLINE
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "msgpack/object.h"
|
#include "msgpack/object.h"
|
||||||
#include "msgpack/pack.h"
|
#include "msgpack/pack.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@ -25,6 +31,10 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_KERNEL_MODE)
|
||||||
|
# undef snprintf
|
||||||
|
# define snprintf _snprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
|
int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
|
||||||
{
|
{
|
||||||
@ -115,6 +125,7 @@ int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(_KERNEL_MODE)
|
||||||
|
|
||||||
static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
|
static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
|
||||||
{
|
{
|
||||||
@ -130,35 +141,6 @@ static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, const char *ptr, size_t size)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
char *aux_buffer = buffer;
|
|
||||||
size_t aux_buffer_size = buffer_size;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
for (i = 0; i < size; ++i) {
|
|
||||||
if (ptr[i] == '"') {
|
|
||||||
ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
|
|
||||||
aux_buffer = aux_buffer + ret;
|
|
||||||
aux_buffer_size = aux_buffer_size - ret;
|
|
||||||
} else if (isprint((unsigned char)ptr[i])) {
|
|
||||||
if (aux_buffer_size > 0) {
|
|
||||||
memcpy(aux_buffer, ptr + i, 1);
|
|
||||||
aux_buffer = aux_buffer + 1;
|
|
||||||
aux_buffer_size = aux_buffer_size - 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ret = snprintf(aux_buffer, aux_buffer_size, "\\x%02x", (unsigned char)ptr[i]);
|
|
||||||
aux_buffer = aux_buffer + ret;
|
|
||||||
aux_buffer_size = aux_buffer_size - ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buffer_size - aux_buffer_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void msgpack_object_print(FILE* out, msgpack_object o)
|
void msgpack_object_print(FILE* out, msgpack_object o)
|
||||||
{
|
{
|
||||||
switch(o.type) {
|
switch(o.type) {
|
||||||
@ -270,6 +252,36 @@ void msgpack_object_print(FILE* out, msgpack_object o)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, const char *ptr, size_t size)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
char *aux_buffer = buffer;
|
||||||
|
size_t aux_buffer_size = buffer_size;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
for (i = 0; i < size; ++i) {
|
||||||
|
if (ptr[i] == '"') {
|
||||||
|
ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
|
||||||
|
aux_buffer = aux_buffer + ret;
|
||||||
|
aux_buffer_size = aux_buffer_size - ret;
|
||||||
|
} else if (isprint((unsigned char)ptr[i])) {
|
||||||
|
if (aux_buffer_size > 0) {
|
||||||
|
memcpy(aux_buffer, ptr + i, 1);
|
||||||
|
aux_buffer = aux_buffer + 1;
|
||||||
|
aux_buffer_size = aux_buffer_size - 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ret = snprintf(aux_buffer, aux_buffer_size, "\\x%02x", (unsigned char)ptr[i]);
|
||||||
|
aux_buffer = aux_buffer + ret;
|
||||||
|
aux_buffer_size = aux_buffer_size - ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (int)(buffer_size - aux_buffer_size);
|
||||||
|
}
|
||||||
|
|
||||||
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o)
|
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o)
|
||||||
{
|
{
|
||||||
char *aux_buffer = buffer;
|
char *aux_buffer = buffer;
|
||||||
@ -465,7 +477,7 @@ int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return buffer_size - aux_buffer_size;
|
return (int)(buffer_size - aux_buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user