spwin32port.hpp
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
* Copyright 2008 Stephen Liu
* For license terms, see the file COPYING along with this library.
*/
#ifndef __spwin32port_hpp__
#define __spwin32port_hpp__
#pragma warning(disable: 4996)
#include <winsock2.h>
#include <mswsock.h>
#include <windows.h>
#include <io.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef unsigned short uint16_t;
typedef unsigned __int64 uint64_t;
typedef int socklen_t;
#ifndef WSAID_DISCONNECTEX
#define WSAID_DISCONNECTEX {0x7fda2e11,0x8630,0x436f,{0xa0, 0x31, 0xf5, 0x36, 0xa6, 0xee, 0xc1, 0x57}}
typedef BOOL (WINAPI *LPFN_DISCONNECTEX)(SOCKET, LPOVERLAPPED, DWORD, DWORD);
#endif
#if _MSC_VER >= 1400
#define localtime_r(_clock, _result) localtime_s(_result, _clock)
#define gmtime_r(_clock, _result) gmtime_s(_result, _clock)
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#else
#define localtime_r(_clock, _result) ( *(_result) = *localtime( (_clock) ), (_result) )
#define gmtime_r(_clock, _result) ( *(_result) = *gmtime( (_clock) ), (_result) )
#define strcasecmp stricmp
#define strncasecmp strnicmp
#endif
#define snprintf _snprintf
#define pause() Sleep((32767L << 16) + 32767)
#define sleep(x) Sleep(x*1000)
#define sp_close closesocket
#define sp_writev spwin32_writev
#define sp_inet_aton spwin32_inet_aton
#define sp_socketpair spwin32_socketpair
#define sp_initsock spwin32_initsocket
#define sp_gettimeofday spwin32_gettimeofday
#define sp_syslog g_spwin32_syslog
#define sp_openlog spwin32_openlog
#define sp_closelog spwin32_closelog
#define sp_setlogmask spwin32_setlogmask
/* Windows writev() support */
struct iovec
{
u_long iov_len;
char *iov_base;
};
extern int spwin32_writev(SOCKET sock, const struct iovec *vector, DWORD count);
extern int spwin32_inet_aton(const char *c, struct in_addr* addr);
extern int spwin32_socketpair(int d, int type, int protocol, int sv[2]);
/* @return >0 OK, 0 FAIL */
extern DWORD spwin32_getppid(void);
/* @return 0 OK, -1 Fail*/
extern int spwin32_getexefile( DWORD pid, char * path, int size );
extern const char * spwin32_strerror( DWORD lastError, char * errmsg, size_t len );
extern void spwin32_pwd( char * path, int size );
/* @return 0 OK, -1 Fail */
extern int spwin32_initsocket();
extern void spwin32_pause_console();
extern int spwin32_gettimeofday(struct timeval* tv, void * );
/* Windows syslog() support */
#define LOG_EMERG 0
#define LOG_ALERT 1
#define LOG_CRIT 2
#define LOG_ERR 3
#define LOG_WARNING 4
#define LOG_NOTICE 5
#define LOG_INFO 6
#define LOG_DEBUG 7
/*
* Option flags for openlog.
*
* LOG_ODELAY no longer does anything.
* LOG_NDELAY is the inverse of what it used to be.
*/
#define LOG_PID 0x01 /* log the pid with each message */
#define LOG_CONS 0x02 /* log on the console if errors in sending */
#define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
#define LOG_NDELAY 0x08 /* don't delay open */
#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
#define LOG_PERROR 0x20 /* log to stderr as well */
#define LOG_USER (1<<3)
extern void spwin32_syslog (int priority, const char * format, ...);
extern void spwin32_closelog (void);
extern void spwin32_openlog (const char *ident , int option , int facility);
extern int spwin32_setlogmask (int priority);
typedef void ( * spwin32_logger_t ) ( int priority, const char * format, ... );
/* default is spwin32_syslog, write to stdout */
extern spwin32_logger_t g_spwin32_syslog;
#ifdef __cplusplus
}
#endif
#endif