Skip to content

Commit 2807b7c

Browse files
committed
Fix MinGW compilation errors in jerry-ext
mingw also need linkage to ws2_32, try define socket types for unix/win32 for compatibility reason and fixes #4512 JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo luoyonggang@gmail.com
1 parent bf7fa39 commit 2807b7c

File tree

4 files changed

+45
-25
lines changed

4 files changed

+45
-25
lines changed

jerry-ext/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ target_link_libraries(${JERRY_EXT_NAME} jerry-core)
6262

6363
set(JERRY_EXT_PKGCONFIG_LIBS)
6464

65-
if(USING_MSVC AND JERRY_DEBUGGER)
65+
if("${PLATFORM}" STREQUAL "WINDOWS" AND JERRY_DEBUGGER)
6666
target_link_libraries(${JERRY_EXT_NAME} ws2_32)
6767
set(JERRY_EXT_PKGCONFIG_LIBS -lws2_32)
6868
endif()

jerry-ext/debugger/debugger-tcp.c

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
#ifdef _WIN32
2525
#include <BaseTsd.h>
26-
typedef SSIZE_T ssize_t;
2726
#include <WS2tcpip.h>
2827
#include <winsock2.h>
2928

@@ -33,11 +32,17 @@ typedef SSIZE_T ssize_t;
3332
/* On Windows the invalid socket's value of INVALID_SOCKET */
3433
#define JERRYX_SOCKET_INVALID INVALID_SOCKET
3534

36-
/* On Windows sockets have a SOCKET typedef */
37-
typedef SOCKET jerryx_socket;
38-
35+
/*
36+
* On Windows, socket functions have the following signatures:
37+
* int send(SOCKET s, const char *buf, int len, int flags);
38+
* int recv(SOCKET s, char *buf, int len, int flags);
39+
* int setsockopt(SOCKET s, int level, int optname, const char *optval, int optlen);
40+
*/
41+
typedef int jerryx_socket_ssize_t;
42+
typedef SOCKET jerryx_socket_t;
43+
typedef char jerryx_socket_void_t;
44+
typedef int jerryx_socket_size_t;
3945
#else /* !_WIN32 */
40-
4146
#include <arpa/inet.h>
4247
#include <fcntl.h>
4348
#include <sys/socket.h>
@@ -49,8 +54,16 @@ typedef SOCKET jerryx_socket;
4954
/* On *nix the invalid socket has a value of -1 */
5055
#define JERRYX_SOCKET_INVALID (-1)
5156

52-
/* On *nix the sockets are integer identifiers */
53-
typedef int jerryx_socket;
57+
/*
58+
* On *nix, socket functions have the following signatures:
59+
* ssize_t send(int sockfd, const void *buf, size_t len, int flags);
60+
* ssize_t recv(int sockfd, void *buf, size_t len, int flags);
61+
* int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
62+
*/
63+
typedef ssize_t jerryx_socket_ssize_t;
64+
typedef int jerryx_socket_t;
65+
typedef void jerryx_socket_void_t;
66+
typedef size_t jerryx_socket_size_t;
5467
#endif /* _WIN32 */
5568

5669
/**
@@ -59,7 +72,7 @@ typedef int jerryx_socket;
5972
typedef struct
6073
{
6174
jerry_debugger_transport_header_t header; /**< transport header */
62-
jerryx_socket tcp_socket; /**< tcp socket */
75+
jerryx_socket_t tcp_socket; /**< tcp socket */
6376
} jerryx_debugger_transport_tcp_t;
6477

