1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /*
3 * This file essentially replicates NSPR's source for the functions that
4 * map system-specific error codes to NSPR error codes. We would use
5 * NSPR's functions, instead of duplicating them, but they're private.
6 * As long as SSL's server session cache code must do platform native I/O
7 * to accomplish its job, and NSPR's error mapping functions remain private,
8 * this code will continue to need to be replicated.
9 *
10 * ***** BEGIN LICENSE BLOCK *****
11 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
12 *
13 * The contents of this file are subject to the Mozilla Public License Version
14 * 1.1 (the "License"); you may not use this file except in compliance with
15 * the License. You may obtain a copy of the License at
16 * http://www.mozilla.org/MPL/
17 *
18 * Software distributed under the License is distributed on an "AS IS" basis,
19 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
20 * for the specific language governing rights and limitations under the
21 * License.
22 *
23 * The Original Code is the Netscape security libraries.
24 *
25 * The Initial Developer of the Original Code is
26 * Netscape Communications Corporation.
27 * Portions created by the Initial Developer are Copyright (C) 1994-2000
28 * the Initial Developer. All Rights Reserved.
29 *
30 * Contributor(s):
31 *
32 * Alternatively, the contents of this file may be used under the terms of
33 * either the GNU General Public License Version 2 or later (the "GPL"), or
34 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
35 * in which case the provisions of the GPL or the LGPL are applicable instead
36 * of those above. If you wish to allow use of your version of this file only
37 * under the terms of either the GPL or the LGPL, and not to allow others to
38 * use your version of this file under the terms of the MPL, indicate your
39 * decision by deleting the provisions above and replace them with the notice
40 * and other provisions required by the GPL or the LGPL. If you do not delete
41 * the provisions above, a recipient may use your version of this file under
42 * the terms of any one of the MPL, the GPL or the LGPL.
43 *
44 * ***** END LICENSE BLOCK ***** */
45 /* $Id: os2_err.c,v 1.4 2004/04/27 23:04:39 gerv%gerv.net Exp $ */
46
47 #include "prerror.h"
48 #include "prlog.h"
49 #include <errno.h>
50
51
52 /*
53 * Based on win32err.c
54 * OS2TODO Stub everything for now to build. HCT
55 */
56
57 /* forward declaration. */
58 void nss_MD_os2_map_default_error(PRInt32 err);
59
nss_MD_os2_map_opendir_error(PRInt32 err)60 void nss_MD_os2_map_opendir_error(PRInt32 err)
61 {
62 nss_MD_os2_map_default_error(err);
63 }
64
nss_MD_os2_map_closedir_error(PRInt32 err)65 void nss_MD_os2_map_closedir_error(PRInt32 err)
66 {
67 nss_MD_os2_map_default_error(err);
68 }
69
nss_MD_os2_map_readdir_error(PRInt32 err)70 void nss_MD_os2_map_readdir_error(PRInt32 err)
71 {
72 nss_MD_os2_map_default_error(err);
73 }
74
nss_MD_os2_map_delete_error(PRInt32 err)75 void nss_MD_os2_map_delete_error(PRInt32 err)
76 {
77 nss_MD_os2_map_default_error(err);
78 }
79
80 /* The error code for stat() is in errno. */
nss_MD_os2_map_stat_error(PRInt32 err)81 void nss_MD_os2_map_stat_error(PRInt32 err)
82 {
83 nss_MD_os2_map_default_error(err);
84 }
85
nss_MD_os2_map_fstat_error(PRInt32 err)86 void nss_MD_os2_map_fstat_error(PRInt32 err)
87 {
88 nss_MD_os2_map_default_error(err);
89 }
90
nss_MD_os2_map_rename_error(PRInt32 err)91 void nss_MD_os2_map_rename_error(PRInt32 err)
92 {
93 nss_MD_os2_map_default_error(err);
94 }
95
96 /* The error code for access() is in errno. */
nss_MD_os2_map_access_error(PRInt32 err)97 void nss_MD_os2_map_access_error(PRInt32 err)
98 {
99 nss_MD_os2_map_default_error(err);
100 }
101
nss_MD_os2_map_mkdir_error(PRInt32 err)102 void nss_MD_os2_map_mkdir_error(PRInt32 err)
103 {
104 nss_MD_os2_map_default_error(err);
105 }
106
nss_MD_os2_map_rmdir_error(PRInt32 err)107 void nss_MD_os2_map_rmdir_error(PRInt32 err)
108 {
109 nss_MD_os2_map_default_error(err);
110 }
111
nss_MD_os2_map_read_error(PRInt32 err)112 void nss_MD_os2_map_read_error(PRInt32 err)
113 {
114 nss_MD_os2_map_default_error(err);
115 }
116
nss_MD_os2_map_transmitfile_error(PRInt32 err)117 void nss_MD_os2_map_transmitfile_error(PRInt32 err)
118 {
119 nss_MD_os2_map_default_error(err);
120 }
121
nss_MD_os2_map_write_error(PRInt32 err)122 void nss_MD_os2_map_write_error(PRInt32 err)
123 {
124 nss_MD_os2_map_default_error(err);
125 }
126
nss_MD_os2_map_lseek_error(PRInt32 err)127 void nss_MD_os2_map_lseek_error(PRInt32 err)
128 {
129 nss_MD_os2_map_default_error(err);
130 }
131
nss_MD_os2_map_fsync_error(PRInt32 err)132 void nss_MD_os2_map_fsync_error(PRInt32 err)
133 {
134 nss_MD_os2_map_default_error(err);
135 }
136
137 /*
138 * For both CloseHandle() and closesocket().
139 */
nss_MD_os2_map_close_error(PRInt32 err)140 void nss_MD_os2_map_close_error(PRInt32 err)
141 {
142 nss_MD_os2_map_default_error(err);
143 }
144
nss_MD_os2_map_socket_error(PRInt32 err)145 void nss_MD_os2_map_socket_error(PRInt32 err)
146 {
147 // PR_ASSERT(err != WSANOTINITIALISED);
148 nss_MD_os2_map_default_error(err);
149 }
150
nss_MD_os2_map_recv_error(PRInt32 err)151 void nss_MD_os2_map_recv_error(PRInt32 err)
152 {
153 nss_MD_os2_map_default_error(err);
154 }
155
nss_MD_os2_map_recvfrom_error(PRInt32 err)156 void nss_MD_os2_map_recvfrom_error(PRInt32 err)
157 {
158 nss_MD_os2_map_default_error(err);
159 }
160
nss_MD_os2_map_send_error(PRInt32 err)161 void nss_MD_os2_map_send_error(PRInt32 err)
162 {
163 PRErrorCode prError;
164 switch (err) {
165 // case WSAEMSGSIZE: prError = PR_INVALID_ARGUMENT_ERROR; break;
166 default: nss_MD_os2_map_default_error(err); return;
167 }
168 PR_SetError(prError, err);
169 }
170
nss_MD_os2_map_sendto_error(PRInt32 err)171 void nss_MD_os2_map_sendto_error(PRInt32 err)
172 {
173 PRErrorCode prError;
174 switch (err) {
175 // case WSAEMSGSIZE: prError = PR_INVALID_ARGUMENT_ERROR; break;
176 default: nss_MD_os2_map_default_error(err); return;
177 }
178 PR_SetError(prError, err);
179 }
180
nss_MD_os2_map_accept_error(PRInt32 err)181 void nss_MD_os2_map_accept_error(PRInt32 err)
182 {
183 PRErrorCode prError;
184 switch (err) {
185 // case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break;
186 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break;
187 default: nss_MD_os2_map_default_error(err); return;
188 }
189 PR_SetError(prError, err);
190 }
191
nss_MD_os2_map_acceptex_error(PRInt32 err)192 void nss_MD_os2_map_acceptex_error(PRInt32 err)
193 {
194 nss_MD_os2_map_default_error(err);
195 }
196
nss_MD_os2_map_connect_error(PRInt32 err)197 void nss_MD_os2_map_connect_error(PRInt32 err)
198 {
199 PRErrorCode prError;
200 switch (err) {
201 // case WSAEWOULDBLOCK: prError = PR_IN_PROGRESS_ERROR; break;
202 // case WSAEINVAL: prError = PR_ALREADY_INITIATED_ERROR; break;
203 // case WSAETIMEDOUT: prError = PR_IO_TIMEOUT_ERROR; break;
204 default: nss_MD_os2_map_default_error(err); return;
205 }
206 PR_SetError(prError, err);
207 }
208
nss_MD_os2_map_bind_error(PRInt32 err)209 void nss_MD_os2_map_bind_error(PRInt32 err)
210 {
211 PRErrorCode prError;
212 switch (err) {
213 // case WSAEINVAL: prError = PR_SOCKET_ADDRESS_IS_BOUND_ERROR; break;
214 default: nss_MD_os2_map_default_error(err); return;
215 }
216 PR_SetError(prError, err);
217 }
218
nss_MD_os2_map_listen_error(PRInt32 err)219 void nss_MD_os2_map_listen_error(PRInt32 err)
220 {
221 PRErrorCode prError;
222 switch (err) {
223 // case WSAEOPNOTSUPP: prError = PR_NOT_TCP_SOCKET_ERROR; break;
224 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break;
225 default: nss_MD_os2_map_default_error(err); return;
226 }
227 PR_SetError(prError, err);
228 }
229
nss_MD_os2_map_shutdown_error(PRInt32 err)230 void nss_MD_os2_map_shutdown_error(PRInt32 err)
231 {
232 nss_MD_os2_map_default_error(err);
233 }
234
nss_MD_os2_map_getsockname_error(PRInt32 err)235 void nss_MD_os2_map_getsockname_error(PRInt32 err)
236 {
237 PRErrorCode prError;
238 switch (err) {
239 // case WSAEINVAL: prError = PR_INVALID_STATE_ERROR; break;
240 default: nss_MD_os2_map_default_error(err); return;
241 }
242 PR_SetError(prError, err);
243 }
244
nss_MD_os2_map_getpeername_error(PRInt32 err)245 void nss_MD_os2_map_getpeername_error(PRInt32 err)
246 {
247 nss_MD_os2_map_default_error(err);
248 }
249
nss_MD_os2_map_getsockopt_error(PRInt32 err)250 void nss_MD_os2_map_getsockopt_error(PRInt32 err)
251 {
252 nss_MD_os2_map_default_error(err);
253 }
254
nss_MD_os2_map_setsockopt_error(PRInt32 err)255 void nss_MD_os2_map_setsockopt_error(PRInt32 err)
256 {
257 nss_MD_os2_map_default_error(err);
258 }
259
nss_MD_os2_map_open_error(PRInt32 err)260 void nss_MD_os2_map_open_error(PRInt32 err)
261 {
262 nss_MD_os2_map_default_error(err);
263 }
264
nss_MD_os2_map_gethostname_error(PRInt32 err)265 void nss_MD_os2_map_gethostname_error(PRInt32 err)
266 {
267 nss_MD_os2_map_default_error(err);
268 }
269
270 /* Win32 select() only works on sockets. So in this
271 ** context, WSAENOTSOCK is equivalent to EBADF on Unix.
272 */
nss_MD_os2_map_select_error(PRInt32 err)273 void nss_MD_os2_map_select_error(PRInt32 err)
274 {
275 PRErrorCode prError;
276 switch (err) {
277 // case WSAENOTSOCK: prError = PR_BAD_DESCRIPTOR_ERROR; break;
278 default: nss_MD_os2_map_default_error(err); return;
279 }
280 PR_SetError(prError, err);
281 }
282
nss_MD_os2_map_lockf_error(PRInt32 err)283 void nss_MD_os2_map_lockf_error(PRInt32 err)
284 {
285 nss_MD_os2_map_default_error(err);
286 }
287
288
289
nss_MD_os2_map_default_error(PRInt32 err)290 void nss_MD_os2_map_default_error(PRInt32 err)
291 {
292 PRErrorCode prError;
293
294 switch (err) {
295 // case ENOENT: prError = PR_FILE_NOT_FOUND_ERROR; break;
296 // case ERROR_ACCESS_DENIED: prError = PR_NO_ACCESS_RIGHTS_ERROR; break;
297 // case ERROR_ALREADY_EXISTS: prError = PR_FILE_EXISTS_ERROR; break;
298 // case ERROR_DISK_CORRUPT: prError = PR_IO_ERROR; break;
299 // case ERROR_DISK_FULL: prError = PR_NO_DEVICE_SPACE_ERROR; break;
300 // case ERROR_DISK_OPERATION_FAILED: prError = PR_IO_ERROR; break;
301 // case ERROR_DRIVE_LOCKED: prError = PR_FILE_IS_LOCKED_ERROR; break;
302 // case ERROR_FILENAME_EXCED_RANGE: prError = PR_NAME_TOO_LONG_ERROR; break;
303 // case ERROR_FILE_CORRUPT: prError = PR_IO_ERROR; break;
304 // case ERROR_FILE_EXISTS: prError = PR_FILE_EXISTS_ERROR; break;
305 // case ERROR_FILE_INVALID: prError = PR_BAD_DESCRIPTOR_ERROR; break;
306 #if ERROR_FILE_NOT_FOUND != ENOENT
307 // case ERROR_FILE_NOT_FOUND: prError = PR_FILE_NOT_FOUND_ERROR; break;
308 #endif
309 default: prError = PR_UNKNOWN_ERROR; break;
310 }
311 PR_SetError(prError, err);
312 }
313
314