Changeset 959 for trunk/client/src/util.c
- Timestamp:
- Aug 16, 2016, 5:35:07 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/src/util.c
r957 r959 26 26 #include <stdlib.h> 27 27 #include <string.h> 28 #include <stdio.h> 28 29 29 30 #include "smbwrp.h" … … 32 33 int maperror(int rc) 33 34 { 34 switch (rc) 35 { 36 case 0 : return NO_ERROR ; /* NO_ERROR */ 37 case 1 : return ERROR_ACCESS_DENIED ; /* EPERM - Operation not permitted */ 38 case 2 : return ERROR_FILE_NOT_FOUND ; /* ENOENT - No such file or directory */ 39 case 3 : return ERROR_PID_MISMATCH ; /* ESRCH - No such process */ 40 case 4 : return ERROR_INTERRUPT ; /* EINTR - Interrupted system call */ 41 case 5 : return ERROR_READ_FAULT ; /* EIO - I/O error */ 42 case 6 : return ERROR_BAD_UNIT ; /* ENXIO - No such device or address */ 43 case 7 : return ERROR_INVALID_DATA ; /* E2BIG - Arguments or environment too big */ 44 case 8 : return ERROR_BAD_EXE_FORMAT ; /* ENOEXEC - Invalid executable file format */ 45 case 9 : return ERROR_INVALID_HANDLE ; /* EBADF - Bad file number */ 46 case 10 : return ERROR_NO_CHILD_PROCESS ; /* ECHILD - No child processes */ 47 case 11 : return ERROR_BUSY ; /* EAGAIN - Resource temporarily unavailable */ 48 case 12 : return ERROR_NOT_ENOUGH_MEMORY ; /* ENOMEM - Not enough memory */ 49 case 13 : return ERROR_ACCESS_DENIED ; /* EACCES - Permission denied */ 50 case 14 : return ERROR_INVALID_ADDRESS ; /* EFAULT - Bad address */ 51 case 15 : return ERROR_NOT_LOCKED ; /* ENOLCK - No locks available */ 52 case 16 : return ERROR_BUSY ; /* EBUSY - Resource busy */ 53 case 17 : return ERROR_FILE_EXISTS ; /* EEXIST - File exists */ 54 case 18 : return ERROR_NOT_SAME_DEVICE ; /* EXDEV - Cross-device link */ 55 case 19 : return ERROR_REM_NOT_LIST ; /* ENODEV - No such device */ 56 case 20 : return ERROR_PATH_NOT_FOUND ; /* ENOTDIR - Not a directory */ 57 case 21 : return ERROR_DIRECTORY ; /* EISDIR - Is a directory */ 58 case 22 : return ERROR_INVALID_PARAMETER ; /* EINVAL - Invalid argument */ 59 case 23 : return ERROR_TOO_MANY_OPEN_FILES ; /* ENFILE - Too many open files in system */ 60 case 24 : return ERROR_TOO_MANY_OPENS ; /* EMFILE - Too many open files */ 61 case 25 : return ERROR_MOD_NOT_FOUND ; /* ENOTTY - Inappropriate ioctl */ 62 case 26 : return ERROR_LOCK_VIOLATION ; /* EDEADLK - Resource deadlock avoided */ 63 case 27 : return ERROR_TRANSFER_TOO_LONG ; /* EFBIG - File too large */ 64 case 28 : return ERROR_DISK_FULL ; /* ENOSPC - Disk full */ 65 case 29 : return ERROR_SEEK ; /* ESPIPE - Invalid seek */ 66 case 30 : return ERROR_WRITE_PROTECT ; /* EROFS - Read-only file system */ 67 case 31 : return ERROR_TOO_MANY_OPEN_FILES ; /* EMLINK - Too many links */ 68 case 32 : return ERROR_BROKEN_PIPE ; /* EPIPE - Broken pipe */ 69 case 33 : return ERROR_INVALID_LEVEL ; /* EDOM - Domain error */ 70 case 34 : return ERROR_FILENAME_EXCED_RANGE ; /* ERANGE - Result too large */ 71 case 35 : return ERROR_DIR_NOT_EMPTY ; /* ENOTEMPTY - Directory not empty */ 72 case 36 : return ERROR_BUSY_DRIVE ; /* EINPROGRESS - Operation now in progress */ 73 case 37 : return ERROR_INVALID_FUNCTION ; /* ENOSYS - Function not implemented */ 74 case 38 : return ERROR_FILENAME_EXCED_RANGE ; /* ENAMETOOLONG - File name too long */ 75 case 39 : return ERROR_KBD_FOCUS_REQUIRED ; /* EDESTADDRREQ - Destination address required */ 76 case 40 : return ERROR_TRANSFER_TOO_LONG ; /* EMSGSIZE - Message too long */ 77 case 48 : return ERROR_NETWORK_BUSY ; /* EADDRINUSE - Address already in use */ 78 case 49 : return ERROR_INFO_NOT_AVAIL ; /* EADDRNOTAVAIL - Can't assigned requested address */ 79 case 50 : return ERROR_NETWORK_ACCESS_DENIED ; /* ENETDOWN - Network is down */ 80 case 51 : return ERROR_NETWORK_ACCESS_DENIED ; /* ENETUNREACH - Network is unreachable */ 81 case 52 : return ERROR_NETWORK_ACCESS_DENIED ; /* ENETRESET - Network dropped connection on reset */ 82 case 53 : return ERROR_NETWORK_ACCESS_DENIED ; /* ECONNABORTED - Software caused connection abort */ 83 case 54 : return ERROR_NETWORK_ACCESS_DENIED ; /* ECONNRESET - Connection reset by peer */ 84 case 55 : return ERROR_BUFFER_OVERFLOW ; /* ENOBUFS - No buffer space available */ 85 case 56 : return ERROR_PIPE_BUSY ; /* EISCONN - Socket is already connected */ 86 case 57 : return ERROR_REM_NOT_LIST ; /* ENOTCONN - Socket is not connected */ 87 case 58 : return ERROR_ALREADY_SHUTDOWN ; /* ESHUTDOWN - Can't send after socket shutdown */ 88 case 60 : return ERROR_TIMEOUT ; /* ETIMEDOUT - Connection timed out */ 89 case 61 : return ERROR_NETWORK_ACCESS_DENIED ; /* ECONNREFUSED - Connection refused */ 90 case 63 : return ERROR_INVALID_BLOCK ; /* ENOTSOCK - Socket operation on non-socket */ 91 case 64 : return ERROR_BAD_FORMAT ; /* EHOSTDOWN - Host is down */ 92 case 65 : return ERROR_BAD_NETPATH ; /* EHOSTUNREACH - No route to host */ 93 case 66 : return ERROR_BUSY_DRIVE ; /* EALREADY - Operation already in progress */ 94 } 35 switch (rc) 36 { 37 case 0 : // NO_ERROR 38 return NO_ERROR; 39 case 1 : // EPERM - Operation nt permitted 40 case 13 : // EACCES - Permission denied 41 return ERROR_ACCESS_DENIED; 42 case 2 : // ENOENT - No such file or directory 43 return ERROR_FILE_NOT_FOUND; 44 case 3 : // ESRCH - No such process 45 return ERROR_PID_MISMATCH; 46 case 4 : // EINTR - Interrupted system call 47 return ERROR_INTERRUPT; 48 case 5 : // EIO - I/O error 49 return ERROR_READ_FAULT; 50 case 6 : // ENXIO - No such device or address 51 return ERROR_BAD_UNIT; 52 case 7 : // E2BIG - Arguments or environment too big 53 return ERROR_INVALID_DATA; 54 case 8 : // ENOEXEC - Invalid executable file format 55 return ERROR_BAD_EXE_FORMAT; 56 case 9 : // EBADF - Bad file number 57 return ERROR_INVALID_HANDLE; 58 case 10 : // ECHILD - No child processes 59 return ERROR_NO_CHILD_PROCESS; 60 case 11 : // EAGAIN - Resource temporarily unavailable 61 case 16 : // EBUSY - Resource busy 62 return ERROR_BUSY; 63 case 12 : // ENOMEM - Not enough memory 64 return ERROR_NOT_ENOUGH_MEMORY; 65 case 14 : // EFAULT - Bad address 66 return ERROR_INVALID_ADDRESS; 67 case 15 : // ENOLCK - No locks available 68 return ERROR_NOT_LOCKED; 69 case 17 : // EEXIST - File exists 70 return ERROR_FILE_EXISTS; 71 case 18 : // EXDEV - Cross-device link 72 return ERROR_NOT_SAME_DEVICE; 73 case 19 : // ENODEV - No such device 74 case 57 : // ENOTCONN - Socket is not connected 75 return ERROR_REM_NOT_LIST; 76 case 20 : // ENOTDIR - Not a directory 77 return ERROR_PATH_NOT_FOUND; 78 case 21 : // EISDIR - Is a directory 79 return ERROR_DIRECTORY; 80 case 22 : // EINVAL - Invalid argument 81 return ERROR_INVALID_PARAMETER; 82 case 23 : // ENFILE - Too many open files in system 83 case 31 : // EMLINK - Too many links 84 return ERROR_TOO_MANY_OPEN_FILES; 85 case 24 : // EMFILE - Too many open files 86 return ERROR_TOO_MANY_OPENS; 87 case 25 : // ENOTTY - Inappropriate ioctl 88 return ERROR_MOD_NOT_FOUND; 89 case 26 : // EDEADLK - Resource deadlock avoided 90 return ERROR_LOCK_VIOLATION; 91 case 27 : // EFBIG - File too large 92 case 40 : // EMSGSIZE - Message too long 93 return ERROR_TRANSFER_TOO_LONG; 94 case 28 : // ENOSPC - Disk full 95 return ERROR_DISK_FULL; 96 case 29 : // ESPIPE - Invalid seek 97 return ERROR_SEEK; 98 case 30 : // EROFS - Read-only file system 99 return ERROR_WRITE_PROTECT; 100 case 32 : // EPIPE - Broken pipe 101 return ERROR_BROKEN_PIPE; 102 case 33 : // EDOM - Domain error 103 return ERROR_INVALID_LEVEL; 104 case 34 : // ENAMETOOLONG - File name too long 105 case 38 : // ERANGE - Result too large 106 return ERROR_FILENAME_EXCED_RANGE; 107 case 35 : // ENOTEMPTY - Directory not empty 108 return ERROR_DIR_NOT_EMPTY; 109 case 36 : // EINPROGRESS - Operation now in progress 110 case 66 : // EALREADY - Operation already in progress 111 return ERROR_BUSY_DRIVE; 112 case 37 : // ENOSYS - Function not implemented 113 return ERROR_INVALID_FUNCTION; 114 case 39 : // EDESTADDRREQ - Destination address required 115 return ERROR_KBD_FOCUS_REQUIRED; 116 case 48 : // EADDRINUSE - Address already in use 117 return ERROR_NETWORK_BUSY; 118 case 49 : // EADDRNOTAVAIL - Can't assigned requested address 119 return ERROR_INFO_NOT_AVAIL; 120 case 50 : // ENETDOWN - Network is down 121 case 51 : // ENETUNREACH - Network is unreachable 122 case 52 : // ENETRESET - Network dropped connection on reset 123 case 53 : // ECONNABORTED - Software caused connection abort 124 case 54 : // ECONNRESET - Connection reset by peer 125 return ERROR_NETWORK_ACCESS_DENIED; 126 case 55 : // ENOBUFS - No buffer space available 127 return ERROR_BUFFER_OVERFLOW; 128 case 56 : // EISCONN - Socket is already connected 129 return ERROR_PIPE_BUSY; 130 case 58 : // ESHUTDOWN - Can't send after socket shutdown 131 return ERROR_ALREADY_SHUTDOWN; 132 case 60 : // ETIMEDOUT - Connection timed out 133 return ERROR_TIMEOUT; 134 case 61 : // ECONNREFUSED - Connection refused 135 return ERROR_NETWORK_ACCESS_DENIED; 136 case 63 : // ENOTSOCK - Socket operation on non-socket 137 return ERROR_INVALID_BLOCK; 138 case 64 : // EHOSTDOWN - Host is down 139 return ERROR_BAD_FORMAT; 140 case 65 : // EHOSTUNREACH - No route to host 141 return ERROR_BAD_NETPATH; 142 } 95 143 // debug_printf( "Unhandled return code %d\n"); 96 144 return rc + 40000; 97 145 } 98 146 99 147 char * getlastslash(char * path) 100 148 { 101 char * p; 102 if (!path) 103 { 104 return NULL; 105 } 106 for (p = path + strlen(path) - 1; p >= path; p--) 107 { 108 if (*p == '\\' || *p == '/') 109 { 110 return p; 111 } 112 } 113 return NULL; 149 char * p; 150 if (!path) 151 return NULL; 152 153 for (p = path + strlen(path) - 1; p >= path; p--) 154 { 155 if (*p == '\\' || *p == '/') 156 return p; 157 } 158 return NULL; 114 159 } 115
Note:
See TracChangeset
for help on using the changeset viewer.