6578
/**
@@ -85,7 +98,7 @@ jerryx_debugger_tcp_get_errno (void)
8598
* Correctly close a single socket.
8699
*/
87100
static inline void
88-
jerryx_debugger_tcp_close_socket (jerryx_socket socket_id) /**< socket to close */
101+
jerryx_debugger_tcp_close_socket (jerryx_socket_t socket_id) /**< socket to close */
89102
{
90103
#ifdef _WIN32
91104
closesocket (socket_id);
@@ -109,7 +122,7 @@ jerryx_debugger_tcp_log_error (int errno_value) /**< error value to log */
109122
char *error_message = NULL;
110123
FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
111124
NULL,
112-
errno_value,
125+
(DWORD) errno_value,
113126
MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
114127
(LPTSTR) &error_message,
115128
0,
@@ -152,6 +165,7 @@ jerryx_debugger_tcp_send (jerry_debugger_transport_header_t *header_p, /**< tcp
152165
JERRYX_ASSERT (jerry_debugger_transport_is_connected ());
153166

154167
jerryx_debugger_transport_tcp_t *tcp_p = (jerryx_debugger_transport_tcp_t *) header_p;
168+
jerryx_socket_size_t remaining_bytes = (jerryx_socket_size_t) message_length;
155169

156170
do
157171
{
@@ -167,7 +181,8 @@ jerryx_debugger_tcp_send (jerry_debugger_transport_header_t *header_p, /**< tcp
167181
}
168182
#endif /* __linux__ */
169183

170-
ssize_t sent_bytes = send (tcp_p->tcp_socket, message_p, message_length, 0);
184+
const jerryx_socket_void_t *message_to_send_p = (const jerryx_socket_void_t *) message_p;
185+
jerryx_socket_ssize_t sent_bytes = send (tcp_p->tcp_socket, message_to_send_p, remaining_bytes, 0);
171186

172187
if (sent_bytes < 0)
173188
{
@@ -184,9 +199,9 @@ jerryx_debugger_tcp_send (jerry_debugger_transport_header_t *header_p, /**< tcp
184199
}
185200

186201
message_p += sent_bytes;
187-
message_length -= (size_t) sent_bytes;
202+
remaining_bytes -= (jerryx_socket_size_t) sent_bytes;
188203
}
189-
while (message_length > 0);
204+
while (remaining_bytes > 0);
190205

191206
return true;
192207
} /* jerryx_debugger_tcp_send */
@@ -200,10 +215,12 @@ jerryx_debugger_tcp_receive (jerry_debugger_transport_header_t *header_p, /**< t
200215
{
201216
jerryx_debugger_transport_tcp_t *tcp_p = (jerryx_debugger_transport_tcp_t *) header_p;
202217

203-
uint8_t *buffer_p = receive_context_p->buffer_p + receive_context_p->received_length;
204-
size_t buffer_size = JERRY_DEBUGGER_TRANSPORT_MAX_BUFFER_SIZE - receive_context_p->received_length;
218+
jerryx_socket_void_t *buffer_p = (jerryx_socket_void_t *) (receive_context_p->buffer_p
219+
+ receive_context_p->received_length);
220+
jerryx_socket_size_t buffer_size = (jerryx_socket_size_t) (JERRY_DEBUGGER_TRANSPORT_MAX_BUFFER_SIZE
221+
- receive_context_p->received_length);
205222

206-
ssize_t length = recv (tcp_p->tcp_socket, buffer_p, buffer_size, 0);
223+
jerryx_socket_ssize_t length = recv (tcp_p->tcp_socket, buffer_p, buffer_size, 0);
207224

208225
if (length <= 0)
209226
{
@@ -241,7 +258,7 @@ jerryx_debugger_tcp_receive (jerry_debugger_transport_header_t *header_p, /**< t
241258
* false if there was an error
242259
*/
243260
static bool
244-
jerryx_debugger_tcp_configure_socket (jerryx_socket server_socket, /** < socket to configure */
261+
jerryx_debugger_tcp_configure_socket (jerryx_socket_t server_socket, /** < socket to configure */
245262
uint16_t port) /** < port number to be used for the socket */
246263
{
247264
struct sockaddr_in addr;
@@ -250,9 +267,12 @@ jerryx_debugger_tcp_configure_socket (jerryx_socket server_socket, /** < socket
250267
addr.sin_port = htons (port);
251268
addr.sin_addr.s_addr = INADDR_ANY;
252269

253-
int opt_value = 1;
270+
const int opt_value = 1;
254271

255-
if (setsockopt (server_socket, SOL_SOCKET, SO_REUSEADDR, &opt_value, sizeof (int)) != 0)
272+
if (setsockopt (server_socket,
273+
SOL_SOCKET, SO_REUSEADDR,
274+
(const jerryx_socket_void_t *) &opt_value,
275+
sizeof (int)) != 0)
256276
{
257277
return false;
258278
}
@@ -289,7 +309,7 @@ jerryx_debugger_tcp_create (uint16_t port) /**< listening port */
289309
}
290310
#endif /* _WIN32*/
291311

292-
jerryx_socket server_socket = socket (AF_INET, SOCK_STREAM, 0);
312+
jerryx_socket_t server_socket = socket (AF_INET, SOCK_STREAM, 0);
293313
if (server_socket == JERRYX_SOCKET_INVALID)
294314
{
295315
jerryx_debugger_tcp_log_error (jerryx_debugger_tcp_get_errno ());
@@ -309,7 +329,7 @@ jerryx_debugger_tcp_create (uint16_t port) /**< listening port */
309329
struct sockaddr_in addr;
310330
socklen_t sin_size = sizeof (struct sockaddr_in);
311331

312-
jerryx_socket tcp_socket = accept (server_socket, (struct sockaddr *) &addr, &sin_size);
332+
jerryx_socket_t tcp_socket = accept (server_socket, (struct sockaddr *) &addr, &sin_size);
313333

314334
jerryx_debugger_tcp_close_socket (server_socket);
315335

@@ -322,7 +342,7 @@ jerryx_debugger_tcp_create (uint16_t port) /**< listening port */
322342
/* Set non-blocking mode. */
323343
#ifdef _WIN32
324344
u_long nonblocking_enabled = 1;
325-
if (ioctlsocket (tcp_socket, FIONBIO, &nonblocking_enabled) != NO_ERROR)
345+
if (ioctlsocket (tcp_socket, (long) FIONBIO, &nonblocking_enabled) != NO_ERROR)
326346
{
327347
jerryx_debugger_tcp_close_socket (tcp_socket);
328348
return false;

jerry-ext/handle-scope/handle-scope-allocator.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ jerryx_handle_scope_get_child (jerryx_handle_scope_t *scope)
126126
{
127127
return (jerryx_handle_scope_t *) jerryx_handle_scope_pool.start;
128128
}
129-
long idx = JERRYX_HANDLE_SCOPE_PRELIST_IDX (scope);
129+
ptrdiff_t idx = JERRYX_HANDLE_SCOPE_PRELIST_IDX (scope);
130130
if (idx < 0)
131131
{
132132
return NULL;

jerry-port/default/default-module.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ jerry_port_normalize_path (const char *in_path_p, /**< input file path */
127127
char *dir_p = (char *) malloc (_MAX_DIR);
128128

129129
_splitpath_s (base_file_p, drive, _MAX_DRIVE, dir_p, _MAX_DIR, NULL, 0, NULL, 0);
130-
const size_t drive_len = strnlen (&drive, _MAX_DRIVE);
130+
const size_t drive_len = strnlen (drive, _MAX_DRIVE);
131131
const size_t dir_len = strnlen (dir_p, _MAX_DIR);
132132
base_drive_dir_len = drive_len + dir_len;
133133
path_p = (char *) malloc (base_drive_dir_len + in_path_len + 1);

0 commit comments

Comments
 (0)