diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-04-14 06:49:57 +0200 |
---|---|---|
committer | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2010-09-10 18:40:12 +1000 |
commit | 67129af6419e1e839f2a34811173b27342c8e40d (patch) | |
tree | cb968c70775f3d2aaf1281a0cddcc014fadc210a | |
parent | 69f49ea0d70939340e8a2c28aae36c8e2f3fb41e (diff) | |
download | busybox-w32-67129af6419e1e839f2a34811173b27342c8e40d.tar.gz busybox-w32-67129af6419e1e839f2a34811173b27342c8e40d.tar.bz2 busybox-w32-67129af6419e1e839f2a34811173b27342c8e40d.zip |
win32: add function to map windows errors to posix ones
-rw-r--r-- | win32/mingw.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/win32/mingw.c b/win32/mingw.c index 72e23998c..afd017e87 100644 --- a/win32/mingw.c +++ b/win32/mingw.c | |||
@@ -2,6 +2,119 @@ | |||
2 | 2 | ||
3 | unsigned int _CRT_fmode = _O_BINARY; | 3 | unsigned int _CRT_fmode = _O_BINARY; |
4 | 4 | ||
5 | static int err_win_to_posix(DWORD winerr) | ||
6 | { | ||
7 | int error = ENOSYS; | ||
8 | switch(winerr) { | ||
9 | case ERROR_ACCESS_DENIED: error = EACCES; break; | ||
10 | case ERROR_ACCOUNT_DISABLED: error = EACCES; break; | ||
11 | case ERROR_ACCOUNT_RESTRICTION: error = EACCES; break; | ||
12 | case ERROR_ALREADY_ASSIGNED: error = EBUSY; break; | ||
13 | case ERROR_ALREADY_EXISTS: error = EEXIST; break; | ||
14 | case ERROR_ARITHMETIC_OVERFLOW: error = ERANGE; break; | ||
15 | case ERROR_BAD_COMMAND: error = EIO; break; | ||
16 | case ERROR_BAD_DEVICE: error = ENODEV; break; | ||
17 | case ERROR_BAD_DRIVER_LEVEL: error = ENXIO; break; | ||
18 | case ERROR_BAD_EXE_FORMAT: error = ENOEXEC; break; | ||
19 | case ERROR_BAD_FORMAT: error = ENOEXEC; break; | ||
20 | case ERROR_BAD_LENGTH: error = EINVAL; break; | ||
21 | case ERROR_BAD_PATHNAME: error = ENOENT; break; | ||
22 | case ERROR_BAD_PIPE: error = EPIPE; break; | ||
23 | case ERROR_BAD_UNIT: error = ENODEV; break; | ||
24 | case ERROR_BAD_USERNAME: error = EINVAL; break; | ||
25 | case ERROR_BROKEN_PIPE: error = EPIPE; break; | ||
26 | case ERROR_BUFFER_OVERFLOW: error = ENAMETOOLONG; break; | ||
27 | case ERROR_BUSY: error = EBUSY; break; | ||
28 | case ERROR_BUSY_DRIVE: error = EBUSY; break; | ||
29 | case ERROR_CALL_NOT_IMPLEMENTED: error = ENOSYS; break; | ||
30 | case ERROR_CANNOT_MAKE: error = EACCES; break; | ||
31 | case ERROR_CANTOPEN: error = EIO; break; | ||
32 | case ERROR_CANTREAD: error = EIO; break; | ||
33 | case ERROR_CANTWRITE: error = EIO; break; | ||
34 | case ERROR_CRC: error = EIO; break; | ||
35 | case ERROR_CURRENT_DIRECTORY: error = EACCES; break; | ||
36 | case ERROR_DEVICE_IN_USE: error = EBUSY; break; | ||
37 | case ERROR_DEV_NOT_EXIST: error = ENODEV; break; | ||
38 | case ERROR_DIRECTORY: error = EINVAL; break; | ||
39 | case ERROR_DIR_NOT_EMPTY: error = ENOTEMPTY; break; | ||
40 | case ERROR_DISK_CHANGE: error = EIO; break; | ||
41 | case ERROR_DISK_FULL: error = ENOSPC; break; | ||
42 | case ERROR_DRIVE_LOCKED: error = EBUSY; break; | ||
43 | case ERROR_ENVVAR_NOT_FOUND: error = EINVAL; break; | ||
44 | case ERROR_EXE_MARKED_INVALID: error = ENOEXEC; break; | ||
45 | case ERROR_FILENAME_EXCED_RANGE: error = ENAMETOOLONG; break; | ||
46 | case ERROR_FILE_EXISTS: error = EEXIST; break; | ||
47 | case ERROR_FILE_INVALID: error = ENODEV; break; | ||
48 | case ERROR_FILE_NOT_FOUND: error = ENOENT; break; | ||
49 | case ERROR_GEN_FAILURE: error = EIO; break; | ||
50 | case ERROR_HANDLE_DISK_FULL: error = ENOSPC; break; | ||
51 | case ERROR_INSUFFICIENT_BUFFER: error = ENOMEM; break; | ||
52 | case ERROR_INVALID_ACCESS: error = EACCES; break; | ||
53 | case ERROR_INVALID_ADDRESS: error = EFAULT; break; | ||
54 | case ERROR_INVALID_BLOCK: error = EFAULT; break; | ||
55 | case ERROR_INVALID_DATA: error = EINVAL; break; | ||
56 | case ERROR_INVALID_DRIVE: error = ENODEV; break; | ||
57 | case ERROR_INVALID_EXE_SIGNATURE: error = ENOEXEC; break; | ||
58 | case ERROR_INVALID_FLAGS: error = EINVAL; break; | ||
59 | case ERROR_INVALID_FUNCTION: error = ENOSYS; break; | ||
60 | case ERROR_INVALID_HANDLE: error = EBADF; break; | ||
61 | case ERROR_INVALID_LOGON_HOURS: error = EACCES; break; | ||
62 | case ERROR_INVALID_NAME: error = EINVAL; break; | ||
63 | case ERROR_INVALID_OWNER: error = EINVAL; break; | ||
64 | case ERROR_INVALID_PARAMETER: error = EINVAL; break; | ||
65 | case ERROR_INVALID_PASSWORD: error = EPERM; break; | ||
66 | case ERROR_INVALID_PRIMARY_GROUP: error = EINVAL; break; | ||
67 | case ERROR_INVALID_SIGNAL_NUMBER: error = EINVAL; break; | ||
68 | case ERROR_INVALID_TARGET_HANDLE: error = EIO; break; | ||
69 | case ERROR_INVALID_WORKSTATION: error = EACCES; break; | ||
70 | case ERROR_IO_DEVICE: error = EIO; break; | ||
71 | case ERROR_IO_INCOMPLETE: error = EINTR; break; | ||
72 | case ERROR_LOCKED: error = EBUSY; break; | ||
73 | case ERROR_LOCK_VIOLATION: error = EACCES; break; | ||
74 | case ERROR_LOGON_FAILURE: error = EACCES; break; | ||
75 | case ERROR_MAPPED_ALIGNMENT: error = EINVAL; break; | ||
76 | case ERROR_META_EXPANSION_TOO_LONG: error = E2BIG; break; | ||
77 | case ERROR_MORE_DATA: error = EPIPE; break; | ||
78 | case ERROR_NEGATIVE_SEEK: error = ESPIPE; break; | ||
79 | case ERROR_NOACCESS: error = EFAULT; break; | ||
80 | case ERROR_NONE_MAPPED: error = EINVAL; break; | ||
81 | case ERROR_NOT_ENOUGH_MEMORY: error = ENOMEM; break; | ||
82 | case ERROR_NOT_READY: error = EAGAIN; break; | ||
83 | case ERROR_NOT_SAME_DEVICE: error = EXDEV; break; | ||
84 | case ERROR_NO_DATA: error = EPIPE; break; | ||
85 | case ERROR_NO_MORE_SEARCH_HANDLES: error = EIO; break; | ||
86 | case ERROR_NO_PROC_SLOTS: error = EAGAIN; break; | ||
87 | case ERROR_NO_SUCH_PRIVILEGE: error = EACCES; break; | ||
88 | case ERROR_OPEN_FAILED: error = EIO; break; | ||
89 | case ERROR_OPEN_FILES: error = EBUSY; break; | ||
90 | case ERROR_OPERATION_ABORTED: error = EINTR; break; | ||
91 | case ERROR_OUTOFMEMORY: error = ENOMEM; break; | ||
92 | case ERROR_PASSWORD_EXPIRED: error = EACCES; break; | ||
93 | case ERROR_PATH_BUSY: error = EBUSY; break; | ||
94 | case ERROR_PATH_NOT_FOUND: error = ENOENT; break; | ||
95 | case ERROR_PIPE_BUSY: error = EBUSY; break; | ||
96 | case ERROR_PIPE_CONNECTED: error = EPIPE; break; | ||
97 | case ERROR_PIPE_LISTENING: error = EPIPE; break; | ||
98 | case ERROR_PIPE_NOT_CONNECTED: error = EPIPE; break; | ||
99 | case ERROR_PRIVILEGE_NOT_HELD: error = EACCES; break; | ||
100 | case ERROR_READ_FAULT: error = EIO; break; | ||
101 | case ERROR_SEEK: error = EIO; break; | ||
102 | case ERROR_SEEK_ON_DEVICE: error = ESPIPE; break; | ||
103 | case ERROR_SHARING_BUFFER_EXCEEDED: error = ENFILE; break; | ||
104 | case ERROR_SHARING_VIOLATION: error = EACCES; break; | ||
105 | case ERROR_STACK_OVERFLOW: error = ENOMEM; break; | ||
106 | case ERROR_SWAPERROR: error = ENOENT; break; | ||
107 | case ERROR_TOO_MANY_MODULES: error = EMFILE; break; | ||
108 | case ERROR_TOO_MANY_OPEN_FILES: error = EMFILE; break; | ||
109 | case ERROR_UNRECOGNIZED_MEDIA: error = ENXIO; break; | ||
110 | case ERROR_UNRECOGNIZED_VOLUME: error = ENODEV; break; | ||
111 | case ERROR_WAIT_NO_CHILDREN: error = ECHILD; break; | ||
112 | case ERROR_WRITE_FAULT: error = EIO; break; | ||
113 | case ERROR_WRITE_PROTECT: error = EROFS; break; | ||
114 | } | ||
115 | return error; | ||
116 | } | ||
117 | |||
5 | unsigned int sleep (unsigned int seconds) | 118 | unsigned int sleep (unsigned int seconds) |
6 | { | 119 | { |
7 | Sleep(seconds*1000); | 120 | Sleep(seconds*1000); |