VirtualBox

source: vbox/trunk/src/VBox/Runtime/common/err/RTErrConvertToErrno.cpp@ 19167

Last change on this file since 19167 was 18329, checked in by vboxsync, 16 years ago

iprt/err.h: Added VERR_INTERNAL_ERROR_2 and VERR_INTERNAL_ERROR_3 for debugging purposes (too many VERR_INTERNAL_ERROR returns around). Translate the BSD EDOOFUS to VERR_INTERNAL_ERROR (just for kicks).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 13.3 KB
Line 
1/* $Rev: 18329 $ */
2/** @file
3 * IPRT - Convert iprt status codes to errno.
4 */
5
6/*
7 * Copyright (C) 2007 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27 * Clara, CA 95054 USA or visit http://www.sun.com if you need
28 * additional information or have any questions.
29 */
30
31
32/*******************************************************************************
33* Header Files *
34*******************************************************************************/
35#include <iprt/err.h>
36#include <iprt/assert.h>
37#include <iprt/err.h>
38
39#if defined(RT_OS_DARWIN) && defined(KERNEL)
40# include <sys/errno.h>
41#elif defined(RT_OS_LINUX) && defined(__KERNEL__)
42# include <linux/errno.h>
43#else
44# include <errno.h>
45#endif
46
47
48RTDECL(int) RTErrConvertToErrno(int iErr)
49{
50 /* very fast check for no error. */
51 if (RT_SUCCESS(iErr))
52 return 0;
53
54 /*
55 * Process error codes.
56 *
57 * (Use a switch and not a table since the numbers vary among compilers
58 * and OSes. So we let the compiler switch optimizer handle speed issues.)
59 *
60 * This switch is arranged like the Linux i386 errno.h! It also mirrors the
61 * conversions performed by RTErrConvertFromErrno with a few extra case since
62 * there are far more IPRT status codes than Unix ones.
63 */
64 switch (iErr)
65 {
66#ifdef EPERM
67 case VERR_ACCESS_DENIED: return EPERM;
68#endif
69#ifdef ENOENT
70 case VERR_FILE_NOT_FOUND: return ENOENT;
71#endif
72#ifdef ESRCH
73 case VERR_PROCESS_NOT_FOUND: return ESRCH;
74#endif
75#ifdef EINTR
76 case VERR_INTERRUPTED: return EINTR;
77#endif
78#ifdef EIO
79 case VERR_DEV_IO_ERROR: return EIO;
80#endif
81#ifdef ENXIO
82 //case VERR_DEV_IO_ERROR: return ENXIO;
83#endif
84#ifdef E2BIG
85 case VERR_TOO_MUCH_DATA: return E2BIG;
86#endif
87#ifdef ENOEXEC
88 case VERR_BAD_EXE_FORMAT: return ENOEXEC;
89#endif
90#ifdef EBADF
91 case VERR_INVALID_HANDLE: return EBADF;
92#endif
93#ifdef ECHILD
94 //case VERR_PROCESS_NOT_FOUND: return ECHILD;
95#endif
96#ifdef EAGAIN
97 case VERR_TRY_AGAIN: return EAGAIN;
98#endif
99#ifdef ENOMEM
100 case VERR_NO_MEMORY: return ENOMEM;
101#endif
102#ifdef EACCES
103 //case VERR_ACCESS_DENIED: return EACCES;
104#endif
105#ifdef EFAULT
106 case VERR_INVALID_POINTER: return EFAULT;
107#endif
108#ifdef ENOTBLK
109 //case ENOTBLK: return VERR_;
110#endif
111#ifdef EBUSY
112 //case VERR_DEV_IO_ERROR: return EBUSY;
113#endif
114#ifdef EEXIST
115 case VERR_ALREADY_EXISTS: return EEXIST;
116#endif
117#ifdef EXDEV
118 case VERR_NOT_SAME_DEVICE: return EXDEV;
119#endif
120#ifdef ENODEV
121 //case VERR_NOT_SUPPORTED: return ENODEV;
122#endif
123#ifdef ENOTDIR
124 case VERR_NOT_A_DIRECTORY:
125 case VERR_PATH_NOT_FOUND: return ENOTDIR;
126#endif
127#ifdef EISDIR
128 case VERR_IS_A_DIRECTORY: return EISDIR;
129#endif
130#ifdef EINVAL
131 case VERR_INVALID_PARAMETER: return EINVAL;
132#endif
133#ifdef ENFILE
134 case VERR_TOO_MANY_OPEN_FILES: return ENFILE;
135#endif
136#ifdef EMFILE
137 //case VERR_TOO_MANY_OPEN_FILES: return EMFILE;
138#endif
139#ifdef ENOTTY
140 case VERR_INVALID_FUNCTION: return ENOTTY;
141#endif
142#ifdef ETXTBSY
143 case VERR_SHARING_VIOLATION: return ETXTBSY;
144#endif
145#ifdef EFBIG
146 case VERR_FILE_TOO_BIG: return EFBIG;
147#endif
148#ifdef ENOSPC
149 case VERR_DISK_FULL: return ENOSPC;
150#endif
151#ifdef ESPIPE
152 case VERR_SEEK_ON_DEVICE: return ESPIPE;
153#endif
154#ifdef EROFS
155 case VERR_WRITE_PROTECT: return EROFS;
156#endif
157#ifdef EMLINK
158 //case EMLINK:
159#endif
160#ifdef EPIPE
161 case VERR_BROKEN_PIPE: return EPIPE;
162#endif
163#ifdef EDOM
164 //case VERR_INVALID_PARAMETER: return EDOM;
165#endif
166#ifdef ERANGE
167 //case VERR_INVALID_PARAMETER: return ERANGE;
168#endif
169#ifdef EDEADLK
170 case VERR_DEADLOCK: return EDEADLK;
171#endif
172#ifdef ENAMETOOLONG
173 case VERR_FILENAME_TOO_LONG: return ENAMETOOLONG;
174#endif
175#ifdef ENOLCK
176 case VERR_FILE_LOCK_FAILED: return ENOLCK;
177#endif
178#ifdef ENOSYS
179 case VERR_NOT_SUPPORTED: return ENOSYS;
180#endif
181#ifdef ENOTEMPTY
182 case VERR_DIR_NOT_EMPTY: return ENOTEMPTY;
183#endif
184#ifdef ELOOP
185 case VERR_TOO_MANY_SYMLINKS: return ELOOP;
186#endif
187 //41??
188#ifdef ENOMSG
189 //case ENOMSG 42 /* No message of desired type */
190#endif
191#ifdef EIDRM
192 //case EIDRM 43 /* Identifier removed */
193#endif
194#ifdef ECHRNG
195 //case ECHRNG 44 /* Channel number out of range */
196#endif
197#ifdef EL2NSYNC
198 //case EL2NSYNC 45 /* Level 2 not synchronized */
199#endif
200#ifdef EL3HLT
201 //case EL3HLT 46 /* Level 3 halted */
202#endif
203#ifdef EL3RST
204 //case EL3RST 47 /* Level 3 reset */
205#endif
206#ifdef ELNRNG
207 //case ELNRNG 48 /* Link number out of range */
208#endif
209#ifdef EUNATCH
210 //case EUNATCH 49 /* Protocol driver not attached */
211#endif
212#ifdef ENOCSI
213 //case ENOCSI 50 /* No CSI structure available */
214#endif
215#ifdef EL2HLT
216 //case EL2HLT 51 /* Level 2 halted */
217#endif
218#ifdef EBADE
219 //case EBADE 52 /* Invalid exchange */
220#endif
221#ifdef EBADR
222 //case EBADR 53 /* Invalid request descriptor */
223#endif
224#ifdef EXFULL
225 //case EXFULL 54 /* Exchange full */
226#endif
227#ifdef ENOANO
228 //case ENOANO 55 /* No anode */
229#endif
230#ifdef EBADRQC
231 //case EBADRQC 56 /* Invalid request code */
232#endif
233#ifdef EBADSLT
234 //case EBADSLT 57 /* Invalid slot */
235#endif
236 //case 58:
237#ifdef EBFONT
238 //case EBFONT 59 /* Bad font file format */
239#endif
240#ifdef ENOSTR
241 //case ENOSTR 60 /* Device not a stream */
242#endif
243#ifdef ENODATA
244 case VERR_NO_DATA: return ENODATA;
245#endif
246#ifdef ETIME
247 //case ETIME 62 /* Timer expired */
248#endif
249#ifdef ENOSR
250 //case ENOSR 63 /* Out of streams resources */
251#endif
252#ifdef ENONET
253 case VERR_NET_NO_NETWORK: return ENONET;
254#endif
255#ifdef ENOPKG
256 //case ENOPKG 65 /* Package not installed */
257#endif
258#ifdef EREMOTE
259 //case EREMOTE 66 /* Object is remote */
260#endif
261#ifdef ENOLINK
262 //case ENOLINK 67 /* Link has been severed */
263#endif
264#ifdef EADV
265 //case EADV 68 /* Advertise error */
266#endif
267#ifdef ESRMNT
268 //case ESRMNT 69 /* Srmount error */
269#endif
270#ifdef ECOMM
271 //case ECOMM 70 /* Communication error on send */
272#endif
273#ifdef EPROTO
274 //case EPROTO 71 /* Protocol error */
275#endif
276#ifdef EMULTIHOP
277 //case EMULTIHOP 72 /* Multihop attempted */
278#endif
279#ifdef EDOTDOT
280 //case EDOTDOT 73 /* RFS specific error */
281#endif
282#ifdef EBADMSG
283 //case EBADMSG 74 /* Not a data message */
284#endif
285#ifdef EOVERFLOW
286 //case VERR_TOO_MUCH_DATA: return EOVERFLOW;
287#endif
288#ifdef ENOTUNIQ
289 case VERR_NET_NOT_UNIQUE_NAME: return ENOTUNIQ;
290#endif
291#ifdef EBADFD
292 //case VERR_INVALID_HANDLE: return EBADFD;
293#endif
294#ifdef EREMCHG
295 //case EREMCHG 78 /* Remote address changed */
296#endif
297#ifdef ELIBACC
298 //case ELIBACC 79 /* Can not access a needed shared library */
299#endif
300#ifdef ELIBBAD
301 //case ELIBBAD 80 /* Accessing a corrupted shared library */
302#endif
303#ifdef ELIBSCN
304 //case ELIBSCN 81 /* .lib section in a.out corrupted */
305#endif
306#ifdef ELIBMAX
307 //case ELIBMAX 82 /* Attempting to link in too many shared libraries */
308#endif
309#ifdef ELIBEXEC
310 //case ELIBEXEC 83 /* Cannot exec a shared library directly */
311#endif
312#ifdef EILSEQ
313 case VERR_NO_TRANSLATION: return EILSEQ;
314#endif
315#ifdef ERESTART
316 //case VERR_INTERRUPTED: return ERESTART;
317#endif
318#ifdef ESTRPIPE
319 //case ESTRPIPE 86 /* Streams pipe error */
320#endif
321#ifdef EUSERS
322 //case EUSERS 87 /* Too many users */
323#endif
324#ifdef ENOTSOCK
325 case VERR_NET_NOT_SOCKET: return ENOTSOCK;
326#endif
327#ifdef EDESTADDRREQ
328 case VERR_NET_DEST_ADDRESS_REQUIRED: return EDESTADDRREQ;
329#endif
330#ifdef EMSGSIZE
331 case VERR_NET_MSG_SIZE: return EMSGSIZE;
332#endif
333#ifdef EPROTOTYPE
334 case VERR_NET_PROTOCOL_TYPE: return EPROTOTYPE;
335#endif
336#ifdef ENOPROTOOPT
337 case VERR_NET_PROTOCOL_NOT_AVAILABLE: return ENOPROTOOPT;
338#endif
339#ifdef EPROTONOSUPPORT
340 case VERR_NET_PROTOCOL_NOT_SUPPORTED: return EPROTONOSUPPORT;
341#endif
342#ifdef ESOCKTNOSUPPORT
343 case VERR_NET_SOCKET_TYPE_NOT_SUPPORTED: return ESOCKTNOSUPPORT;
344#endif
345#ifdef EOPNOTSUPP
346 case VERR_NET_OPERATION_NOT_SUPPORTED: return EOPNOTSUPP;
347#endif
348#ifdef EPFNOSUPPORT
349 case VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED: return EPFNOSUPPORT;
350#endif
351#ifdef EAFNOSUPPORT
352 case VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED: return EAFNOSUPPORT;
353#endif
354#ifdef EADDRINUSE
355 case VERR_NET_ADDRESS_IN_USE: return EADDRINUSE;
356#endif
357#ifdef EADDRNOTAVAIL
358 case VERR_NET_ADDRESS_NOT_AVAILABLE: return EADDRNOTAVAIL;
359#endif
360#ifdef ENETDOWN
361 case VERR_NET_DOWN: return ENETDOWN;
362#endif
363#ifdef ENETUNREACH
364 case VERR_NET_UNREACHABLE: return ENETUNREACH;
365#endif
366#ifdef ENETRESET
367 case VERR_NET_CONNECTION_RESET: return ENETRESET;
368#endif
369#ifdef ECONNABORTED
370 case VERR_NET_CONNECTION_ABORTED: return ECONNABORTED;
371#endif
372#ifdef ECONNRESET
373 case VERR_NET_CONNECTION_RESET_BY_PEER: return ECONNRESET;
374#endif
375#ifdef ENOBUFS
376 case VERR_NET_NO_BUFFER_SPACE: return ENOBUFS;
377#endif
378#ifdef EISCONN
379 case VERR_NET_ALREADY_CONNECTED: return EISCONN;
380#endif
381#ifdef ENOTCONN
382 case VERR_NET_NOT_CONNECTED: return ENOTCONN;
383#endif
384#ifdef ESHUTDOWN
385 case VERR_NET_SHUTDOWN: return ESHUTDOWN;
386#endif
387#ifdef ETOOMANYREFS
388 case VERR_NET_TOO_MANY_REFERENCES: return ETOOMANYREFS;
389#endif
390#ifdef ETIMEDOUT
391 case VERR_TIMEOUT: return ETIMEDOUT;
392#endif
393#ifdef ECONNREFUSED
394 case VERR_NET_CONNECTION_REFUSED: return ECONNREFUSED;
395#endif
396#ifdef EHOSTDOWN
397 case VERR_NET_HOST_DOWN: return EHOSTDOWN;
398#endif
399#ifdef EHOSTUNREACH
400 case VERR_NET_HOST_UNREACHABLE: return EHOSTUNREACH;
401#endif
402#ifdef EALREADY
403 case VERR_NET_ALREADY_IN_PROGRESS: return EALREADY;
404#endif
405#ifdef EINPROGRESS
406 case VERR_NET_IN_PROGRESS: return EINPROGRESS;
407#endif
408#ifdef ESTALE
409 //case ESTALE 116 /* Stale NFS file handle */
410#endif
411#ifdef EUCLEAN
412 //case EUCLEAN 117 /* Structure needs cleaning */
413#endif
414#ifdef ENOTNAM
415 //case ENOTNAM 118 /* Not a XENIX named type file */
416#endif
417#ifdef ENAVAIL
418 //case ENAVAIL 119 /* No XENIX semaphores available */
419#endif
420#ifdef EISNAM
421 //case EISNAM 120 /* Is a named type file */
422#endif
423#ifdef EREMOTEIO
424 //case EREMOTEIO 121 /* Remote I/O error */
425#endif
426#ifdef EDQUOT
427 //case VERR_DISK_FULL: return EDQUOT;
428#endif
429#ifdef ENOMEDIUM
430 case VERR_MEDIA_NOT_PRESENT: return ENOMEDIUM;
431#endif
432#ifdef EMEDIUMTYPE
433 case VERR_MEDIA_NOT_RECOGNIZED: return EMEDIUMTYPE;
434#endif
435
436 /* Non-linux */
437
438#ifdef EPROCLIM
439 case VERR_MAX_PROCS_REACHED: return EPROCLIM;
440#endif
441#ifdef EDOOFUS
442 case VERR_INTERNAL_ERROR:
443 case VERR_INTERNAL_ERROR_2:
444 case VERR_INTERNAL_ERROR_3: return EDOOFUS;
445#endif
446
447 default:
448 /* The idea here is that if you hit this, you will have to
449 translate the status code yourself. */
450 AssertMsgFailed(("Unhandled error code %Rrc\n", iErr));
451#ifdef EPROTO
452 return EPROTO;
453#else
454 return EINVAL;
455#endif
456 }
457}
458
459#if defined(RT_OS_LINUX) && defined(IN_MODULE)
460/*
461 * When we build this in the Linux kernel module, we wish to make the
462 * symbols available to other modules as well.
463 */
464# include "the-linux-kernel.h"
465EXPORT_SYMBOL(RTErrConvertToErrno);
466#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette