]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - ubuntu/vbox/vboxguest/common/err/RTErrConvertFromErrno.c
UBUNTU: ubuntu: vbox -- update to 5.2.0-dfsg-2
[mirror_ubuntu-bionic-kernel.git] / ubuntu / vbox / vboxguest / common / err / RTErrConvertFromErrno.c
1 /* $Id: RTErrConvertFromErrno.cpp $ */
2 /** @file
3 * IPRT - Convert errno to iprt status codes.
4 */
5
6 /*
7 * Copyright (C) 2006-2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27
28 /*********************************************************************************************************************************
29 * Header Files *
30 *********************************************************************************************************************************/
31 #include <iprt/err.h>
32 #include "internal/iprt.h"
33
34 #include <iprt/log.h>
35 #include <iprt/assert.h>
36 #include <iprt/errno.h>
37
38
39 RTDECL(int) RTErrConvertFromErrno(unsigned uNativeCode)
40 {
41 /* very fast check for no error. */
42 if (uNativeCode == 0)
43 return VINF_SUCCESS;
44
45 /*
46 * Process error codes.
47 *
48 * (Use a switch and not a table since the numbers vary among compilers
49 * and OSes. So we let the compiler switch optimizer handle speed issues.)
50 *
51 * This switch is arranged like the Linux i386 errno.h! This switch is mirrored
52 * by RTErrConvertToErrno.
53 */
54 switch (uNativeCode)
55 { /* Linux number */
56 #ifdef EPERM
57 case EPERM: return VERR_ACCESS_DENIED; /* 1 */
58 #endif
59 #ifdef ENOENT
60 case ENOENT: return VERR_FILE_NOT_FOUND;
61 #endif
62 #ifdef ESRCH
63 case ESRCH: return VERR_PROCESS_NOT_FOUND;
64 #endif
65 #ifdef EINTR
66 case EINTR: return VERR_INTERRUPTED;
67 #endif
68 #ifdef EIO
69 case EIO: return VERR_DEV_IO_ERROR;
70 #endif
71 #ifdef ENXIO
72 case ENXIO: return VERR_DEV_IO_ERROR; /** @todo fix this duplicate error */
73 #endif
74 #ifdef E2BIG
75 case E2BIG: return VERR_TOO_MUCH_DATA;
76 #endif
77 #ifdef ENOEXEC
78 case ENOEXEC: return VERR_BAD_EXE_FORMAT;
79 #endif
80 #ifdef EBADF
81 case EBADF: return VERR_INVALID_HANDLE;
82 #endif
83 #ifdef ECHILD
84 case ECHILD: return VERR_PROCESS_NOT_FOUND; /* 10 */ /** @todo fix duplicate error */
85 #endif
86 #ifdef EAGAIN
87 case EAGAIN: return VERR_TRY_AGAIN;
88 #endif
89 #ifdef ENOMEM
90 case ENOMEM: return VERR_NO_MEMORY;
91 #endif
92 #ifdef EACCES
93 case EACCES: return VERR_ACCESS_DENIED; /** @todo fix duplicate error */
94 #endif
95 #ifdef EFAULT
96 case EFAULT: return VERR_INVALID_POINTER;
97 #endif
98 #ifdef ENOTBLK
99 //case ENOTBLK: return VERR_;
100 #endif
101 #ifdef EBUSY
102 case EBUSY: return VERR_RESOURCE_BUSY;
103 #endif
104 #ifdef EEXIST
105 case EEXIST: return VERR_ALREADY_EXISTS;
106 #endif
107 #ifdef EXDEV
108 case EXDEV: return VERR_NOT_SAME_DEVICE;
109 #endif
110 #ifdef ENODEV
111 case ENODEV: return VERR_NOT_SUPPORTED; /** @todo fix duplicate error */
112 #endif
113 #ifdef ENOTDIR
114 case ENOTDIR: return VERR_PATH_NOT_FOUND; /* 20 */
115 #endif
116 #ifdef EISDIR
117 case EISDIR: return VERR_IS_A_DIRECTORY;
118 #endif
119 #ifdef EINVAL
120 case EINVAL: return VERR_INVALID_PARAMETER;
121 #endif
122 #ifdef ENFILE
123 case ENFILE: return VERR_TOO_MANY_OPEN_FILES; /** @todo fix duplicate error */
124 #endif
125 #ifdef EMFILE
126 case EMFILE: return VERR_TOO_MANY_OPEN_FILES;
127 #endif
128 #ifdef ENOTTY
129 case ENOTTY: return VERR_INVALID_FUNCTION;
130 #endif
131 #ifdef ETXTBSY
132 case ETXTBSY: return VERR_SHARING_VIOLATION;
133 #endif
134 #ifdef EFBIG
135 case EFBIG: return VERR_FILE_TOO_BIG;
136 #endif
137 #ifdef ENOSPC
138 case ENOSPC: return VERR_DISK_FULL;
139 #endif
140 #ifdef ESPIPE
141 case ESPIPE: return VERR_SEEK_ON_DEVICE;
142 #endif
143 #ifdef EROFS
144 case EROFS: return VERR_WRITE_PROTECT; /* 30 */
145 #endif
146 #ifdef EMLINK
147 //case EMLINK:
148 #endif
149 #ifdef EPIPE
150 case EPIPE: return VERR_BROKEN_PIPE;
151 #endif
152 #ifdef EDOM
153 case EDOM: return VERR_INVALID_PARAMETER; /** @todo fix duplicate error */
154 #endif
155 #ifdef ERANGE
156 case ERANGE: return VERR_INVALID_PARAMETER; /** @todo fix duplicate error */
157 #endif
158 #ifdef EDEADLK
159 case EDEADLK: return VERR_DEADLOCK;
160 #endif
161 #ifdef ENAMETOOLONG
162 case ENAMETOOLONG: return VERR_FILENAME_TOO_LONG;
163 #endif
164 #ifdef ENOLCK
165 case ENOLCK: return VERR_FILE_LOCK_FAILED;
166 #endif
167 #ifdef ENOSYS /** @todo map this differently on solaris. */
168 case ENOSYS: return VERR_NOT_SUPPORTED;
169 #endif
170 #ifdef ENOTEMPTY
171 case ENOTEMPTY: return VERR_DIR_NOT_EMPTY;
172 #endif
173 #ifdef ELOOP
174 case ELOOP: return VERR_TOO_MANY_SYMLINKS; /* 40 */
175 #endif
176 //41??
177 #ifdef ENOMSG
178 //case ENOMSG 42 /* No message of desired type */
179 #endif
180 #ifdef EIDRM
181 //case EIDRM 43 /* Identifier removed */
182 #endif
183 #ifdef ECHRNG
184 //case ECHRNG 44 /* Channel number out of range */
185 #endif
186 #ifdef EL2NSYNC
187 //case EL2NSYNC 45 /* Level 2 not synchronized */
188 #endif
189 #ifdef EL3HLT
190 //case EL3HLT 46 /* Level 3 halted */
191 #endif
192 #ifdef EL3RST
193 //case EL3RST 47 /* Level 3 reset */
194 #endif
195 #ifdef ELNRNG
196 //case ELNRNG 48 /* Link number out of range */
197 #endif
198 #ifdef EUNATCH
199 //case EUNATCH 49 /* Protocol driver not attached */
200 #endif
201 #ifdef ENOCSI
202 //case ENOCSI 50 /* No CSI structure available */
203 #endif
204 #ifdef EL2HLT
205 //case EL2HLT 51 /* Level 2 halted */
206 #endif
207 #ifdef EBADE
208 //case EBADE 52 /* Invalid exchange */
209 #endif
210 #ifdef EBADR
211 //case EBADR 53 /* Invalid request descriptor */
212 #endif
213 #ifdef EXFULL
214 //case EXFULL 54 /* Exchange full */
215 #endif
216 #ifdef ENOANO
217 //case ENOANO 55 /* No anode */
218 #endif
219 #ifdef EBADRQC
220 //case EBADRQC 56 /* Invalid request code */
221 #endif
222 #ifdef EBADSLT
223 //case EBADSLT 57 /* Invalid slot */
224 #endif
225 //case 58:
226 #ifdef EBFONT
227 //case EBFONT 59 /* Bad font file format */
228 #endif
229 #ifdef ENOSTR
230 //case ENOSTR 60 /* Device not a stream */
231 #endif
232 #ifdef ENODATA
233 case ENODATA: return VERR_NO_DATA;
234 #endif
235 #ifdef ETIME
236 //case ETIME 62 /* Timer expired */
237 #endif
238 #ifdef ENOSR
239 //case ENOSR 63 /* Out of streams resources */
240 #endif
241 #ifdef ENONET
242 case ENONET: return VERR_NET_NO_NETWORK;
243 #endif
244 #ifdef ENOPKG
245 //case ENOPKG 65 /* Package not installed */
246 #endif
247 #ifdef EREMOTE
248 //case EREMOTE 66 /* Object is remote */
249 #endif
250 #ifdef ENOLINK
251 //case ENOLINK 67 /* Link has been severed */
252 #endif
253 #ifdef EADV
254 //case EADV 68 /* Advertise error */
255 #endif
256 #ifdef ESRMNT
257 //case ESRMNT 69 /* Srmount error */
258 #endif
259 #ifdef ECOMM
260 //case ECOMM 70 /* Communication error on send */
261 #endif
262 #ifdef EPROTO
263 case EPROTO: return VERR_NET_PROTOCOL_ERROR;
264 #endif
265 #ifdef EMULTIHOP
266 //case EMULTIHOP 72 /* Multihop attempted */
267 #endif
268 #ifdef EDOTDOT
269 //case EDOTDOT 73 /* RFS specific error */
270 #endif
271 #ifdef EBADMSG
272 //case EBADMSG 74 /* Not a data message */
273 #endif
274 #ifdef EOVERFLOW
275 case EOVERFLOW: return VERR_TOO_MUCH_DATA; /** @todo fix duplicate error */
276 #endif
277 #ifdef ENOTUNIQ
278 case ENOTUNIQ: return VERR_NET_NOT_UNIQUE_NAME;
279 #endif
280 #ifdef EBADFD
281 case EBADFD: return VERR_INVALID_HANDLE; /** @todo fix duplicate error? */
282 #endif
283 #ifdef EREMCHG
284 //case EREMCHG 78 /* Remote address changed */
285 #endif
286 #ifdef ELIBACC
287 //case ELIBACC 79 /* Can not access a needed shared library */
288 #endif
289 #ifdef ELIBBAD
290 //case ELIBBAD 80 /* Accessing a corrupted shared library */
291 #endif
292 #ifdef ELIBSCN
293 //case ELIBSCN 81 /* .lib section in a.out corrupted */
294 #endif
295 #ifdef ELIBMAX
296 //case ELIBMAX 82 /* Attempting to link in too many shared libraries */
297 #endif
298 #ifdef ELIBEXEC
299 //case ELIBEXEC 83 /* Cannot exec a shared library directly */
300 #endif
301 #ifdef EILSEQ
302 case EILSEQ: return VERR_NO_TRANSLATION;
303 #endif
304 #ifdef ERESTART
305 case ERESTART: return VERR_INTERRUPTED;/** @todo fix duplicate error?*/
306 #endif
307 #ifdef ESTRPIPE
308 //case ESTRPIPE 86 /* Streams pipe error */
309 #endif
310 #ifdef EUSERS
311 //case EUSERS 87 /* Too many users */
312 #endif
313 #ifdef ENOTSOCK
314 case ENOTSOCK: return VERR_NET_NOT_SOCKET;
315 #endif
316 #ifdef EDESTADDRREQ
317 case EDESTADDRREQ: return VERR_NET_DEST_ADDRESS_REQUIRED;
318 #endif
319 #ifdef EMSGSIZE
320 case EMSGSIZE: return VERR_NET_MSG_SIZE;
321 #endif
322 #ifdef EPROTOTYPE
323 case EPROTOTYPE: return VERR_NET_PROTOCOL_TYPE;
324 #endif
325 #ifdef ENOPROTOOPT
326 case ENOPROTOOPT: return VERR_NET_PROTOCOL_NOT_AVAILABLE;
327 #endif
328 #ifdef EPROTONOSUPPORT
329 case EPROTONOSUPPORT: return VERR_NET_PROTOCOL_NOT_SUPPORTED;
330 #endif
331 #ifdef ESOCKTNOSUPPORT
332 case ESOCKTNOSUPPORT: return VERR_NET_SOCKET_TYPE_NOT_SUPPORTED;
333 #endif
334 #ifdef EOPNOTSUPP /** @todo map this differently on solaris. */
335 case EOPNOTSUPP: return VERR_NET_OPERATION_NOT_SUPPORTED;
336 #endif
337 #ifdef EPFNOSUPPORT
338 case EPFNOSUPPORT: return VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED;
339 #endif
340 #ifdef EAFNOSUPPORT
341 case EAFNOSUPPORT: return VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED;
342 #endif
343 #ifdef EADDRINUSE
344 case EADDRINUSE: return VERR_NET_ADDRESS_IN_USE;
345 #endif
346 #ifdef EADDRNOTAVAIL
347 case EADDRNOTAVAIL: return VERR_NET_ADDRESS_NOT_AVAILABLE;
348 #endif
349 #ifdef ENETDOWN
350 case ENETDOWN: return VERR_NET_DOWN;
351 #endif
352 #ifdef ENETUNREACH
353 case ENETUNREACH: return VERR_NET_UNREACHABLE;
354 #endif
355 #ifdef ENETRESET
356 case ENETRESET: return VERR_NET_CONNECTION_RESET;
357 #endif
358 #ifdef ECONNABORTED
359 case ECONNABORTED: return VERR_NET_CONNECTION_ABORTED;
360 #endif
361 #ifdef ECONNRESET
362 case ECONNRESET: return VERR_NET_CONNECTION_RESET_BY_PEER;
363 #endif
364 #ifdef ENOBUFS
365 case ENOBUFS: return VERR_NET_NO_BUFFER_SPACE;
366 #endif
367 #ifdef EISCONN
368 case EISCONN: return VERR_NET_ALREADY_CONNECTED;
369 #endif
370 #ifdef ENOTCONN
371 case ENOTCONN: return VERR_NET_NOT_CONNECTED;
372 #endif
373 #ifdef ESHUTDOWN
374 case ESHUTDOWN: return VERR_NET_SHUTDOWN;
375 #endif
376 #ifdef ETOOMANYREFS
377 case ETOOMANYREFS: return VERR_NET_TOO_MANY_REFERENCES;
378 #endif
379 #ifdef ETIMEDOUT
380 case ETIMEDOUT: return VERR_TIMEOUT;
381 #endif
382 #ifdef ECONNREFUSED
383 case ECONNREFUSED: return VERR_NET_CONNECTION_REFUSED;
384 #endif
385 #ifdef EHOSTDOWN
386 case EHOSTDOWN: return VERR_NET_HOST_DOWN;
387 #endif
388 #ifdef EHOSTUNREACH
389 case EHOSTUNREACH: return VERR_NET_HOST_UNREACHABLE;
390 #endif
391 #ifdef EALREADY
392 case EALREADY: return VERR_NET_ALREADY_IN_PROGRESS;
393 #endif
394 #ifdef EINPROGRESS
395 case EINPROGRESS: return VERR_NET_IN_PROGRESS;
396 #endif
397 #ifdef ESTALE
398 //case ESTALE 116 /* Stale NFS file handle */
399 #endif
400 #ifdef EUCLEAN
401 //case EUCLEAN 117 /* Structure needs cleaning */
402 #endif
403 #ifdef ENOTNAM
404 //case ENOTNAM 118 /* Not a XENIX named type file */
405 #endif
406 #ifdef ENAVAIL
407 //case ENAVAIL 119 /* No XENIX semaphores available */
408 #endif
409 #ifdef EISNAM
410 //case EISNAM 120 /* Is a named type file */
411 #endif
412 #ifdef EREMOTEIO
413 //case EREMOTEIO 121 /* Remote I/O error */
414 #endif
415 #ifdef EDQUOT
416 case EDQUOT: return VERR_DISK_FULL; /** @todo fix duplicate error */
417 #endif
418 #ifdef ENOMEDIUM
419 case ENOMEDIUM: return VERR_MEDIA_NOT_PRESENT;
420 #endif
421 #ifdef EMEDIUMTYPE
422 case EMEDIUMTYPE: return VERR_MEDIA_NOT_RECOGNIZED;
423 #endif
424 #if defined(EWOULDBLOCK) && (EWOULDBLOCK != EAGAIN)
425 case EWOULDBLOCK: return VERR_TRY_AGAIN;
426 #endif
427
428 /* Non-linux */
429
430 #ifdef EPROCLIM
431 case EPROCLIM: return VERR_MAX_PROCS_REACHED;
432 #endif
433 #ifdef EDOOFUS
434 # if EDOOFUS != EINVAL
435 case EDOOFUS: return VERR_INTERNAL_ERROR;
436 # endif
437 #endif
438 #ifdef ENOTSUP
439 # ifndef EOPNOTSUPP
440 case ENOTSUP: return VERR_NOT_SUPPORTED;
441 # else
442 # if ENOTSUP != EOPNOTSUPP
443 case ENOTSUP: return VERR_NOT_SUPPORTED;
444 # endif
445 # endif
446 #endif
447 default:
448 AssertLogRelMsgFailed(("Unhandled error code %d\n", uNativeCode));
449 return VERR_UNRESOLVED_ERROR;
450 }
451 }
452 RT_EXPORT_SYMBOL(RTErrConvertFromErrno);
453