Skip to content

Commit aec88c0

Browse files
authored
Merge pull request #757 from wbenny/master
Add support for Windows Drivers
2 parents 084db3f + 09e06a8 commit aec88c0

File tree

5 files changed

+72
-39
lines changed

5 files changed

+72
-39
lines changed

include/msgpack/object.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,10 @@ typedef struct msgpack_object_kv {
9797
msgpack_object val;
9898
} msgpack_object_kv;
9999

100+
#if !defined(_KERNEL_MODE)
100101
MSGPACK_DLLEXPORT
101102
void msgpack_object_print(FILE* out, msgpack_object o);
103+
#endif
102104

103105
MSGPACK_DLLEXPORT
104106
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o);

include/msgpack/pack_template.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
#error msgpack_pack_append_buffer callback is not defined
3535
#endif
3636

37+
#if defined(_MSC_VER)
38+
# pragma warning(push)
39+
# pragma warning(disable : 4204) /* nonstandard extension used: non-constant aggregate initializer */
40+
#endif
3741

3842
/*
3943
* Integer
@@ -935,3 +939,7 @@ msgpack_pack_inline_func(_timestamp)(msgpack_pack_user x, const msgpack_timestam
935939
#undef msgpack_pack_real_int16
936940
#undef msgpack_pack_real_int32
937941
#undef msgpack_pack_real_int64
942+
943+
#if defined(_MSC_VER)
944+
# pragma warning(pop)
945+
#endif

include/msgpack/sysdep.h

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,14 @@
4242
#endif
4343

4444
#ifdef _WIN32
45-
# define _msgpack_atomic_counter_header <windows.h>
46-
# if !defined(WIN32_LEAN_AND_MEAN)
47-
# define WIN32_LEAN_AND_MEAN
48-
# endif /* WIN32_LEAN_AND_MEAN */
45+
# if defined(_KERNEL_MODE)
46+
# define _msgpack_atomic_counter_header <ntddk.h>
47+
# else
48+
# define _msgpack_atomic_counter_header <windows.h>
49+
# if !defined(WIN32_LEAN_AND_MEAN)
50+
# define WIN32_LEAN_AND_MEAN
51+
# endif /* WIN32_LEAN_AND_MEAN */
52+
# endif
4953
typedef long _msgpack_atomic_counter_t;
5054
# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
5155
# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
@@ -180,11 +184,13 @@
180184

181185

182186
#if !defined(__cplusplus) && defined(_MSC_VER)
183-
# if !defined(FALSE)
184-
# define FALSE (0)
185-
# endif
186-
# if !defined(TRUE)
187-
# define TRUE (!FALSE)
187+
# if !defined(_KERNEL_MODE)
188+
# if !defined(FALSE)
189+
# define FALSE (0)
190+
# endif
191+
# if !defined(TRUE)
192+
# define TRUE (!FALSE)
193+
# endif
188194
# endif
189195
# if _MSC_VER >= 1800
190196
# include <stdbool.h>

include/msgpack/unpack_template.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@
3838
#endif
3939
#endif
4040

41+
#if defined(_KERNEL_MODE)
42+
#undef assert
43+
#define assert NT_ASSERT
44+
#endif
45+
4146
msgpack_unpack_struct_decl(_stack) {
4247
msgpack_unpack_object obj;
4348
size_t count;

src/objectc.c

Lines changed: 42 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,15 @@
77
* (See accompanying file LICENSE_1_0.txt or copy at
88
* http://www.boost.org/LICENSE_1_0.txt)
99
*/
10+
#if defined(_KERNEL_MODE)
11+
# undef _NO_CRT_STDIO_INLINE
12+
# define _NO_CRT_STDIO_INLINE
13+
#endif
14+
1015
#include "msgpack/object.h"
1116
#include "msgpack/pack.h"
1217
#include <ctype.h>
18+
1319
#include <stdio.h>
1420
#include <string.h>
1521

@@ -25,6 +31,10 @@
2531
#include <inttypes.h>
2632
#endif
2733

34+
#if defined(_KERNEL_MODE)
35+
# undef snprintf
36+
# define snprintf _snprintf
37+
#endif
2838

2939
int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
3040
{
@@ -115,6 +125,7 @@ int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
115125
}
116126
}
117127

128+
#if !defined(_KERNEL_MODE)
118129

119130
static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
120131
{
@@ -130,35 +141,6 @@ static void msgpack_object_bin_print(FILE* out, const char *ptr, size_t size)
130141
}
131142
}
132143

133-
static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, const char *ptr, size_t size)
134-
{
135-
size_t i;
136-
char *aux_buffer = buffer;
137-
size_t aux_buffer_size = buffer_size;
138-
int ret;
139-
140-
for (i = 0; i < size; ++i) {
141-
if (ptr[i] == '"') {
142-
ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
143-
aux_buffer = aux_buffer + ret;
144-
aux_buffer_size = aux_buffer_size - ret;
145-
} else if (isprint((unsigned char)ptr[i])) {
146-
if (aux_buffer_size > 0) {
147-
memcpy(aux_buffer, ptr + i, 1);
148-
aux_buffer = aux_buffer + 1;
149-
aux_buffer_size = aux_buffer_size - 1;
150-
}
151-
} else {
152-
ret = snprintf(aux_buffer, aux_buffer_size, "\\x%02x", (unsigned char)ptr[i]);
153-
aux_buffer = aux_buffer + ret;
154-
aux_buffer_size = aux_buffer_size - ret;
155-
}
156-
}
157-
158-
return buffer_size - aux_buffer_size;
159-
}
160-
161-
162144
void msgpack_object_print(FILE* out, msgpack_object o)
163145
{
164146
switch(o.type) {
@@ -270,6 +252,36 @@ void msgpack_object_print(FILE* out, msgpack_object o)
270252
}
271253
}
272254

255+
#endif
256+
257+
static int msgpack_object_bin_print_buffer(char *buffer, size_t buffer_size, const char *ptr, size_t size)
258+
{
259+
size_t i;
260+
char *aux_buffer = buffer;
261+
size_t aux_buffer_size = buffer_size;
262+
int ret;
263+
264+
for (i = 0; i < size; ++i) {
265+
if (ptr[i] == '"') {
266+
ret = snprintf(aux_buffer, aux_buffer_size, "\\\"");
267+
aux_buffer = aux_buffer + ret;
268+
aux_buffer_size = aux_buffer_size - ret;
269+
} else if (isprint((unsigned char)ptr[i])) {
270+
if (aux_buffer_size > 0) {
271+
memcpy(aux_buffer, ptr + i, 1);
272+
aux_buffer = aux_buffer + 1;
273+
aux_buffer_size = aux_buffer_size - 1;
274+
}
275+
} else {
276+
ret = snprintf(aux_buffer, aux_buffer_size, "\\x%02x", (unsigned char)ptr[i]);
277+
aux_buffer = aux_buffer + ret;
278+
aux_buffer_size = aux_buffer_size - ret;
279+
}
280+
}
281+
282+
return (int)(buffer_size - aux_buffer_size);
283+
}
284+
273285
int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object o)
274286
{
275287
char *aux_buffer = buffer;
@@ -465,7 +477,7 @@ int msgpack_object_print_buffer(char *buffer, size_t buffer_size, msgpack_object
465477
#endif
466478
}
467479

468-
return buffer_size - aux_buffer_size;
480+
return (int)(buffer_size - aux_buffer_size);
469481
}
470482

471483

0 commit comments

Comments
 (0)