/*
- Unix SMB/Netbios implementation.
- Version 3.0
+ Unix SMB/CIFS implementation.
client directory list routines
Copyright (C) Andrew Tridgell 1994-1998
len = CVAL(p, 26);
p += 27;
p += clistr_align_in(cli, p, 0);
+ /* the len+2 below looks strange but it is
+ important to cope with the differences
+ between win2000 and win9x for this call
+ (tridge) */
p += clistr_pull(cli, finfo->name, p,
- sizeof(finfo->name),
- len,
- STR_TERMINATE);
+ sizeof(finfo->name),
+ len+2,
+ STR_TERMINATE);
return PTR_DIFF(p, base);
case 2: /* this is what OS/2 uses mostly */
finfo->mode = CVAL(p,24);
len = CVAL(p, 30);
p += 31;
+ /* check for unisys! */
p += clistr_pull(cli, finfo->name, p,
sizeof(finfo->name),
len,
if (p[1] == 0 && namelen > 1) flags |= STR_UNICODE;
clistr_pull(cli, finfo->short_name, p,
sizeof(finfo->short_name),
- 24, flags);
+ slen, flags);
}
p += 24; /* short name? */
clistr_pull(cli, finfo->name, p,
}
if (cli_is_error(cli) || !rdata || !rparam)
- return -1;
+ break;
if (total_received == -1) total_received = 0;
total_received += ff_searchcount;
- if (rdata) free(rdata); rdata = NULL;
- if (rparam) free(rparam); rparam = NULL;
-
+ SAFE_FREE(rdata);
+ SAFE_FREE(rparam);
+
DEBUG(3,("received %d entries (eos=%d)\n",
ff_searchcount,ff_eos));
}
/* free up the dirlist buffer */
- if (dirlist) free(dirlist);
+ SAFE_FREE(dirlist);
return(total_received);
}
set_message(cli->outbuf,2,0,True);
- CVAL(cli->outbuf,smb_com) = SMBsearch;
+ SCVAL(cli->outbuf,smb_com,SMBsearch);
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
if (!tdl) {
DEBUG(0,("cli_list_old: failed to expand dirlist"));
- if (dirlist) free(dirlist);
+ SAFE_FREE(dirlist);
return 0;
}
else dirlist = tdl;
num_received += received;
- if (CVAL(cli->inbuf,smb_rcls) != 0) break;
+ if (cli_is_error(cli)) break;
}
if (!first) {
memset(cli->inbuf,'\0',smb_size);
set_message(cli->outbuf,2,0,True);
- CVAL(cli->outbuf,smb_com) = SMBfclose;
+ SCVAL(cli->outbuf,smb_com,SMBfclose);
SSVAL(cli->outbuf,smb_tid,cli->cnum);
cli_setup_packet(cli);
cli_setup_bcc(cli, p);
cli_send_smb(cli);
if (!cli_receive_smb(cli)) {
- DEBUG(0,("Error closing search: %s\n",smb_errstr(cli->inbuf)));
+ DEBUG(0,("Error closing search: %s\n",cli_errstr(cli)));
}
}
fn(&finfo, Mask, state);
}
- if (dirlist) free(dirlist);
+ SAFE_FREE(dirlist);
return(num_received);
}