1 /*
2   Copyright(C) 2015-2017 Brazil
3 
4   This library is free software; you can redistribute it and/or
5   modify it under the terms of the GNU Lesser General Public
6   License as published by the Free Software Foundation; either
7   version 2.1 of the License, or (at your option) any later version.
8 
9   This library is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   Lesser General Public License for more details.
13 
14   You should have received a copy of the GNU Lesser General Public
15   License along with this library; if not, write to the Free Software
16   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18 module groonga_d.portability;
19 
20 
21 private static import groonga_d.groonga;
22 
23 extern(C):
24 nothrow @nogc:
25 
26 /+
27 #ifdef WIN32
28 	#ifdef __cplusplus
29 		#define grn_memcpy(dest, src, n) ::memcpy_s((dest), (n), (src), (n))
30 	#else
31 		#define grn_memcpy(dest, src, n) memcpy_s((dest), (n), (src), (n))
32 	#endif
33 #else
34 	#ifdef __cplusplus
35 		#define grn_memcpy(dest, src, n) std::memcpy((dest), (src), (n))
36 	#else
37 		#define grn_memcpy(dest, src, n) memcpy((dest), (src), (n))
38 	#endif
39 #endif
40 
41 #ifdef WIN32
42 	#define grn_memmove(dest, src, n) memmove_s((dest), (n), (src), (n))
43 #else
44 	#define grn_memmove(dest, src, n) memmove((dest), (src), (n))
45 #endif
46 
47 enum GRN_ENV_BUFFER_SIZE = 1024;
48 
49 #ifdef WIN32
50 	# define grn_getenv(name, dest, dest_size) char *dest_ = (dest); size_t dest_size_ = (dest_size); if (dest_size_ > 0) { DWORD env_size; env_size = GetEnvironmentVariableA((name), dest_, dest_size_); if (env_size == 0 || env_size > dest_size_) { dest_[0] = '\0'; } }
51 #else
52 	# define grn_getenv(name, dest, dest_size) const char *env_value = getenv((name)); char *dest_ = (dest); size_t dest_size_ = (dest_size); if (dest_size_ > 0) { if (env_value) { strncpy(dest_, env_value, dest_size_ - 1); } else { dest_[0] = '\0'; } }
53 #endif
54 
55 #ifdef WIN32
56 	#define grn_fopen(name, mode) _fsopen((name), (mode), _SH_DENYNO)
57 #else
58 	#define grn_fopen(name, mode) fopen((name), (mode))
59 #endif
60 
61 #ifdef WIN32
62 	#define grn_strdup_raw(string) _strdup((string))
63 #else
64 	#define grn_strdup_raw(string) strdup((string))
65 #endif
66 
67 #ifdef WIN32
68 	#define grn_unlink(filename) _unlink((filename))
69 #else
70 	#define grn_unlink(filename) unlink((filename))
71 #endif
72 
73 #ifdef WIN32
74 	# define grn_strncat(dest, dest_size, src, n) strncat_s((dest), (dest_size), (src), (n))
75 #else
76 	# define grn_strncat(dest, dest_size, src, n) strncat((dest), (src), (n))
77 #endif
78 
79 #ifdef WIN32
80 	# define grn_strcpy(dest, dest_size, src) strcpy_s((dest), (dest_size), (src))
81 #else
82 	# define grn_strcpy(dest, dest_size, src) strcpy((dest), (src))
83 #endif
84 
85 #ifdef WIN32
86 	# define grn_strncpy(dest, dest_size, src, n) strncpy_s((dest), (dest_size), (src), (n))
87 #else
88 	# define grn_strncpy(dest, dest_size, src, n) strncpy((dest), (src), (n))
89 #endif
90 
91 #ifdef WIN32
92 	# define grn_strcat(dest, dest_size, src) strcat_s((dest), (dest_size), (src))
93 #else
94 	# define grn_strcat(dest, dest_size, src) strcat((dest), (src))
95 #endif
96 
97 #ifdef WIN32
98 	# define grn_strcasecmp(string1, string2) _stricmp((string1), (string2))
99 #else
100 	# define grn_strcasecmp(string1, string2) strcasecmp((string1), (string2))
101 #endif
102 
103 #ifdef WIN32
104 	# define grn_strncasecmp(string1, string2, n) _strnicmp((string1), (string2), (n))
105 #else
106 	# define grn_strncasecmp(string1, string2, n) strncasecmp((string1), (string2), (n))
107 #endif
108 
109 #ifdef WIN32
110 	# define grn_snprintf(dest, dest_size, n, ...) do { _snprintf_s((dest), (dest_size), (n) - 1, __VA_ARGS__); } while (groonga_d.groonga.GRN_FALSE)
111 #else
112 	# define grn_snprintf(dest, dest_size, n, ...) snprintf((dest), (n), __VA_ARGS__)
113 #endif
114 
115 #ifdef WIN32
116 	# define grn_vsnprintf(dest, dest_size, format, args) do { vsnprintf((dest), (dest_size), (format), (args)); (dest)[(dest_size) - 1] = '\0'; } while (groonga_d.groonga.GRN_FALSE)
117 #else
118 	# define grn_vsnprintf(dest, dest_size, format, args) vsnprintf((dest), (dest_size), (format), (args))
119 #endif
120 
121 #ifdef WIN32
122 	#define grn_write(fd, buf, count) _write((fd), (buf), (count))
123 #else
124 	#define grn_write(fd, buf, count) write((fd), (buf), (count))
125 #endif
126 
127 #ifdef WIN32
128 	#define grn_read(fd, buf, count) _read((fd), (buf), (count))
129 #else
130 	#define grn_read(fd, buf, count) read((fd), (buf), (count))
131 #endif
132 
133 #ifdef WIN32
134 	# define GRN_OPEN_CREATE_MODE (_S_IREAD | _S_IWRITE)
135 	enum GRN_OPEN_FLAG_BINARY = _O_BINARY;
136 	# define grn_open(fd, pathname, flags) _sopen_s(&(fd), (pathname), (flags), _SH_DENYNO, GRN_OPEN_CREATE_MODE)
137 #else
138 	# define GRN_OPEN_CREATE_MODE (S_IRUSR | S_IWUSR | S_IRGRP)
139 	enum GRN_OPEN_FLAG_BINARY = 0;
140 	# define grn_open(fd, pathname, flags) (fd) = open((pathname), (flags), GRN_OPEN_CREATE_MODE)
141 #endif
142 
143 #ifdef WIN32
144 	#define grn_close(fd) _close((fd))
145 #else
146 	#define grn_close(fd) close((fd))
147 #endif
148 
149 #ifdef WIN32
150 	#define grn_fileno(stream) _fileno((stream))
151 #else
152 	#define grn_fileno(stream) fileno((stream))
153 #endif
154 
155 #ifdef WIN32
156 	#define grn_isatty(stream) _isatty((stream))
157 #else
158 	#define grn_isatty(stream) isatty((stream))
159 #endif
160 
161 #ifdef WIN32
162 	#define grn_getpid() _getpid()
163 #else
164 	#define grn_getpid() getpid()
165 #endif
166 +/