mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-22 20:36:50 +03:00
* samba/includes/proto.h, samba/libsmb/nterr.c (get_nt_error): return
NULL when appropriative error message can't be found as it is expected in cli_errstr(). Return type changed to const char * * smbfs.c (smbfs_fill_names): implemented (smbfs_stat): unneeded g_strdup/g_free calls removed (smbfs_loaddir): memory leaking fixed
This commit is contained in:
parent
d86427a196
commit
0d20e2fa8a
@ -532,7 +532,7 @@ void sort_query_replies(char *data, int n, struct in_addr ip);
|
||||
|
||||
/*The following definitions come from libsmb/nterr.c */
|
||||
|
||||
char *get_nt_error_msg(uint32 nt_code);
|
||||
const char *get_nt_error_msg(uint32 nt_code);
|
||||
|
||||
/*The following definitions come from libsmb/passchange.c */
|
||||
|
||||
|
@ -520,24 +520,20 @@ nt_err_code_struct const nt_errs[] =
|
||||
/*****************************************************************************
|
||||
returns an NT error message. not amazingly helpful, but better than a number.
|
||||
*****************************************************************************/
|
||||
char *get_nt_error_msg(uint32 nt_code)
|
||||
const char *get_nt_error_msg(uint32 nt_code)
|
||||
{
|
||||
static pstring msg;
|
||||
int idx = 0;
|
||||
|
||||
pstrcpy(msg, "Unknown NT error");
|
||||
|
||||
nt_code &= 0xFFFF;
|
||||
|
||||
while (nt_errs[idx].nt_errstr != NULL)
|
||||
{
|
||||
if (nt_errs[idx].nt_errcode == nt_code)
|
||||
{
|
||||
pstrcpy(msg, nt_errs[idx].nt_errstr);
|
||||
return msg;
|
||||
return nt_errs[idx].nt_errstr;
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
return msg;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
54
vfs/smbfs.c
54
vfs/smbfs.c
@ -2,9 +2,10 @@
|
||||
|
||||
Copyright (C) 1995, 1996, 1997 The Free Software Foundation
|
||||
|
||||
Written by Wayne Roberts
|
||||
<wroberts1@home.com>
|
||||
|
||||
Written by Wayne Roberts <wroberts1@home.com>
|
||||
|
||||
$Id$
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License
|
||||
as published by the Free Software Foundation; either version 2 of
|
||||
@ -422,7 +423,18 @@ smbfs_init(vfs *me)
|
||||
static void
|
||||
smbfs_fill_names (vfs *me, void (*func)(char *))
|
||||
{
|
||||
DEBUG(3, ("smbfs_fill_names()\n"));
|
||||
int i;
|
||||
char *path;
|
||||
for (i = 0; i < SMBFS_MAX_CONNECTIONS; i++) {
|
||||
if (smbfs_connections [i].cli) {
|
||||
path = g_strconcat (URL_HEADER,
|
||||
smbfs_connections[i].host,
|
||||
"/", smbfs_connections[i].service,
|
||||
NULL);
|
||||
(*func)(path);
|
||||
g_free (path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define CNV_LANG(s) dos_to_unix(s,False)
|
||||
@ -773,8 +785,7 @@ smbfs_loaddir (opendir_info *smbfs_info)
|
||||
int servlen = strlen(smbfs_info->conn->service);
|
||||
char *p;
|
||||
/* int retries = 0; */
|
||||
char *my_dirname = g_strdup(smbfs_info->dirname);
|
||||
p = my_dirname;
|
||||
char *my_dirname = smbfs_info->dirname;
|
||||
|
||||
DEBUG(3, ("smbfs_loaddir: dirname:%s\n", my_dirname));
|
||||
first_direntry = TRUE;
|
||||
@ -809,6 +820,7 @@ smbfs_loaddir (opendir_info *smbfs_info)
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
p = my_dirname = g_strdup (my_dirname);
|
||||
/* do regular directory listing */
|
||||
if(strncmp(smbfs_info->conn->service, my_dirname+1, servlen) == 0) {
|
||||
/* strip share name from dir */
|
||||
@ -821,20 +833,22 @@ smbfs_loaddir (opendir_info *smbfs_info)
|
||||
DEBUG(6, ("smbfs_loaddir: cli->share: %s\n", smbfs_info->conn->cli->share));
|
||||
DEBUG(6, ("smbfs_loaddir: calling cli_list with mask %s\n", my_dirname));
|
||||
/* do file listing: cli_list returns number of files */
|
||||
if (cli_list(
|
||||
if (cli_list(
|
||||
smbfs_info->conn->cli, my_dirname, attribute, loaddir_helper) < 0) {
|
||||
/* cli_list returns -1 if directory empty or cannot read socket */
|
||||
my_errno = cli_error(smbfs_info->conn->cli, NULL, &err, NULL);
|
||||
g_free (p);
|
||||
return 0;
|
||||
}
|
||||
if (strlen(my_dirname) == 0)
|
||||
if (*(my_dirname) == 0)
|
||||
smbfs_info->dirname = smbfs_info->conn->service;
|
||||
g_free(p);
|
||||
/* do_dskattr(); */
|
||||
g_free (p);
|
||||
/* do_dskattr(); */
|
||||
|
||||
done:
|
||||
/* current_info->parent = smbfs_info->dirname; */
|
||||
smbfs_info->current = smbfs_info->entries;
|
||||
|
||||
smbfs_info->current = smbfs_info->entries;
|
||||
return 1; /* 1 = ok */
|
||||
}
|
||||
|
||||
@ -1575,7 +1589,7 @@ smbfs_chdir (vfs *me, char *path)
|
||||
}
|
||||
|
||||
static int
|
||||
loaddir(vfs *me, char *path)
|
||||
loaddir(vfs *me, const char *path)
|
||||
{
|
||||
void *info;
|
||||
char *mypath, *p;
|
||||
@ -1604,7 +1618,7 @@ smbfs_stat (vfs *me, char *path, struct stat *buf)
|
||||
char *remote_dir;
|
||||
smbfs_connection *sc;
|
||||
pstring server_url;
|
||||
char *service, *p, *mypath, *pp;
|
||||
char *service, *p, *pp;
|
||||
|
||||
DEBUG(3, ("smbfs_stat(path:%s)\n", path));
|
||||
|
||||
@ -1623,32 +1637,30 @@ smbfs_stat (vfs *me, char *path, struct stat *buf)
|
||||
pstrcat(server_url, current_bucket->host);
|
||||
|
||||
/* check if stating server */
|
||||
p = mypath = g_strdup(path);
|
||||
p = path;
|
||||
if (strncmp(p, URL_HEADER, HEADER_LEN)) {
|
||||
DEBUG(1, ("'%s' doesnt start with '%s' (length %d)\n",
|
||||
p, URL_HEADER, HEADER_LEN));
|
||||
return -1;
|
||||
} else
|
||||
p += HEADER_LEN;
|
||||
}
|
||||
|
||||
p += HEADER_LEN;
|
||||
if (*p == '/')
|
||||
p++;
|
||||
if (!strchr(p, '/')) {
|
||||
g_free(mypath);
|
||||
if (!current_info->server_list) {
|
||||
if (loaddir(me, path) < 0)
|
||||
return -1;
|
||||
}
|
||||
return fake_server_stat(server_url, path, buf);
|
||||
}
|
||||
if (strlen(p) == 0)
|
||||
DEBUG(1, ("zero length p, mypath:'%s'", mypath));
|
||||
if (*(p) == 0)
|
||||
DEBUG(1, ("zero length p, path:'%s'", path));
|
||||
p = strchr(p, '/'); /* advance past next '/' */
|
||||
p++;
|
||||
if (!strchr(p, '/')) {
|
||||
g_free(mypath);
|
||||
return fake_share_stat(server_url, path, buf);
|
||||
}
|
||||
g_free(mypath);
|
||||
|
||||
/* stating inside share at this point */
|
||||
if (!(remote_dir = smbfs_get_path (&sc, path))) /* connects if necessary */
|
||||
|
Loading…
Reference in New Issue
Block a user