diff options
author | Jeremy Allison <jra@samba.org> | 2002-01-16 21:27:57 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2002-01-16 21:27:57 +0000 |
commit | 04ec469c72c6a220108312cdec3d30081cfe938a (patch) | |
tree | 18e07e97f75c619012b77db2b2679112a9808f78 /source3/lib | |
parent | 1cd8c9c41f05402f3da5c36d8a8333db0078198e (diff) | |
download | samba-04ec469c72c6a220108312cdec3d30081cfe938a.tar.gz samba-04ec469c72c6a220108312cdec3d30081cfe938a.tar.bz2 samba-04ec469c72c6a220108312cdec3d30081cfe938a.zip |
Fixup error mapping so we have only one table containing errno -> dos error -> NT STATUS
maps. Fixes problem with disk full returning incorrect error.
Jeremy.
(This used to be commit 16fcbf3c1ccf1d704765653f68395dd596c0d841)
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/error.c | 54 |
1 files changed, 26 insertions, 28 deletions
diff --git a/source3/lib/error.c b/source3/lib/error.c index cb2fffb962..df177bcea0 100644 --- a/source3/lib/error.c +++ b/source3/lib/error.c @@ -23,53 +23,51 @@ /* Mapping between Unix, DOS and NT error numbers */ -struct { - int unix_error; - int dos_error; - NTSTATUS nt_error; -} unix_dos_nt_errmap[] = { - { EPERM, ERRnoaccess, NT_STATUS_ACCESS_DENIED }, - { EACCES, ERRnoaccess, NT_STATUS_ACCESS_DENIED }, - { ENOENT, ERRbadfile, NT_STATUS_NO_SUCH_FILE }, - { ENOTDIR, ERRbadpath, NT_STATUS_NOT_A_DIRECTORY }, - { EIO, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR }, - { EBADF, ERRsrverror, NT_STATUS_INVALID_HANDLE }, - { EINVAL, ERRsrverror, NT_STATUS_INVALID_HANDLE }, - { EEXIST, ERRfilexists, NT_STATUS_ACCESS_DENIED}, - { ENFILE, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, - { EMFILE, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, - { ENOSPC, ERRdiskfull, NT_STATUS_DISK_FULL }, +struct unix_error_map unix_dos_nt_errmap[] = { + { EPERM, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED }, + { EACCES, ERRDOS, ERRnoaccess, NT_STATUS_ACCESS_DENIED }, + { ENOENT, ERRDOS, ERRbadfile, NT_STATUS_NO_SUCH_FILE }, + { ENOTDIR, ERRDOS, ERRbadpath, NT_STATUS_NOT_A_DIRECTORY }, + { EIO, ERRHRD, ERRgeneral, NT_STATUS_IO_DEVICE_ERROR }, + { EBADF, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE }, + { EINVAL, ERRSRV, ERRsrverror, NT_STATUS_INVALID_HANDLE }, + { EEXIST, ERRDOS, ERRfilexists, NT_STATUS_ACCESS_DENIED}, + { ENFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, + { EMFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, + { ENOSPC, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, #ifdef EDQUOT - { EDQUOT, ERRdiskfull, NT_STATUS_DISK_FULL }, + { EDQUOT, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, #endif #ifdef ENOTEMPTY - { ENOTEMPTY, ERRnoaccess, NT_STATUS_DIRECTORY_NOT_EMPTY }, + { ENOTEMPTY, ERRDOS, ERRnoaccess, NT_STATUS_DIRECTORY_NOT_EMPTY }, #endif #ifdef EXDEV - { EXDEV, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE }, + { EXDEV, ERRDOS, ERRdiffdevice, NT_STATUS_NOT_SAME_DEVICE }, #endif - { EROFS, ERRnowrite, NT_STATUS_ACCESS_DENIED }, - - { 0, 0, NT_STATUS_OK } +#ifdef EROFS + { EROFS, ERRHRD, ERRnowrite, NT_STATUS_ACCESS_DENIED }, +#endif + { 0, 0, 0, NT_STATUS_OK } }; -/* Map an NT error code from a Unix error code */ +/********************************************************************* + Map an NT error code from a Unix error code. +*********************************************************************/ + NTSTATUS map_nt_error_from_unix(int unix_error) { int i = 0; - if (unix_error == 0) return NT_STATUS_OK; + if (unix_error == 0) + return NT_STATUS_OK; /* Look through list */ while(unix_dos_nt_errmap[i].unix_error != 0) { - if (unix_dos_nt_errmap[i].unix_error == unix_error) { + if (unix_dos_nt_errmap[i].unix_error == unix_error) return unix_dos_nt_errmap[i].nt_error; - } - i++; } /* Default return */ - return NT_STATUS_ACCESS_DENIED; } |