/*
- Unix SMB/Netbios implementation.
- Version 2.0
+ Unix SMB/CIFS implementation.
SMB wrapper directory functions
Copyright (C) Andrew Tridgell 1998
static struct smbw_dir *smbw_dirs;
extern struct bitmap *smbw_file_bmap;
-extern int DEBUGLEVEL;
extern int smbw_busy;
*******************************************************/
static void free_dir(struct smbw_dir *dir)
{
- if (dir->list) {
- free(dir->list);
- }
- if (dir->path) free(dir->path);
+ if(!dir) return;
+
+ SAFE_FREE(dir->list);
+ SAFE_FREE(dir->path);
ZERO_STRUCTP(dir);
- free(dir);
+ SAFE_FREE(dir);
}
static struct smbw_dir *cur_dir;
static void smbw_dir_add(struct file_info *finfo, const char *mask,
void *state)
{
+ struct file_info *cdl;
+
DEBUG(5,("%s\n", finfo->name));
if (cur_dir->malloced == cur_dir->count) {
- cur_dir->list = (struct file_info *)Realloc(cur_dir->list,
+ cdl = (struct file_info *)Realloc(cur_dir->list,
sizeof(cur_dir->list[0])*
(cur_dir->count+100));
- if (!cur_dir->list) {
+ if (!cdl) {
/* oops */
return;
}
+ cur_dir->list = cdl;
cur_dir->malloced += 100;
}
smbw_NetServerEnum(&srv->cli, srv->server_name, SV_TYPE_ALL,
smbw_server_add, NULL);
*p = '#';
- } else if (strcmp(srv->cli.dev,"IPC") == 0) {
+ } else if ((strcmp(srv->cli.dev,"IPC") == 0) || (strcasecmp(share,"IPC$") == 0)) {
DEBUG(4,("doing NetShareEnum\n"));
smbw_share_add(".",0,"", NULL);
smbw_share_add("..",0,"", NULL);
return dir->fd;
failed:
- if (dir) {
- free_dir(dir);
- }
-
+ free_dir(dir);
+
return -1;
}
goto failed;
}
- if (strncmp(srv->cli.dev,"IPC",3) &&
+ if (strncmp(srv->cli.dev,"IPC",3) &&
+ strcasecmp(share, "IPC$") &&
strncmp(srv->cli.dev,"LPT",3) &&
!smbw_getatr(srv, path,
&mode, NULL, NULL, NULL, NULL, NULL)) {
struct smbw_dir *d = (struct smbw_dir *)dirp;
return smbw_dir_lseek(d->fd,0,SEEK_CUR);
}
-