Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
fcb94a17
Commit
fcb94a17
authored
8 years ago
by
Alexander Alashkin
Committed by
Cesanta Bot
8 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Port Mongoose to WinCE, part I
PUBLISHED_FROM=292d73fa3e90377b1f929ae47ae1073dab5a4089
parent
8ff010ca
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
250 additions
and
43 deletions
+250
-43
mongoose.c
mongoose.c
+83
-43
mongoose.h
mongoose.h
+167
-0
No files found.
mongoose.c
View file @
fcb94a17
...
...
@@ -143,6 +143,8 @@ MG_INTERNAL void mg_handle_put(struct mg_connection *nc, const char *path,
struct
http_message
*
hm
);
#endif
MG_INTERNAL
int
mg_get_errno
();
#endif
/* CS_MONGOOSE_SRC_INTERNAL_H_ */
#ifdef MG_MODULE_LINES
#line 1 "common/cs_dbg.h"
...
...
@@ -1963,7 +1965,7 @@ static int mg_resolve2(const char *host, struct in_addr *ina) {
hints
.
ai_family
=
AF_INET
;
hints
.
ai_socktype
=
SOCK_STREAM
;
if
((
rv
=
getaddrinfo
(
host
,
NULL
,
NULL
,
&
servinfo
))
!=
0
)
{
DBG
((
"getaddrinfo(%s) failed: %s"
,
host
,
strerror
(
errno
)));
DBG
((
"getaddrinfo(%s) failed: %s"
,
host
,
strerror
(
mg_get_errno
()
)));
return
0
;
}
for
(
p
=
servinfo
;
p
!=
NULL
;
p
=
p
->
ai_next
)
{
...
...
@@ -1975,7 +1977,7 @@ static int mg_resolve2(const char *host, struct in_addr *ina) {
#else
struct
hostent
*
he
;
if
((
he
=
gethostbyname
(
host
))
==
NULL
)
{
DBG
((
"gethostbyname(%s) failed: %s"
,
host
,
strerror
(
errno
)));
DBG
((
"gethostbyname(%s) failed: %s"
,
host
,
strerror
(
mg_get_errno
()
)));
}
else
{
memcpy
(
ina
,
he
->
h_addr_list
[
0
],
sizeof
(
*
ina
));
return
1
;
...
...
@@ -2821,8 +2823,11 @@ void mg_set_non_blocking_mode(sock_t sock) {
}
static
int
mg_is_error
(
int
n
)
{
return
n
==
0
||
(
n
<
0
&&
errno
!=
EINTR
&&
errno
!=
EINPROGRESS
&&
errno
!=
EAGAIN
&&
errno
!=
EWOULDBLOCK
int
err
=
mg_get_errno
();
return
n
==
0
||
(
n
<
0
&&
err
!=
EINPROGRESS
&&
err
!=
EWOULDBLOCK
#ifndef WINCE
&&
err
!=
EAGAIN
&&
err
!=
EINTR
#endif
#ifdef _WIN32
&&
WSAGetLastError
()
!=
WSAEINTR
&&
WSAGetLastError
()
!=
WSAEWOULDBLOCK
...
...
@@ -2835,21 +2840,21 @@ void mg_if_connect_tcp(struct mg_connection *nc,
int
rc
,
proto
=
0
;
nc
->
sock
=
socket
(
AF_INET
,
SOCK_STREAM
,
proto
);
if
(
nc
->
sock
==
INVALID_SOCKET
)
{
nc
->
err
=
errno
?
errno
:
1
;
nc
->
err
=
mg_get_errno
()
?
mg_get_errno
()
:
1
;
return
;
}
#if !defined(MG_ESP8266)
mg_set_non_blocking_mode
(
nc
->
sock
);
#endif
rc
=
connect
(
nc
->
sock
,
&
sa
->
sa
,
sizeof
(
sa
->
sin
));
nc
->
err
=
mg_is_error
(
rc
)
?
errno
:
0
;
nc
->
err
=
mg_is_error
(
rc
)
?
mg_get_errno
()
:
0
;
LOG
(
LL_INFO
,
(
"%p sock %d err %d"
,
nc
,
nc
->
sock
,
nc
->
err
));
}
void
mg_if_connect_udp
(
struct
mg_connection
*
nc
)
{
nc
->
sock
=
socket
(
AF_INET
,
SOCK_DGRAM
,
0
);
if
(
nc
->
sock
==
INVALID_SOCKET
)
{
nc
->
err
=
errno
?
errno
:
1
;
nc
->
err
=
mg_get_errno
()
?
mg_get_errno
()
:
1
;
return
;
}
if
(
nc
->
flags
&
MG_F_ENABLE_BROADCAST
)
{
...
...
@@ -2864,7 +2869,7 @@ int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) {
int
proto
=
0
;
sock_t
sock
=
mg_open_listening_socket
(
sa
,
SOCK_STREAM
,
proto
);
if
(
sock
==
INVALID_SOCKET
)
{
return
(
errno
?
errno
:
1
);
return
(
mg_get_errno
()
?
mg_get_errno
()
:
1
);
}
mg_sock_set
(
nc
,
sock
);
return
0
;
...
...
@@ -2872,7 +2877,7 @@ int mg_if_listen_tcp(struct mg_connection *nc, union socket_address *sa) {
int
mg_if_listen_udp
(
struct
mg_connection
*
nc
,
union
socket_address
*
sa
)
{
sock_t
sock
=
mg_open_listening_socket
(
sa
,
SOCK_DGRAM
,
0
);
if
(
sock
==
INVALID_SOCKET
)
return
(
errno
?
errno
:
1
);
if
(
sock
==
INVALID_SOCKET
)
return
(
mg_get_errno
()
?
mg_get_errno
()
:
1
);
mg_sock_set
(
nc
,
sock
);
return
0
;
}
...
...
@@ -2913,7 +2918,7 @@ static int mg_accept_conn(struct mg_connection *lc) {
/* NOTE(lsm): on Windows, sock is always > FD_SETSIZE */
sock_t
sock
=
accept
(
lc
->
sock
,
&
sa
.
sa
,
&
sa_len
);
if
(
sock
==
INVALID_SOCKET
)
{
if
(
mg_is_error
(
-
1
))
DBG
((
"%p: failed to accept: %d"
,
lc
,
errno
));
if
(
mg_is_error
(
-
1
))
DBG
((
"%p: failed to accept: %d"
,
lc
,
mg_get_errno
()
));
return
0
;
}
nc
=
mg_if_accept_new_conn
(
lc
);
...
...
@@ -3000,7 +3005,7 @@ static void mg_write_to_socket(struct mg_connection *nc) {
if
(
nc
->
flags
&
MG_F_UDP
)
{
int
n
=
sendto
(
nc
->
sock
,
io
->
buf
,
io
->
len
,
0
,
&
nc
->
sa
.
sa
,
sizeof
(
nc
->
sa
.
sin
));
DBG
((
"%p %d %d %d %s:%hu"
,
nc
,
nc
->
sock
,
n
,
errno
,
DBG
((
"%p %d %d %d %s:%hu"
,
nc
,
nc
->
sock
,
n
,
mg_get_errno
()
,
inet_ntoa
(
nc
->
sa
.
sin
.
sin_addr
),
ntohs
(
nc
->
sa
.
sin
.
sin_port
)));
if
(
n
>
0
)
{
mbuf_remove
(
io
,
n
);
...
...
@@ -3114,7 +3119,7 @@ static int mg_recvfrom(struct mg_connection *nc, union socket_address *sa,
}
n
=
recvfrom
(
nc
->
sock
,
*
buf
,
MG_UDP_RECV_BUFFER_SIZE
,
0
,
&
sa
->
sa
,
sa_len
);
if
(
n
<=
0
)
{
DBG
((
"%p recvfrom: %s"
,
nc
,
strerror
(
errno
)));
DBG
((
"%p recvfrom: %s"
,
nc
,
strerror
(
mg_get_errno
()
)));
MG_FREE
(
*
buf
);
}
return
n
;
...
...
@@ -3149,7 +3154,7 @@ static int mg_ssl_err(struct mg_connection *conn, int res) {
static
void
mg_ssl_begin
(
struct
mg_connection
*
nc
)
{
int
server_side
=
(
nc
->
listener
!=
NULL
);
int
res
=
server_side
?
SSL_accept
(
nc
->
ssl
)
:
SSL_connect
(
nc
->
ssl
);
DBG
((
"%p %d res %d %d"
,
nc
,
server_side
,
res
,
errno
));
DBG
((
"%p %d res %d %d"
,
nc
,
server_side
,
res
,
mg_get_errno
()
));
if
(
res
==
1
)
{
nc
->
flags
|=
MG_F_SSL_HANDSHAKE_DONE
;
...
...
@@ -5168,8 +5173,8 @@ void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data,
"HTTP/1.1 500 Internal Server Error
\r\n
"
"Content-Type: text/plain
\r\n
"
"Connection: close
\r\n\r\n
"
);
LOG
(
LL_ERROR
,
(
"Failed to open %s: %d
\n
"
,
fus
->
lfn
,
errno
));
mg_printf
(
nc
,
"Failed to open %s: %d
\n
"
,
fus
->
lfn
,
errno
);
LOG
(
LL_ERROR
,
(
"Failed to open %s: %d
\n
"
,
fus
->
lfn
,
mg_get_errno
()
));
mg_printf
(
nc
,
"Failed to open %s: %d
\n
"
,
fus
->
lfn
,
mg_get_errno
()
);
/* Do not close the connection just yet, discard remainder of the data.
* This is because at the time of writing some browsers (Chrome) fail to
* render response before all the data is sent. */
...
...
@@ -5184,11 +5189,11 @@ void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data,
(
struct
file_upload_state
*
)
mp
->
user_data
;
if
(
fus
==
NULL
||
fus
->
fp
==
NULL
)
break
;
if
(
fwrite
(
mp
->
data
.
p
,
1
,
mp
->
data
.
len
,
fus
->
fp
)
!=
mp
->
data
.
len
)
{
LOG
(
LL_ERROR
,
(
"Failed to write to %s: %d, wrote %d"
,
fus
->
lfn
,
errno
,
(
int
)
fus
->
num_recd
));
if
(
errno
==
ENOSPC
LOG
(
LL_ERROR
,
(
"Failed to write to %s: %d, wrote %d"
,
fus
->
lfn
,
mg_get_errno
(),
(
int
)
fus
->
num_recd
));
if
(
mg_get_errno
()
==
ENOSPC
#ifdef SPIFFS_ERR_FULL
||
errno
==
SPIFFS_ERR_FULL
||
mg_get_errno
()
==
SPIFFS_ERR_FULL
#endif
)
{
mg_printf
(
nc
,
...
...
@@ -5203,7 +5208,7 @@ void mg_file_upload_handler(struct mg_connection *nc, int ev, void *ev_data,
"Content-Type: text/plain
\r\n
"
"Connection: close
\r\n\r\n
"
);
mg_printf
(
nc
,
"Failed to write to %s: %d, wrote %d"
,
mp
->
file_name
,
errno
,
(
int
)
fus
->
num_recd
);
mg_get_errno
()
,
(
int
)
fus
->
num_recd
);
}
fclose
(
fus
->
fp
);
remove
(
fus
->
lfn
);
...
...
@@ -5431,7 +5436,8 @@ static void mg_do_ssi_include(struct mg_connection *nc, struct http_message *hm,
}
if
((
fp
=
fopen
(
path
,
"rb"
))
==
NULL
)
{
mg_printf
(
nc
,
"SSI include error: fopen(%s): %s"
,
path
,
strerror
(
errno
));
mg_printf
(
nc
,
"SSI include error: fopen(%s): %s"
,
path
,
strerror
(
mg_get_errno
()));
}
else
{
mg_set_close_on_exec
(
fileno
(
fp
));
if
(
mg_match_prefix
(
opts
->
ssi_pattern
,
strlen
(
opts
->
ssi_pattern
),
path
)
>
...
...
@@ -5452,7 +5458,7 @@ static void do_ssi_exec(struct mg_connection *nc, char *tag) {
if
(
sscanf
(
tag
,
"
\"
%[^
\"
]
\"
"
,
cmd
)
!=
1
)
{
mg_printf
(
nc
,
"Bad SSI #exec: [%s]"
,
tag
);
}
else
if
((
fp
=
popen
(
cmd
,
"r"
))
==
NULL
)
{
mg_printf
(
nc
,
"Cannot SSI #exec: [%s]: %s"
,
cmd
,
strerror
(
errno
));
mg_printf
(
nc
,
"Cannot SSI #exec: [%s]: %s"
,
cmd
,
strerror
(
mg_get_errno
()
));
}
else
{
mg_send_file_data
(
nc
,
fp
);
pclose
(
fp
);
...
...
@@ -5611,8 +5617,8 @@ void mg_http_serve_file(struct mg_connection *nc, struct http_message *hm,
cs_stat_t
st
;
DBG
((
"%p [%s] %.*s"
,
nc
,
path
,
(
int
)
mime_type
.
len
,
mime_type
.
p
));
if
(
mg_stat
(
path
,
&
st
)
!=
0
||
(
pd
->
file
.
fp
=
fopen
(
path
,
"rb"
))
==
NULL
)
{
int
code
;
switch
(
err
no
)
{
int
code
,
err
=
mg_get_errno
()
;
switch
(
err
)
{
case
EACCES
:
code
=
403
;
break
;
...
...
@@ -6128,7 +6134,7 @@ static void mg_scan_directory(struct mg_connection *nc, const char *dir,
}
closedir
(
dirp
);
}
else
{
DBG
((
"%p opendir(%s) -> %d"
,
nc
,
dir
,
errno
));
DBG
((
"%p opendir(%s) -> %d"
,
nc
,
dir
,
mg_get_errno
()
));
}
}
...
...
@@ -6917,7 +6923,6 @@ static void *mg_push_to_stdin(void *arg) {
DBG
((
"%s"
,
"FORWARED EVERYTHING TO CGI"
));
CloseHandle
(
tp
->
hPipe
);
MG_FREE
(
tp
);
_endthread
();
return
NULL
;
}
...
...
@@ -6939,7 +6944,6 @@ static void *mg_pull_from_stdout(void *arg) {
shutdown
(
tp
->
s
,
2
);
// Without this, IO thread may get truncated data
closesocket
(
tp
->
s
);
MG_FREE
(
tp
);
_endthread
();
return
NULL
;
}
...
...
@@ -7701,7 +7705,9 @@ int mg_base64_decode(const unsigned char *s, int len, char *dst) {
#if MG_ENABLE_THREADS
void
*
mg_start_thread
(
void
*
(
*
f
)(
void
*
),
void
*
p
)
{
#ifdef _WIN32
#ifdef WINCE
return
(
void
*
)
CreateThread
(
NULL
,
0
,
(
LPTHREAD_START_ROUTINE
)
f
,
p
,
0
,
NULL
);
#elif defined(_WIN32)
return
(
void
*
)
_beginthread
((
void
(
__cdecl
*
)
(
void
*
)
)
f
,
0
,
p
);
#else
pthread_t
thread_id
=
(
pthread_t
)
0
;
...
...
@@ -7724,7 +7730,7 @@ void *mg_start_thread(void *(*f)(void *), void *p) {
/* Set close-on-exec bit for a given socket. */
void
mg_set_close_on_exec
(
sock_t
sock
)
{
#if
def _WIN32
#if
defined(_WIN32) && !defined(WINCE)
(
void
)
SetHandleInformation
((
HANDLE
)
sock
,
HANDLE_FLAG_INHERIT
,
0
);
#elif defined(__unix__)
fcntl
(
sock
,
F_SETFD
,
FD_CLOEXEC
);
...
...
@@ -7833,7 +7839,7 @@ void mg_hexdump_connection(struct mg_connection *nc, const char *path,
MG_SOCK_STRINGIFY_PORT
|
MG_SOCK_STRINGIFY_REMOTE
);
fprintf
(
fp
,
"%lu %p %s %s %s %d
\n
"
,
(
unsigned
long
)
time
(
NULL
),
(
void
*
)
nc
,
src
,
fp
,
"%lu %p %s %s %s %d
\n
"
,
(
unsigned
long
)
mg_time
(
),
(
void
*
)
nc
,
src
,
ev
==
MG_EV_RECV
?
"<-"
:
ev
==
MG_EV_SEND
?
"->"
:
ev
==
MG_EV_ACCEPT
...
...
@@ -7983,6 +7989,15 @@ int mg_match_prefix(const char *pattern, int pattern_len, const char *str) {
const
struct
mg_str
pstr
=
{
pattern
,
(
size_t
)
pattern_len
};
return
mg_match_prefix_n
(
pstr
,
mg_mk_str
(
str
));
}
MG_INTERNAL
int
mg_get_errno
()
{
#ifndef WINCE
return
errno
;
#else
/* TODO(alashkin): translate error codes? */
return
GetLastError
();
#endif
}
#ifdef MG_MODULE_LINES
#line 1 "mongoose/src/mqtt.c"
#endif
...
...
@@ -8972,20 +8987,24 @@ static int mg_get_ip_address_of_nameserver(char *name, size_t name_len) {
int
i
;
LONG
err
;
HKEY
hKey
,
hSub
;
char
subkey
[
512
],
value
[
128
],
*
key
=
"SYSTEM
\\
ControlSet001
\\
Services
\\
Tcpip
\\
Parameters
\\
Interfaces"
;
wchar_t
subkey
[
512
],
value
[
128
],
*
key
=
L
"SYSTEM
\\
ControlSet001
\\
Services
\\
Tcpip
\\
Parameters
\\
Interfaces"
;
if
((
err
=
RegOpenKeyA
(
HKEY_LOCAL_MACHINE
,
key
,
&
hKey
))
!=
ERROR_SUCCESS
)
{
fprintf
(
stderr
,
"cannot open reg key %s: %ld
\n
"
,
key
,
err
);
if
((
err
=
RegOpenKeyExW
(
HKEY_LOCAL_MACHINE
,
key
,
0
,
KEY_READ
,
&
hKey
))
!=
ERROR_SUCCESS
)
{
fprintf
(
stderr
,
"cannot open reg key %S: %ld
\n
"
,
key
,
err
);
ret
=
-
1
;
}
else
{
for
(
ret
=
-
1
,
i
=
0
;
RegEnumKeyA
(
hKey
,
i
,
subkey
,
sizeof
(
subkey
))
==
ERROR_SUCCESS
;
i
++
)
{
DWORD
type
,
len
=
sizeof
(
value
);
if
(
RegOpenKeyA
(
hKey
,
subkey
,
&
hSub
)
==
ERROR_SUCCESS
&&
(
RegQueryValueExA
(
hSub
,
"NameServer"
,
0
,
&
type
,
(
void
*
)
value
,
for
(
ret
=
-
1
,
i
=
0
;
1
;
i
++
)
{
DWORD
subkey_size
=
sizeof
(
subkey
),
type
,
len
=
sizeof
(
value
);
if
(
RegEnumKeyExW
(
hKey
,
i
,
subkey
,
&
subkey_size
,
NULL
,
NULL
,
NULL
,
NULL
)
!=
ERROR_SUCCESS
)
{
break
;
}
if
(
RegOpenKeyExW
(
hKey
,
subkey
,
0
,
KEY_READ
,
&
hSub
)
==
ERROR_SUCCESS
&&
(
RegQueryValueExW
(
hSub
,
L"NameServer"
,
0
,
&
type
,
(
void
*
)
value
,
&
len
)
==
ERROR_SUCCESS
||
RegQueryValueEx
A
(
hSub
,
"DhcpNameServer"
,
0
,
&
type
,
(
void
*
)
value
,
RegQueryValueEx
W
(
hSub
,
L
"DhcpNameServer"
,
0
,
&
type
,
(
void
*
)
value
,
&
len
)
==
ERROR_SUCCESS
))
{
/*
* See https://github.com/cesanta/mongoose/issues/176
...
...
@@ -8994,14 +9013,14 @@ static int mg_get_ip_address_of_nameserver(char *name, size_t name_len) {
* If it's empty, check the next interface.
* If it's multiple IP addresses, take the first one.
*/
char
*
comma
=
str
chr
(
value
,
','
);
wchar_t
*
comma
=
wcs
chr
(
value
,
','
);
if
(
value
[
0
]
==
'\0'
)
{
continue
;
}
if
(
comma
!=
NULL
)
{
*
comma
=
'\0'
;
}
snprintf
(
name
,
name_len
,
"udp://%
s
:53"
,
value
);
snprintf
(
name
,
name_len
,
"udp://%
S
:53"
,
value
);
ret
=
0
;
RegCloseKey
(
hSub
);
break
;
...
...
@@ -9074,7 +9093,7 @@ int mg_resolve_from_hosts_file(const char *name, union socket_address *usa) {
}
static
void
mg_resolve_async_eh
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
data
)
{
time_t
now
=
time
(
NULL
);
time_t
now
=
(
time_t
)
mg_time
(
);
struct
mg_resolve_async_request
*
req
;
struct
mg_dns_message
*
msg
;
...
...
@@ -12049,3 +12068,24 @@ ssize_t kr_recv(int fd, void *buf, size_t len, int flags) {
}
#endif
/* defined(MG_NET_IF_LWIP) && defined(SSL_KRYPTON) */
#ifdef MG_MODULE_LINES
#line 1 "common/platforms/wince/wince_libc.c"
#endif
/*
* Copyright (c) 2016 Cesanta Software Limited
* All rights reserved
*/
#ifdef WINCE
const
char
*
strerror
(
int
err
)
{
/*
* TODO(alashkin): there is no strerror on WinCE;
* look for similar wce_xxxx function
*/
static
char
buf
[
10
];
snprintf
(
buf
,
sizeof
(
buf
),
"%d"
,
err
);
return
buf
;
}
#endif
This diff is collapsed.
Click to expand it.
mongoose.h
View file @
fcb94a17
...
...
@@ -49,6 +49,7 @@
#define CS_P_MSP432 5
#define CS_P_CC3100 6
#define CS_P_MBED 7
#define CS_P_WINCE 8
/* If not specified explicitly, we guess platform by defines. */
#ifndef CS_PLATFORM
...
...
@@ -60,6 +61,8 @@
#define CS_PLATFORM CS_P_CC3200
#elif defined(__unix__) || defined(__APPLE__)
#define CS_PLATFORM CS_P_UNIX
#elif defined(WINCE)
#define CS_PLATFORM CS_P_WINCE
#elif defined(_WIN32)
#define CS_PLATFORM CS_P_WINDOWS
#elif defined(__MBED__)
...
...
@@ -78,6 +81,7 @@
/* Amalgamated: #include "common/platforms/platform_cc3200.h" */
/* Amalgamated: #include "common/platforms/platform_cc3100.h" */
/* Amalgamated: #include "common/platforms/platform_mbed.h" */
/* Amalgamated: #include "common/platforms/platform_wince.h" */
/* Common stuff */
...
...
@@ -862,6 +866,169 @@ int sl_set_ssl_opts(struct mg_connection *nc);
#endif
/* CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ */
#ifdef MG_MODULE_LINES
#line 1 "common/platforms/platform_wince.h"
#endif
#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
#define CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_
#if CS_PLATFORM == CS_P_WINCE
/*
* MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
* MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
* MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
* MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
* MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
* MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
* MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003)
* MSVC++ 7.0 _MSC_VER == 1300
* MSVC++ 6.0 _MSC_VER == 1200
* MSVC++ 5.0 _MSC_VER == 1100
*/
#pragma warning(disable : 4127)
/* FD_SET() emits warning, disable it */
#pragma warning(disable : 4204)
/* missing c99 support */
#ifndef _WINSOCK_DEPRECATED_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
#endif
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <assert.h>
#include <limits.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#pragma comment(lib, "ws2.lib")
/* Linking with WinCE winsock library */
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#define strdup _strdup
#ifndef EINPROGRESS
#define EINPROGRESS WSAEINPROGRESS
#endif
#ifndef EWOULDBLOCK
#define EWOULDBLOCK WSAEWOULDBLOCK
#endif
#ifndef __func__
#define STRX(x) #x
#define STR(x) STRX(x)
#define __func__ __FILE__ ":" STR(__LINE__)
#endif
#define snprintf _snprintf
#define fileno _fileno
#define vsnprintf _vsnprintf
#define sleep(x) Sleep((x) *1000)
#define to64(x) _atoi64(x)
#define rmdir _rmdir
#if defined(_MSC_VER) && _MSC_VER >= 1400
#define fseeko(x, y, z) _fseeki64((x), (y), (z))
#else
#define fseeko(x, y, z) fseek((x), (y), (z))
#endif
typedef
int
socklen_t
;
#if _MSC_VER >= 1700
#include <stdint.h>
#else
typedef
signed
char
int8_t
;
typedef
unsigned
char
uint8_t
;
typedef
int
int32_t
;
typedef
unsigned
int
uint32_t
;
typedef
short
int16_t
;
typedef
unsigned
short
uint16_t
;
typedef
__int64
int64_t
;
typedef
unsigned
__int64
uint64_t
;
#endif
typedef
SOCKET
sock_t
;
typedef
uint32_t
in_addr_t
;
#ifndef UINT16_MAX
#define UINT16_MAX 65535
#endif
#ifndef UINT32_MAX
#define UINT32_MAX 4294967295
#endif
#ifndef pid_t
#define pid_t HANDLE
#endif
#define INT64_FMT "I64d"
#define INT64_X_FMT "I64x"
/* TODO(alashkin): check if this is correct */
#define SIZE_T_FMT "u"
typedef
struct
_stati64
cs_stat_t
;
#ifndef S_ISDIR
#define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR)
#endif
#ifndef S_ISREG
#define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG)
#endif
#define DIRSEP '\\'
#ifndef va_copy
#ifdef __va_copy
#define va_copy __va_copy
#else
#define va_copy(x, y) (x) = (y)
#endif
#endif
#ifndef MG_MAX_HTTP_REQUEST_SIZE
#define MG_MAX_HTTP_REQUEST_SIZE 8192
#endif
#ifndef MG_MAX_HTTP_SEND_MBUF
#define MG_MAX_HTTP_SEND_MBUF 4096
#endif
#ifndef MG_MAX_HTTP_HEADERS
#define MG_MAX_HTTP_HEADERS 40
#endif
#ifndef CS_ENABLE_STDIO
#define CS_ENABLE_STDIO 1
#endif
typedef
unsigned
int
*
uintptr_t
;
#define abort() DebugBreak();
#ifndef BUFSIZ
#define BUFSIZ 4096
#define ENOMEM ERROR_NOT_ENOUGH_MEMORY
#endif
const
char
*
strerror
();
#define MG_ENABLE_FILESYSTEM 0
/*
* WinCE lacks a lot of used in CGI API functions
* TODO(alaskin): look for wce_xxxx alternatives
*/
#define MG_ENABLE_CGI 0
#endif
/* CS_PLATFORM == CS_P_WINCE */
#endif
/* CS_COMMON_PLATFORMS_PLATFORM_WINCE_H_ */
#ifdef MG_MODULE_LINES
#line 1 "common/cs_time.h"
#endif
/*
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment