aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2010-04-14 06:49:57 +0200
committerNguyễn Thái Ngọc Duy <pclouds@gmail.com>2010-09-10 18:40:12 +1000
commit67129af6419e1e839f2a34811173b27342c8e40d (patch)
treecb968c70775f3d2aaf1281a0cddcc014fadc210a
parent69f49ea0d70939340e8a2c28aae36c8e2f3fb41e (diff)
downloadbusybox-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.c113
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
3unsigned int _CRT_fmode = _O_BINARY; 3unsigned int _CRT_fmode = _O_BINARY;
4 4
5static 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
5unsigned int sleep (unsigned int seconds) 118unsigned int sleep (unsigned int seconds)
6{ 119{
7 Sleep(seconds*1000); 120 Sleep(seconds*1000);