From f690a968e789da8a77338afbe5490b865c25cc99 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 24 Feb 2006 05:47:19 +0000 Subject: r13669: Get rid of poor errno mapping table. Bounce through NTSTATUS instead. DO NOT MERGE FOR 3.0.21c PLEASE. Jeremy. (This used to be commit 3de0d9af6925e3dc0328c02c2a30127ea5c82a83) --- source3/libsmb/clierror.c | 45 ++++++--------------------------------------- 1 file changed, 6 insertions(+), 39 deletions(-) (limited to 'source3/libsmb/clierror.c') diff --git a/source3/libsmb/clierror.c b/source3/libsmb/clierror.c index 9d7555a720..b84a8ee70f 100644 --- a/source3/libsmb/clierror.c +++ b/source3/libsmb/clierror.c @@ -230,42 +230,6 @@ void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *ecode) if (ecode) *ecode = code; } -/**************************************************************************** - The following mappings need tidying up and moving into libsmb/errormap.c... -****************************************************************************/ - -/* Return a UNIX errno from a dos error class, error number tuple */ - -static int cli_errno_from_dos(uint8 eclass, uint32 num) -{ - if (eclass == ERRDOS) { - switch (num) { - case ERRbadfile: return ENOENT; - case ERRbadpath: return ENOTDIR; - case ERRnoaccess: return EACCES; - case ERRfilexists: return EEXIST; - case ERRrename: return EEXIST; - case ERRbadshare: return EBUSY; - case ERRlock: return EBUSY; - case ERRinvalidname: return ENOENT; - case ERRnosuchshare: return ENODEV; - } - } - - if (eclass == ERRSRV) { - switch (num) { - case ERRbadpw: return EPERM; - case ERRaccess: return EACCES; - case ERRnoresource: return ENOMEM; - case ERRinvdevice: return ENODEV; - case ERRinvnetname: return ENODEV; - } - } - - /* for other cases */ - return EINVAL; -} - /* Return a UNIX errno from a NT status code */ static struct { NTSTATUS status; @@ -405,9 +369,11 @@ static int cli_errno_from_nt(NTSTATUS status) int cli_errno(struct cli_state *cli) { + NTSTATUS status; + if (cli_is_nt_error(cli)) { - NTSTATUS status = cli_nt_error(cli); - return cli_errno_from_nt(status); + status = cli_nt_error(cli); + return cli_errno_from_nt(status); } if (cli_is_dos_error(cli)) { @@ -415,7 +381,8 @@ int cli_errno(struct cli_state *cli) uint32 ecode; cli_dos_error(cli, &eclass, &ecode); - return cli_errno_from_dos(eclass, ecode); + status = dos_to_ntstatus(eclass, ecode); + return cli_errno_from_nt(status); } /* for other cases */ -- cgit