1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
1 |
/*********************************************************
|
2 |
* Copyright (C) 2003 VMware, Inc. All rights reserved.
|
|
3 |
*
|
|
4 |
* This program is free software; you can redistribute it and/or modify it
|
|
5 |
* under the terms of the GNU Lesser General Public License as published
|
|
6 |
* by the Free Software Foundation version 2.1 and no later version.
|
|
7 |
*
|
|
8 |
* This program is distributed in the hope that it will be useful, but
|
|
9 |
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
10 |
* or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public
|
|
11 |
* License for more details.
|
|
12 |
*
|
|
13 |
* You should have received a copy of the GNU Lesser General Public License
|
|
14 |
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
|
15 |
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
16 |
*
|
|
17 |
*********************************************************/
|
|
18 |
||
19 |
/*
|
|
20 |
* vixTranslateErrorOpenSource.c --
|
|
21 |
*
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
22 |
* Routines which translate between various other error code systems
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
23 |
* into foundry errors.
|
24 |
*
|
|
25 |
* This is the minimal functions needed to build the tools for open source.
|
|
26 |
* Most of the error translation functions are in foundryTranslateError.c,
|
|
27 |
* which is NOT being released as open source. We do not want to include
|
|
28 |
* any unnecessary error functions, since those use lots of different
|
|
29 |
* error code definitions, and that would drag in a lot of headers from
|
|
30 |
* bora/lib/public.
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
31 |
*/
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
32 |
|
33 |
#include "vmware.h" |
|
34 |
#include "vixOpenSource.h" |
|
35 |
#include <errno.h> |
|
36 |
#include <string.h> |
|
37 |
||
1.4.3
by Serge Hallyn
Import upstream version 2011.03.28-387002 |
38 |
#ifdef _WIN32
|
39 |
#include "win32u.h" |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
40 |
#endif
|
41 |
||
42 |
||
43 |
/*
|
|
44 |
*-----------------------------------------------------------------------------
|
|
45 |
*
|
|
46 |
* Vix_TranslateGuestRegistryError --
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
47 |
*
|
48 |
* Translate a guest windows registry error to a Foundry error.
|
|
49 |
*
|
|
50 |
* Results:
|
|
51 |
* VixError
|
|
52 |
*
|
|
53 |
* Side effects:
|
|
54 |
* None.
|
|
55 |
*
|
|
56 |
*-----------------------------------------------------------------------------
|
|
57 |
*/
|
|
58 |
||
59 |
VixError
|
|
60 |
Vix_TranslateGuestRegistryError(int systemError) // IN |
|
61 |
{
|
|
62 |
VixError err = VIX_E_FAIL; |
|
63 |
#ifdef _WIN32
|
|
64 |
Unicode msg; |
|
65 |
||
66 |
switch (systemError) { |
|
67 |
case ERROR_INVALID_PARAMETER: |
|
68 |
case ERROR_FILE_NOT_FOUND: |
|
69 |
err = VIX_E_REG_KEY_INVALID; |
|
70 |
break; |
|
71 |
case ERROR_ACCESS_DENIED: |
|
72 |
err = VIX_E_GUEST_USER_PERMISSIONS; |
|
73 |
break; |
|
74 |
default: |
|
75 |
return Vix_TranslateSystemError(systemError); |
|
76 |
}
|
|
77 |
msg = Win32U_FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, |
|
78 |
NULL, systemError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), |
|
79 |
NULL); |
|
80 |
||
81 |
Log("Foundry operation failed with guest windows registry error: %s (%d), translated to %"FMT64"d\n", |
|
82 |
msg, systemError, err); |
|
83 |
Unicode_Free(msg); |
|
84 |
||
85 |
#endif
|
|
86 |
return err; |
|
87 |
} // Vix_TranslateGuestRegistryError |
|
88 |
||
89 |
||
90 |
/*
|
|
91 |
*-----------------------------------------------------------------------------
|
|
92 |
*
|
|
93 |
* Vix_TranslateSystemError --
|
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
94 |
*
|
95 |
* Translate a System error to a Foundry error.
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
96 |
*
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
97 |
* Results:
|
98 |
* VixError
|
|
99 |
*
|
|
100 |
* Side effects:
|
|
101 |
*
|
|
102 |
*-----------------------------------------------------------------------------
|
|
103 |
*/
|
|
104 |
||
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
105 |
VixError
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
106 |
Vix_TranslateSystemError(int systemError) // IN |
107 |
{
|
|
108 |
VixError err = VIX_E_FAIL; |
|
109 |
#ifdef _WIN32
|
|
110 |
Unicode msg; |
|
1.1.1
by Devid Antonio Filoni
Import upstream version 2008.08.08-109361 |
111 |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
112 |
switch (systemError) { |
113 |
case ERROR_ACCESS_DENIED: |
|
114 |
err = VIX_E_FILE_ACCESS_ERROR; |
|
115 |
break; |
|
116 |
case ERROR_INVALID_NAME: |
|
1.4.3
by Serge Hallyn
Import upstream version 2011.03.28-387002 |
117 |
err = VIX_E_FILE_NAME_INVALID; |
118 |
break; |
|
119 |
case ERROR_FILENAME_EXCED_RANGE: |
|
120 |
err = VIX_E_FILE_NAME_TOO_LONG; |
|
121 |
break; |
|
122 |
case ERROR_FILE_NOT_FOUND: |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
123 |
case ERROR_PATH_NOT_FOUND: |
124 |
case ERROR_BAD_PATHNAME: |
|
125 |
case ERROR_DIRECTORY: |
|
126 |
case ERROR_BUFFER_OVERFLOW: |
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
127 |
err = VIX_E_FILE_NOT_FOUND; |
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
128 |
break; |
129 |
case ERROR_DIR_NOT_EMPTY: |
|
1.4.3
by Serge Hallyn
Import upstream version 2011.03.28-387002 |
130 |
err = VIX_E_DIRECTORY_NOT_EMPTY; |
131 |
break; |
|
132 |
case ERROR_TOO_MANY_OPEN_FILES: |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
133 |
case ERROR_NO_MORE_FILES: |
134 |
case ERROR_WRITE_PROTECT: |
|
1.4.5
by Nate Muench
Import upstream version 2011.12.20-562307 |
135 |
case ERROR_WRITE_FAULT: |
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
136 |
case ERROR_READ_FAULT: |
137 |
case ERROR_SHARING_VIOLATION: |
|
138 |
case ERROR_SEEK: |
|
139 |
case ERROR_CANNOT_MAKE: |
|
140 |
Log("%s: system error = %d\n", __FUNCTION__, |
|
1.3.2
by Daniel Baumann
Import upstream version 2008.12.23-137496 |
141 |
systemError); |
142 |
err = VIX_E_FILE_ERROR; |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
143 |
break; |
144 |
case ERROR_HANDLE_DISK_FULL: |
|
145 |
case ERROR_DISK_FULL: |
|
146 |
err = VIX_E_DISK_FULL; |
|
147 |
break; |
|
148 |
case ERROR_FILE_EXISTS: |
|
149 |
case ERROR_ALREADY_EXISTS: |
|
150 |
err = VIX_E_FILE_ALREADY_EXISTS; |
|
151 |
break; |
|
152 |
case ERROR_BUSY: |
|
153 |
case ERROR_PATH_BUSY: |
|
154 |
err = VIX_E_OBJECT_IS_BUSY; |
|
155 |
break; |
|
156 |
case ERROR_INVALID_PARAMETER: |
|
157 |
err = VIX_E_INVALID_ARG; |
|
158 |
break; |
|
159 |
case ERROR_NOT_SUPPORTED: |
|
160 |
err = VIX_E_NOT_SUPPORTED; |
|
161 |
break; |
|
162 |
case ERROR_NO_DATA: |
|
163 |
case ERROR_INVALID_DATA: |
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
164 |
err = VIX_E_NOT_FOUND; |
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
165 |
break; |
166 |
case ERROR_NOT_ENOUGH_MEMORY: |
|
167 |
err = VIX_E_OUT_OF_MEMORY; |
|
168 |
break; |
|
169 |
default: |
|
170 |
err = VIX_E_FAIL; |
|
171 |
}
|
|
172 |
msg = Win32U_FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, |
|
1.1.1
by Devid Antonio Filoni
Import upstream version 2008.08.08-109361 |
173 |
NULL, systemError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), |
174 |
NULL); |
|
175 |
||
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
176 |
Log("Foundry operation failed with system error: %s (%d), translated to %"FMT64"d\n", |
177 |
msg, systemError, err); |
|
1.1.1
by Devid Antonio Filoni
Import upstream version 2008.08.08-109361 |
178 |
Unicode_Free(msg); |
179 |
||
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
180 |
#else // linux, other *nix |
181 |
err = Vix_TranslateErrno(systemError); |
|
1.4.3
by Serge Hallyn
Import upstream version 2011.03.28-387002 |
182 |
#endif
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
183 |
|
184 |
return err; |
|
185 |
} // Vix_TranslateSystemError |
|
186 |
||
187 |
||
188 |
/*
|
|
189 |
*-----------------------------------------------------------------------------
|
|
190 |
*
|
|
191 |
* Vix_TranslateCOMError --
|
|
192 |
*
|
|
193 |
* Translate a COM (Windows) error to a Foundry error.
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
194 |
*
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
195 |
* Results:
|
196 |
* VixError.
|
|
197 |
*
|
|
198 |
* Side effects:
|
|
199 |
* None.
|
|
200 |
*
|
|
201 |
*-----------------------------------------------------------------------------
|
|
202 |
*/
|
|
203 |
||
204 |
#ifdef _WIN32
|
|
205 |
VixError
|
|
206 |
Vix_TranslateCOMError(HRESULT hrError) // IN |
|
207 |
{
|
|
208 |
VixError err = VIX_E_FAIL; |
|
209 |
||
210 |
switch (hrError) { |
|
211 |
case E_ACCESSDENIED: |
|
212 |
err = VIX_E_FILE_ACCESS_ERROR; |
|
213 |
break; |
|
214 |
||
215 |
case STG_E_PATHNOTFOUND: |
|
216 |
case STG_E_FILENOTFOUND: |
|
217 |
err = VIX_E_FILE_NOT_FOUND; |
|
218 |
break; |
|
219 |
||
220 |
case STG_E_MEDIUMFULL: |
|
221 |
err = VIX_E_DISK_FULL; |
|
222 |
break; |
|
223 |
||
224 |
case STG_E_FILEALREADYEXISTS: |
|
225 |
err = VIX_E_FILE_ALREADY_EXISTS; |
|
226 |
break; |
|
227 |
||
228 |
case E_INVALIDARG: |
|
229 |
case E_POINTER: |
|
230 |
err = VIX_E_INVALID_ARG; |
|
231 |
break; |
|
232 |
||
233 |
case E_NOTIMPL: |
|
234 |
case E_NOINTERFACE: |
|
235 |
err = VIX_E_NOT_SUPPORTED; |
|
236 |
break; |
|
237 |
||
238 |
case E_OUTOFMEMORY: |
|
239 |
err = VIX_E_OUT_OF_MEMORY; |
|
240 |
break; |
|
241 |
||
242 |
case E_FAIL: |
|
243 |
default: |
|
244 |
err = VIX_E_FAIL; |
|
245 |
}
|
|
246 |
||
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
247 |
return err; |
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
248 |
} // Vix_TranslateCOMError |
249 |
#endif
|
|
250 |
||
251 |
||
252 |
/*
|
|
253 |
*-----------------------------------------------------------------------------
|
|
254 |
*
|
|
255 |
* Vix_TranslateCryptoError --
|
|
256 |
*
|
|
257 |
* Translate a Crypto error to a Foundry error.
|
|
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
258 |
*
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
259 |
* Results:
|
260 |
* VixError
|
|
261 |
*
|
|
262 |
* Side effects:
|
|
263 |
*
|
|
264 |
*-----------------------------------------------------------------------------
|
|
265 |
*/
|
|
266 |
||
1.4.7
by Nate Muench
Import upstream version 2012.03.13-651368 |
267 |
VixError
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
268 |
Vix_TranslateCryptoError(CryptoError cryptoError) // IN |
269 |
{
|
|
270 |
if (CRYPTO_ERROR_SUCCESS == cryptoError) { |
|
271 |
return VIX_OK; |
|
272 |
} else if (CRYPTO_ERROR_OPERATION_FAILED == cryptoError) { |
|
273 |
return VIX_E_GUEST_USER_PERMISSIONS; |
|
274 |
} else if (CRYPTO_ERROR_UNKNOWN_ALGORITHM == cryptoError) { |
|
275 |
return VIX_E_CRYPTO_UNKNOWN_ALGORITHM; |
|
276 |
} else if (CRYPTO_ERROR_BAD_BUFFER_SIZE == cryptoError) { |
|
277 |
return VIX_E_CRYPTO_BAD_BUFFER_SIZE; |
|
278 |
} else if (CRYPTO_ERROR_INVALID_OPERATION == cryptoError) { |
|
279 |
return VIX_E_CRYPTO_INVALID_OPERATION; |
|
280 |
} else if (CRYPTO_ERROR_NOMEM == cryptoError) { |
|
281 |
return VIX_E_OUT_OF_MEMORY; |
|
282 |
} else if (CRYPTO_ERROR_NEED_PASSWORD == cryptoError) { |
|
283 |
return VIX_E_CRYPTO_NEED_PASSWORD; |
|
284 |
} else if (CRYPTO_ERROR_BAD_PASSWORD == cryptoError) { |
|
285 |
return VIX_E_CRYPTO_BAD_PASSWORD; |
|
1.1.5
by Daniel Baumann
Import upstream version 2009.05.22-167859 |
286 |
} else if (CRYPTO_ERROR_IO_ERROR == cryptoError) { |
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
287 |
Log("%s: crypto error = %d\n", __FUNCTION__, |
1.3.2
by Daniel Baumann
Import upstream version 2008.12.23-137496 |
288 |
(int)cryptoError); |
289 |
return VIX_E_FILE_ERROR; |
|
1
by Daniel Baumann
Import upstream version 2008.06.03-96374 |
290 |
} else if (CRYPTO_ERROR_UNKNOWN_ERROR == cryptoError) { |
291 |
return VIX_E_FAIL; |
|
292 |
} else if (CRYPTO_ERROR_NAME_NOT_FOUND == cryptoError) { |
|
293 |
return VIX_E_CRYPTO_NOT_IN_DICTIONARY; |
|
294 |
} else if (CRYPTO_ERROR_NO_CRYPTO == cryptoError) { |
|
295 |
return VIX_E_CRYPTO_NO_CRYPTO; |
|
296 |
}
|
|
297 |
||
298 |
return VIX_E_FAIL; |
|
299 |
}
|
|
300 |
||
301 |
||
1.4.3
by Serge Hallyn
Import upstream version 2011.03.28-387002 |
302 |
/*
|
303 |
*-----------------------------------------------------------------------------
|
|
304 |
*
|
|
305 |
* Vix_TranslateErrno --
|
|
306 |
*
|
|
307 |
* Translate a Posix errno to a Foundry error.
|
|
308 |
*
|
|
309 |
* Results:
|
|
310 |
* VixError
|
|
311 |
*
|
|
312 |
* Side effects:
|
|
313 |
* None
|
|
314 |
*
|
|
315 |
*-----------------------------------------------------------------------------
|
|
316 |
*/
|
|
317 |
||
318 |
VixError
|
|
319 |
Vix_TranslateErrno(int systemError) // IN |
|
320 |
{
|
|
321 |
VixError err = VIX_E_FAIL; |
|
322 |
||
323 |
/*
|
|
324 |
* Be careful while adding new error code translations. This function is
|
|
325 |
* complied for both Windows and POSIX guests. Few errors i.e. ETIMEDOUT,
|
|
326 |
* ENOBUFS are defined only for POSIX guests. When a new error code
|
|
327 |
* translation is added, make sure you build a sandbox job and it is
|
|
328 |
* successful.
|
|
329 |
*/
|
|
330 |
||
331 |
switch (systemError) { |
|
332 |
case EPERM: |
|
333 |
case EACCES: |
|
334 |
err = VIX_E_FILE_ACCESS_ERROR; |
|
335 |
break; |
|
336 |
case EAGAIN: |
|
337 |
case EBUSY: |
|
338 |
err = VIX_E_OBJECT_IS_BUSY; |
|
339 |
break; |
|
340 |
case EEXIST: |
|
341 |
err = VIX_E_FILE_ALREADY_EXISTS; |
|
342 |
break; |
|
343 |
case EFBIG: |
|
344 |
err = VIX_E_FILE_TOO_BIG; |
|
345 |
break; |
|
346 |
case ENOTEMPTY: |
|
347 |
err = VIX_E_DIRECTORY_NOT_EMPTY; |
|
348 |
break; |
|
349 |
case ENOTDIR: |
|
350 |
err = VIX_E_NOT_A_DIRECTORY; |
|
351 |
break; |
|
352 |
#ifndef _WIN32
|
|
353 |
case ETIMEDOUT: |
|
354 |
case ENOBUFS: |
|
355 |
#endif
|
|
356 |
case EIO: |
|
357 |
case EMFILE: |
|
358 |
case ENFILE: |
|
359 |
case EMLINK: |
|
360 |
case EROFS: |
|
361 |
Log("%s: errno = %d\n", __FUNCTION__, |
|
362 |
systemError); |
|
363 |
err = VIX_E_FILE_ERROR; |
|
364 |
break; |
|
365 |
case ENODEV: |
|
366 |
case ENOENT: |
|
367 |
err = VIX_E_FILE_NOT_FOUND; |
|
368 |
break; |
|
369 |
case ENOSPC: |
|
370 |
err = VIX_E_DISK_FULL; |
|
371 |
break; |
|
372 |
case EISDIR: |
|
373 |
err = VIX_E_NOT_A_FILE; |
|
374 |
break; |
|
375 |
case ESRCH: |
|
376 |
err = VIX_E_NO_SUCH_PROCESS; |
|
377 |
break; |
|
378 |
case ENAMETOOLONG: |
|
379 |
err = VIX_E_FILE_NAME_TOO_LONG; |
|
380 |
break; |
|
381 |
#ifndef _WIN32
|
|
382 |
case EMSGSIZE: |
|
383 |
#endif
|
|
384 |
case EINVAL: |
|
385 |
err = VIX_E_INVALID_ARG; |
|
386 |
break; |
|
387 |
#ifndef _WIN32
|
|
388 |
case ELOOP: |
|
389 |
#endif
|
|
390 |
case ENOMEM: |
|
391 |
err = VIX_E_OUT_OF_MEMORY; |
|
392 |
break; |
|
393 |
default: |
|
394 |
err = VIX_E_FAIL; |
|
395 |
}
|
|
396 |
Log("Foundry operation failed with system error: %s (%d), translated to %"FMT64"d\n", |
|
397 |
strerror(systemError), systemError, err); |
|
398 |
||
399 |
return err; |
|
400 |
} // Vix_TranslateErrno |
|
401 |
||
402 |