1 // ----------------------------------------------------------------------------
2 // Copyright (C) 2014
3 //              David Freese, W1HKJ
4 //
5 // This file is part of fldigi
6 //
7 // fldigi is free software; you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation; either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // fldigi is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 // ----------------------------------------------------------------------------
20 
21 #ifndef MINGW_H_
22 #define MINGW_H_
23 
24 #include "config.h"
25 
26 #include <sys/types.h>
27 #include <pthread.h>
28 
29 #undef _WINSOCKAPI_
30 #include <winsock2.h>
31 
32 #undef EADDRINUSE
33 #define EADDRINUSE WSAEADDRINUSE
34 
35 #undef EISCONN
36 #define EISCONN WSAEISCONN
37 
38 #undef EWOULDBLOCK
39 #define EWOULDBLOCK WSAEWOULDBLOCK
40 
41 #undef EINPROGRESS
42 #define EINPROGRESS WSAEINPROGRESS
43 
44 #undef EALREADY
45 #define EALREADY WSAEALREADY
46 
47 //======================================================================
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
53 typedef long suseconds_t;
54 #define hstrerror strerror
55 
56 #ifndef SIGUSR2
57 #  define SIGUSR2 100
58 #endif
59 
60 extern void was_init(void);
61 extern int was_init_state(void);
62 extern WSADATA * was_data(void);
63 
64 /*
65  * simple adaptors
66  */
67 
mingw_mkdir(const char * path,int mode)68 static inline int mingw_mkdir(const char *path, int mode)
69 {
70 	return mkdir(path);
71 }
72 #define mkdir mingw_mkdir
73 
mingw_unlink(const char * pathname)74 static inline int mingw_unlink(const char *pathname)
75 {
76 	/* read-only files cannot be removed */
77 	chmod(pathname, 0666);
78 	return unlink(pathname);
79 }
80 #define unlink mingw_unlink
81 
82 /*
83  * implementations of missing functions
84  */
85 
86 unsigned int sleep (unsigned int seconds);
87 char *mingw_getcwd(char *pointer, int len);
88 #define getcwd mingw_getcwd
89 char *mingw_getenv(const char *name);
90 #define getenv mingw_getenv
91 int mingw_rename(const char*, const char*);
92 #define rename mingw_rename
93 
94 #ifndef SHUT_WR
95 #  define SHUT_WR SD_SEND
96 #endif
97 #ifndef SHUT_RD
98 #  define SHUT_RD SD_RECEIVE
99 #endif
100 #ifndef SHUT_RDWR
101 #  define SHUT_RDWR SD_BOTH
102 #endif
103 
104 int nanosleep (const struct timespec *req, struct timespec *rem);
105 int socketpair(int family, int type, int protocol, SOCKET *sv);
106 
107 /* uname */
108 #define UTSNAME_MAX_ 257
109 struct utsname
110 {
111 	char sysname[UTSNAME_MAX_];
112 	char nodename[UTSNAME_MAX_];
113 	char release[UTSNAME_MAX_];
114 	char version[UTSNAME_MAX_];
115 	char machine[UTSNAME_MAX_];
116 };
117 int uname(struct utsname *name);
118 
119 /* getrusage */
120 #define RUSAGE_SELF     0
121 #define RUSAGE_CHILDREN (-1)
122 struct rusage
123 {
124 	struct timeval ru_utime;
125 	struct timeval ru_stime;
126 };
127 int getrusage(int who, struct rusage *usage);
128 
129 /* fsync, fdatasync */
130 #include <io.h>
131 #define fsync _commit
132 #define fdatasync fsync
133 
134 #ifdef __cplusplus
135 }
136 #endif
137 
138 #endif
139