mirror of
https://github.com/samba-team/samba.git
synced 2025-07-29 15:42:04 +03:00
A rewrite of the error handling in the libsmb client code. I've separated
out the error handling into a bunch of separate functions rather than all
being handled in one big function.
Fetch error codes from the last received packet:
void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *num);
uint32 cli_nt_error(struct cli_state *);
Convert errors to UNIX errno values:
int cli_errno_from_dos(uint8 eclass, uint32 num);
int cli_errno_from_nt(uint32 status);
int cli_errno(struct cli_state *cli);
Detect different kinds of errors:
BOOL cli_is_dos_error(struct cli_state *cli);
BOOL cli_is_nt_error(struct cli_state *cli);
BOOL cli_is_error(struct cli_state *cli);
This also means we now support CAP_STATUS32 as we can decode and understand
NT errors instead of just DOS errors. Yay!
Ported a whole bunch of files in libsmb to use this new API instead of the
just the DOS error.
(This used to be commit 6dbdb0d813
)
This commit is contained in:
@ -204,12 +204,13 @@ int cli_list_new(struct cli_state *cli,const char *Mask,uint16 attribute,
|
||||
|
||||
if (!cli_receive_trans(cli, SMBtrans2,
|
||||
&rparam, ¶m_len,
|
||||
&rdata, &data_len)) {
|
||||
&rdata, &data_len) &&
|
||||
cli_is_dos_error(cli)) {
|
||||
/* we need to work around a Win95 bug - sometimes
|
||||
it gives ERRSRV/ERRerror temprarily */
|
||||
uint8 eclass;
|
||||
uint32 ecode;
|
||||
cli_error(cli, &eclass, &ecode, NULL);
|
||||
cli_dos_error(cli, &eclass, &ecode);
|
||||
if (eclass != ERRSRV || ecode != ERRerror) break;
|
||||
msleep(100);
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user