226
rcls = CVAL(cli->inbuf,smb_rcls);
227
code = SVAL(cli->inbuf,smb_err);
229
if (eclass) *eclass = rcls;
230
if (ecode) *ecode = code;
233
/****************************************************************************
234
The following mappings need tidying up and moving into libsmb/errormap.c...
235
****************************************************************************/
237
/* Return a UNIX errno from a dos error class, error number tuple */
239
static int cli_errno_from_dos(uint8 eclass, uint32 num)
241
if (eclass == ERRDOS) {
243
case ERRbadfile: return ENOENT;
244
case ERRbadpath: return ENOTDIR;
245
case ERRnoaccess: return EACCES;
246
case ERRfilexists: return EEXIST;
247
case ERRrename: return EEXIST;
248
case ERRbadshare: return EBUSY;
249
case ERRlock: return EBUSY;
250
case ERRinvalidname: return ENOENT;
251
case ERRnosuchshare: return ENODEV;
255
if (eclass == ERRSRV) {
257
case ERRbadpw: return EPERM;
258
case ERRaccess: return EACCES;
259
case ERRnoresource: return ENOMEM;
260
case ERRinvdevice: return ENODEV;
261
case ERRinvnetname: return ENODEV;
265
/* for other cases */
224
*eclass = CVAL(cli->inbuf,smb_rcls);
225
*ecode = SVAL(cli->inbuf,smb_err);
269
228
/* Return a UNIX errno from a NT status code */
406
365
int cli_errno(struct cli_state *cli)
408
369
if (cli_is_nt_error(cli)) {
409
NTSTATUS status = cli_nt_error(cli);
410
return cli_errno_from_nt(status);
370
status = cli_nt_error(cli);
371
return cli_errno_from_nt(status);
413
374
if (cli_is_dos_error(cli)) {
417
378
cli_dos_error(cli, &eclass, &ecode);
418
return cli_errno_from_dos(eclass, ecode);
379
status = dos_to_ntstatus(eclass, ecode);
380
return cli_errno_from_nt(status);
421
383
/* for other cases */