Synchronize error to status code mapping between dlls/ntdll/file.c
and server/file.c
Dmitry Timoshkov
dmitry at codeweavers.com
Tue Sep 11 00:59:04 CDT 2007
Hello,
please apply this patch after "server: Map ETXTBSY to STATUS_SHARING_VIOLATION".
I gave server/file.c mappings more priority in the case existing mapping
doesn't match.
Changelog:
Synchronize error to status code mapping between dlls/ntdll/file.c
and server/file.c.
---
dlls/ntdll/file.c | 31 +++++++++++++++++++------------
server/file.c | 9 +++++++++
server/trace.c | 2 ++
3 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index c7004d7..4a875b7 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -283,33 +283,40 @@ NTSTATUS FILE_GetNtStatus(void)
TRACE( "errno = %d\n", errno );
switch (err)
{
+ case ETXTBSY:
case EAGAIN: return STATUS_SHARING_VIOLATION;
case EBADF: return STATUS_INVALID_HANDLE;
- case EBUSY: return STATUS_DEVICE_BUSY;
case ENOSPC: return STATUS_DISK_FULL;
- case EPERM:
- case EROFS:
- case EACCES: return STATUS_ACCESS_DENIED;
- case ENOTDIR: return STATUS_OBJECT_PATH_NOT_FOUND;
- case ENOENT: return STATUS_OBJECT_NAME_NOT_FOUND;
+ case EACCES:
+ case ESRCH:
+ case EPERM: return STATUS_ACCESS_DENIED;
+ case EROFS: return STATUS_MEDIA_WRITE_PROTECTED;
+ case EBUSY: return STATUS_FILE_LOCK_CONFLICT;
+ case ENOENT: return STATUS_NO_SUCH_FILE;
case EISDIR: return STATUS_FILE_IS_A_DIRECTORY;
- case EMFILE:
- case ENFILE: return STATUS_TOO_MANY_OPENED_FILES;
+ case ENFILE:
+ case EMFILE: return STATUS_TOO_MANY_OPENED_FILES;
+ case EEXIST: return STATUS_OBJECT_NAME_COLLISION;
case EINVAL: return STATUS_INVALID_PARAMETER;
+ case ESPIPE: return STATUS_ILLEGAL_FUNCTION;
case ENOTEMPTY: return STATUS_DIRECTORY_NOT_EMPTY;
+ case EIO: return STATUS_ACCESS_VIOLATION;
+ case ENOTDIR: return STATUS_NOT_A_DIRECTORY;
case EPIPE: return STATUS_PIPE_DISCONNECTED;
- case EIO: return STATUS_DEVICE_NOT_READY;
+ case EFBIG: return STATUS_SECTION_TOO_BIG;
+ case ENODEV: return STATUS_NO_SUCH_DEVICE;
+ case ENXIO: return STATUS_NO_SUCH_DEVICE;
#ifdef ENOMEDIUM
case ENOMEDIUM: return STATUS_NO_MEDIA_IN_DEVICE;
#endif
- case ENXIO: return STATUS_NO_SUCH_DEVICE;
+#ifdef EOVERFLOW
+ case EOVERFLOW: return STATUS_INVALID_PARAMETER;
+#endif
case ENOTTY:
case EOPNOTSUPP:return STATUS_NOT_SUPPORTED;
case ECONNRESET:return STATUS_PIPE_DISCONNECTED;
case EFAULT: return STATUS_ACCESS_VIOLATION;
- case ESPIPE: return STATUS_ILLEGAL_FUNCTION;
case ENOEXEC: /* ?? */
- case EEXIST: /* ?? */
default:
FIXME( "Converting errno %d to STATUS_UNSUCCESSFUL\n", err );
return STATUS_UNSUCCESSFUL;
diff --git a/server/file.c b/server/file.c
index a8152da..8816e4b 100644
--- a/server/file.c
+++ b/server/file.c
@@ -305,12 +305,21 @@ void file_set_error(void)
case ENOTEMPTY: set_error( STATUS_DIRECTORY_NOT_EMPTY ); break;
case EIO: set_error( STATUS_ACCESS_VIOLATION ); break;
case ENOTDIR: set_error( STATUS_NOT_A_DIRECTORY ); break;
+ case EPIPE: set_error( STATUS_PIPE_DISCONNECTED ); break;
case EFBIG: set_error( STATUS_SECTION_TOO_BIG ); break;
case ENODEV: set_error( STATUS_NO_SUCH_DEVICE ); break;
case ENXIO: set_error( STATUS_NO_SUCH_DEVICE ); break;
+#ifdef ENOMEDIUM
+ case ENOMEDIUM: set_error( STATUS_NO_MEDIA_IN_DEVICE); break;
+#endif
#ifdef EOVERFLOW
case EOVERFLOW: set_error( STATUS_INVALID_PARAMETER ); break;
#endif
+ case ENOTTY:
+ case EOPNOTSUPP:set_error( STATUS_NOT_SUPPORTED ); break;
+ case ECONNRESET:set_error( STATUS_PIPE_DISCONNECTED ); break;
+ case EFAULT: set_error( STATUS_ACCESS_VIOLATION ); break;
+ case ENOEXEC: /* ?? */
default:
perror("wineserver: file_set_error() can't map error");
set_error( STATUS_UNSUCCESSFUL );
diff --git a/server/trace.c b/server/trace.c
index 49f4479..5a1c995 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -4233,6 +4233,7 @@ static const struct
{ "CANCELLED", STATUS_CANCELLED },
{ "CANT_OPEN_ANONYMOUS", STATUS_CANT_OPEN_ANONYMOUS },
{ "CHILD_MUST_BE_VOLATILE", STATUS_CHILD_MUST_BE_VOLATILE },
+ { "DEBUGGER_INACTIVE", STATUS_DEBUGGER_INACTIVE },
{ "DEVICE_BUSY", STATUS_DEVICE_BUSY },
{ "DIRECTORY_NOT_EMPTY", STATUS_DIRECTORY_NOT_EMPTY },
{ "DISK_FULL", STATUS_DISK_FULL },
@@ -4271,6 +4272,7 @@ static const struct
{ "NOT_SUPPORTED", STATUS_NOT_SUPPORTED },
{ "NO_DATA_DETECTED", STATUS_NO_DATA_DETECTED },
{ "NO_IMPERSONATION_TOKEN", STATUS_NO_IMPERSONATION_TOKEN },
+ { "NO_MEDIA_IN_DEVICE", STATUS_NO_MEDIA_IN_DEVICE },
{ "NO_MEMORY", STATUS_NO_MEMORY },
{ "NO_MORE_ENTRIES", STATUS_NO_MORE_ENTRIES },
{ "NO_MORE_FILES", STATUS_NO_MORE_FILES },
--
1.5.3.1
More information about the wine-patches
mailing list