VirtualBox

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

Last change on this file since 16760 was 14262, checked in by vboxsync, 16 years ago

RTErrConvertToErrno: No LogRel here!

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 12.8 KB
Line 
1/* $Rev: 14262 $ */
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 * Try to reverse the behaviour of RTErrConvertFromErrno as far
58 * as possible.
59 *
60 * @note I am very impressed by the length of some of these
61 * error codes - we have obviously learnt something from
62 * Unix's failings :)
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_PATH_NOT_FOUND: return ENOENT;
125#endif
126#ifdef EISDIR
127 case VERR_IS_A_DIRECTORY: return EISDIR;
128#endif
129#ifdef EINVAL
130 case VERR_INVALID_PARAMETER: return EINVAL;
131#endif
132#ifdef ENFILE
133 case VERR_TOO_MANY_OPEN_FILES: return ENFILE;
134#endif
135#ifdef EMFILE
136 //case VERR_TOO_MANY_OPEN_FILES: return EMFILE;
137#endif
138#ifdef ENOTTY
139 case VERR_INVALID_FUNCTION: return ENOTTY;
140#endif
141#ifdef ETXTBSY
142 case VERR_SHARING_VIOLATION: return ETXTBSY;
143#endif
144#ifdef EFBIG
145 case VERR_FILE_TOO_BIG: return EFBIG;
146#endif
147#ifdef ENOSPC
148 case VERR_DISK_FULL: return ENOSPC;
149#endif
150#ifdef ESPIPE
151 case VERR_SEEK_ON_DEVICE: return ESPIPE;
152#endif
153#ifdef EROFS
154 case VERR_WRITE_PROTECT: return EROFS;
155#endif
156#ifdef EMLINK
157 //case EMLINK:
158#endif
159#ifdef EPIPE
160 case VERR_BROKEN_PIPE: return EPIPE;
161#endif
162#ifdef EDOM
163 //case VERR_INVALID_PARAMETER: return EDOM;
164#endif
165#ifdef ERANGE
166 //case VERR_INVALID_PARAMETER: return ERANGE;
167#endif
168#ifdef EDEADLK
169 case VERR_DEADLOCK: return EDEADLK;
170#endif
171#ifdef ENAMETOOLONG
172 case VERR_FILENAME_TOO_LONG: return ENAMETOOLONG;
173#endif
174#ifdef ENOLCK
175 case VERR_FILE_LOCK_FAILED: return ENOLCK;
176#endif
177#ifdef ENOSYS
178 case VERR_NOT_SUPPORTED: return ENOSYS;
179#endif
180#ifdef ENOTEMPTY
181 case VERR_DIR_NOT_EMPTY: return ENOTEMPTY;
182#endif
183#ifdef ELOOP
184 case VERR_TOO_MANY_SYMLINKS: return ELOOP;
185#endif
186 //41??
187#ifdef ENOMSG
188 //case ENOMSG 42 /* No message of desired type */
189#endif
190#ifdef EIDRM
191 //case EIDRM 43 /* Identifier removed */
192#endif
193#ifdef ECHRNG
194 //case ECHRNG 44 /* Channel number out of range */
195#endif
196#ifdef EL2NSYNC
197 //case EL2NSYNC 45 /* Level 2 not synchronized */
198#endif
199#ifdef EL3HLT
200 //case EL3HLT 46 /* Level 3 halted */
201#endif
202#ifdef EL3RST
203 //case EL3RST 47 /* Level 3 reset */
204#endif
205#ifdef ELNRNG
206 //case ELNRNG 48 /* Link number out of range */
207#endif
208#ifdef EUNATCH
209 //case EUNATCH 49 /* Protocol driver not attached */
210#endif
211#ifdef ENOCSI
212 //case ENOCSI 50 /* No CSI structure available */
213#endif
214#ifdef EL2HLT
215 //case EL2HLT 51 /* Level 2 halted */
216#endif
217#ifdef EBADE
218 //case EBADE 52 /* Invalid exchange */
219#endif
220#ifdef EBADR
221 //case EBADR 53 /* Invalid request descriptor */
222#endif
223#ifdef EXFULL
224 //case EXFULL 54 /* Exchange full */
225#endif
226#ifdef ENOANO
227 //case ENOANO 55 /* No anode */
228#endif
229#ifdef EBADRQC
230 //case EBADRQC 56 /* Invalid request code */
231#endif
232#ifdef EBADSLT
233 //case EBADSLT 57 /* Invalid slot */
234#endif
235 //case 58:
236#ifdef EBFONT
237 //case EBFONT 59 /* Bad font file format */
238#endif
239#ifdef ENOSTR
240 //case ENOSTR 60 /* Device not a stream */
241#endif
242#ifdef ENODATA
243 case VERR_NO_DATA: return ENODATA;
244#endif
245#ifdef ETIME
246 //case ETIME 62 /* Timer expired */
247#endif
248#ifdef ENOSR
249 //case ENOSR 63 /* Out of streams resources */
250#endif
251#ifdef ENONET
252 case VERR_NET_NO_NETWORK: return ENONET;
253#endif
254#ifdef ENOPKG
255 //case ENOPKG 65 /* Package not installed */
256#endif
257#ifdef EREMOTE
258 //case EREMOTE 66 /* Object is remote */
259#endif
260#ifdef ENOLINK
261 //case ENOLINK 67 /* Link has been severed */
262#endif
263#ifdef EADV
264 //case EADV 68 /* Advertise error */
265#endif
266#ifdef ESRMNT
267 //case ESRMNT 69 /* Srmount error */
268#endif
269#ifdef ECOMM
270 //case ECOMM 70 /* Communication error on send */
271#endif
272#ifdef EPROTO
273 //case EPROTO 71 /* Protocol error */
274#endif
275#ifdef EMULTIHOP
276 //case EMULTIHOP 72 /* Multihop attempted */
277#endif
278#ifdef EDOTDOT
279 //case EDOTDOT 73 /* RFS specific error */
280#endif
281#ifdef EBADMSG
282 //case EBADMSG 74 /* Not a data message */
283#endif
284#ifdef EOVERFLOW
285 //case VERR_TOO_MUCH_DATA: return EOVERFLOW;
286#endif
287#ifdef ENOTUNIQ
288 case VERR_NET_NOT_UNIQUE_NAME: return ENOTUNIQ;
289#endif
290#ifdef EBADFD
291 //case VERR_INVALID_HANDLE: return EBADFD;
292#endif
293#ifdef EREMCHG
294 //case EREMCHG 78 /* Remote address changed */
295#endif
296#ifdef ELIBACC
297 //case ELIBACC 79 /* Can not access a needed shared library */
298#endif
299#ifdef ELIBBAD
300 //case ELIBBAD 80 /* Accessing a corrupted shared library */
301#endif
302#ifdef ELIBSCN
303 //case ELIBSCN 81 /* .lib section in a.out corrupted */
304#endif
305#ifdef ELIBMAX
306 //case ELIBMAX 82 /* Attempting to link in too many shared libraries */
307#endif
308#ifdef ELIBEXEC
309 //case ELIBEXEC 83 /* Cannot exec a shared library directly */
310#endif
311#ifdef EILSEQ
312 case VERR_NO_TRANSLATION: return EILSEQ;
313#endif
314#ifdef ERESTART
315 //case VERR_INTERRUPTED: return ERESTART;
316#endif
317#ifdef ESTRPIPE
318 //case ESTRPIPE 86 /* Streams pipe error */
319#endif
320#ifdef EUSERS
321 //case EUSERS 87 /* Too many users */
322#endif
323#ifdef ENOTSOCK
324 case VERR_NET_NOT_SOCKET: return ENOTSOCK;
325#endif
326#ifdef EDESTADDRREQ
327 case VERR_NET_DEST_ADDRESS_REQUIRED: return EDESTADDRREQ;
328#endif
329#ifdef EMSGSIZE
330 case VERR_NET_MSG_SIZE: return EMSGSIZE;
331#endif
332#ifdef EPROTOTYPE
333 case VERR_NET_PROTOCOL_TYPE: return EPROTOTYPE;
334#endif
335#ifdef ENOPROTOOPT
336 case VERR_NET_PROTOCOL_NOT_AVAILABLE: return ENOPROTOOPT;
337#endif
338#ifdef EPROTONOSUPPORT
339 case VERR_NET_PROTOCOL_NOT_SUPPORTED: return EPROTONOSUPPORT;
340#endif
341#ifdef ESOCKTNOSUPPORT
342 case VERR_NET_SOCKET_TYPE_NOT_SUPPORTED: return ESOCKTNOSUPPORT;
343#endif
344#ifdef EOPNOTSUPP
345 case VERR_NET_OPERATION_NOT_SUPPORTED: return EOPNOTSUPP;
346#endif
347#ifdef EPFNOSUPPORT
348 case VERR_NET_PROTOCOL_FAMILY_NOT_SUPPORTED: return EPFNOSUPPORT;
349#endif
350#ifdef EAFNOSUPPORT
351 case VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED: return EAFNOSUPPORT;
352#endif
353#ifdef EADDRINUSE
354 case VERR_NET_ADDRESS_IN_USE: return EADDRINUSE;
355#endif
356#ifdef EADDRNOTAVAIL
357 case VERR_NET_ADDRESS_NOT_AVAILABLE: return EADDRNOTAVAIL;
358#endif
359#ifdef ENETDOWN
360 case VERR_NET_DOWN: return ENETDOWN;
361#endif
362#ifdef ENETUNREACH
363 case VERR_NET_UNREACHABLE: return ENETUNREACH;
364#endif
365#ifdef ENETRESET
366 case VERR_NET_CONNECTION_RESET: return ENETRESET;
367#endif
368#ifdef ECONNABORTED
369 case VERR_NET_CONNECTION_ABORTED: return ECONNABORTED;
370#endif
371#ifdef ECONNRESET
372 case VERR_NET_CONNECTION_RESET_BY_PEER: return ECONNRESET;
373#endif
374#ifdef ENOBUFS
375 case VERR_NET_NO_BUFFER_SPACE: return ENOBUFS;
376#endif
377#ifdef EISCONN
378 case VERR_NET_ALREADY_CONNECTED: return EISCONN;
379#endif
380#ifdef ENOTCONN
381 case VERR_NET_NOT_CONNECTED: return ENOTCONN;
382#endif
383#ifdef ESHUTDOWN
384 case VERR_NET_SHUTDOWN: return ESHUTDOWN;
385#endif
386#ifdef ETOOMANYREFS
387 case VERR_NET_TOO_MANY_REFERENCES: return ETOOMANYREFS;
388#endif
389#ifdef ETIMEDOUT
390 case VERR_TIMEOUT: return ETIMEDOUT;
391#endif
392#ifdef ECONNREFUSED
393 case VERR_NET_CONNECTION_REFUSED: return ECONNREFUSED;
394#endif
395#ifdef EHOSTDOWN
396 case VERR_NET_HOST_DOWN: return EHOSTDOWN;
397#endif
398#ifdef EHOSTUNREACH
399 case VERR_NET_HOST_UNREACHABLE: return EHOSTUNREACH;
400#endif
401#ifdef EALREADY
402 case VERR_NET_ALREADY_IN_PROGRESS: return EALREADY;
403#endif
404#ifdef EINPROGRESS
405 case VERR_NET_IN_PROGRESS: return EINPROGRESS;
406#endif
407#ifdef ESTALE
408 //case ESTALE 116 /* Stale NFS file handle */
409#endif
410#ifdef EUCLEAN
411 //case EUCLEAN 117 /* Structure needs cleaning */
412#endif
413#ifdef ENOTNAM
414 //case ENOTNAM 118 /* Not a XENIX named type file */
415#endif
416#ifdef ENAVAIL
417 //case ENAVAIL 119 /* No XENIX semaphores available */
418#endif
419#ifdef EISNAM
420 //case EISNAM 120 /* Is a named type file */
421#endif
422#ifdef EREMOTEIO
423 //case EREMOTEIO 121 /* Remote I/O error */
424#endif
425#ifdef EDQUOT
426 //case VERR_DISK_FULL: return EDQUOT;
427#endif
428#ifdef ENOMEDIUM
429 case VERR_MEDIA_NOT_PRESENT: return ENOMEDIUM;
430#endif
431#ifdef EMEDIUMTYPE
432 case VERR_MEDIA_NOT_RECOGNIZED: return EMEDIUMTYPE;
433#endif
434
435 /* Non-linux */
436
437#ifdef EPROCLIM
438 case VERR_MAX_PROCS_REACHED: return EPROCLIM;
439#endif
440
441 default:
442 AssertMsgFailed(("Unhandled error code %Rrc\n", iErr));
443 return EPROTO;
444 }
445}
446
447#if defined(RT_OS_LINUX) && defined(IN_MODULE)
448/*
449 * When we build this in the Linux kernel module, we wish to make the
450 * symbols available to other modules as well.
451 */
452# include "the-linux-kernel.h"
453EXPORT_SYMBOL(RTErrConvertToErrno);
454#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