mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-03 18:14:25 +03:00
* smbfs.c (open_readwrite): New function to replace open_read()
and open_write(). Use cli_close() if cli_qfileinfo() or cli_getattrE() fail. (smbfs_open): Use open_readwrite(). Free remote_handle if open_readwrite() fails.
This commit is contained in:
parent
ebf1bcfa33
commit
6f188101cf
@ -1,3 +1,12 @@
|
||||
2003-04-03 Andrew V. Samoilov <sav@bcs.zp.ua>
|
||||
|
||||
* smbfs.c (open_readwrite): New function to replace open_read()
|
||||
and open_write(). Use cli_close() if cli_qfileinfo() or
|
||||
cli_getattrE() fail.
|
||||
|
||||
(smbfs_open): Use open_readwrite(). Free remote_handle if
|
||||
open_readwrite() fails.
|
||||
|
||||
2003-03-24 Adam Byrtek <alpha@debian.org>
|
||||
|
||||
* extfs/patchfs.in: Treat '\ No newline at end of file' line
|
||||
@ -1162,7 +1171,7 @@
|
||||
|
||||
* smbfs.c (smbfs_add_dots): New function. Insert a "." and ".."
|
||||
entries into the linked list.
|
||||
(smbfs_loaddir): Call smbfs_add_dots for shares or servers.
|
||||
(smbfs_loaddir): Call smbfs_add_dots() for shares or servers.
|
||||
(smbfs_get_free_bucket): Eliminate time.
|
||||
(fake_share_stat): Make path const.
|
||||
|
||||
@ -1194,7 +1203,7 @@
|
||||
By David Kaelbling <drk@sgi.com>.
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=60933
|
||||
|
||||
* cpio.c (cpio_read_bin_head): Release name if mc_read fails.
|
||||
* cpio.c (cpio_read_bin_head): Release name if mc_read() fails.
|
||||
(cpio_read_crc_head): Likewise.
|
||||
|
||||
2001-10-25 Andrew V. Samoilov <kai@cmail.ru>
|
||||
@ -1204,13 +1213,13 @@
|
||||
By David Kaelbling <drk@sgi.com>.
|
||||
http://bugzilla.gnome.org/show_bug.cgi?id=60933
|
||||
|
||||
* (cpio_read_oldc_head): Release name if mc_read fails.
|
||||
* (cpio_read_oldc_head): Release name if mc_read() fails.
|
||||
|
||||
2001-10-24 Andrew V. Samoilov <kai@cmail.ru>
|
||||
|
||||
* tcputil.c (rpc_get): Add missing va_end()s.
|
||||
Fix memory leaking.
|
||||
* smbfs.h: Declare smbfs_set_debug.
|
||||
* smbfs.h: Declare smbfs_set_debug().
|
||||
|
||||
2001-10-20 Pavel Roskin <proski@gnu.org>
|
||||
|
||||
@ -1324,14 +1333,14 @@
|
||||
|
||||
2001-08-06 Andrew V. Samoilov <kai@cmail.ru>
|
||||
|
||||
* smbfs.c: Eliminate smbfs_get_free_bucket_init. convert_path
|
||||
gives malloced filename, so this memory must be released after use.
|
||||
* smbfs.c: Eliminate smbfs_get_free_bucket_init(). convert_path()
|
||||
gives malloc()ed filename, so this memory must be released after use.
|
||||
|
||||
(reconnect): Fix segmentation fault.
|
||||
(smbfs_loadddir): Don't g_strdup path.
|
||||
(smbfs_get_free_bucket): Eliminate smbfs_get_free_bucket_init and
|
||||
(smbfs_loadddir): Don't g_strdup() path.
|
||||
(smbfs_get_free_bucket): Eliminate smbfs_get_free_bucket_init() and
|
||||
smbfs_connections initialisation.
|
||||
(smbfs_open_link): Likewise. Release host after get_master_browser.
|
||||
(smbfs_open_link): Likewise. Release host after get_master_browser().
|
||||
(get_stat_info): Fix unneeded g_strdup/g_free calls.
|
||||
(smbfs_mkdir): Release path after use.
|
||||
(smbfs_mkdir): Likewise.
|
||||
@ -1355,8 +1364,8 @@
|
||||
|
||||
* samba/libsmb/clientgen.c (cli_chkpath): Fix possible buffer overflow.
|
||||
* smbfs.c (new_dir_entry): New function with repeated code from
|
||||
browsing_helper, loaddir_helper and server_browsing_helper.
|
||||
(browsing_helper): Use new_dir_entry.
|
||||
browsing_helper(), loaddir_helper() and server_browsing_helper().
|
||||
(browsing_helper): Use new_dir_entry().
|
||||
(loaddir_helper): Likewise.
|
||||
(server_browsing_helper): Likewise.
|
||||
|
||||
@ -1519,8 +1528,9 @@
|
||||
|
||||
2001-06-01 Andrew V. Samoilov <sav@bcs.zp.ua>
|
||||
|
||||
* ftpfs.h: Declare use_netrc, ftpfs_retry_seconds, ftpfs_first_cd_then_ls,
|
||||
ftpfs_use_passive_connections and ftpfs_use_unix_list_options.
|
||||
* ftpfs.h: Declare use_netrc, ftpfs_retry_seconds,
|
||||
ftpfs_first_cd_then_ls, ftpfs_use_passive_connections and
|
||||
ftpfs_use_unix_list_options.
|
||||
|
||||
* vfs.c [VFS_STANDALONE]: Undefine WITH_SMBFS, they are mutually
|
||||
exclusive now.
|
||||
@ -1572,8 +1582,8 @@
|
||||
(loaddir_helper): Don't ignore hidden files, style fixes.
|
||||
(browsing_helper): typestr declared as char *, fstrcpy replaced by =.
|
||||
|
||||
(do_connect): Call cli_shutdown () and authinfo_remove () if
|
||||
cli_session_setup () fails. It is not good idea to remember
|
||||
(do_connect): Call cli_shutdown() and authinfo_remove() if
|
||||
cli_session_setup() fails. It is not good idea to remember
|
||||
wrong username/password.
|
||||
|
||||
(smbfs_free_dir): Nested between #ifdef SMBFS_FREE_DIR ... #endif.
|
||||
@ -1646,12 +1656,12 @@
|
||||
|
||||
2001-03-15 Andrew V. Samoilov <sav@bcs.zp.ua>
|
||||
|
||||
* samba/libsmb/smbdes.c: undefine uchar before redefine it
|
||||
* samba/libsmb/smbdes.c: Undefine uchar before redefine it
|
||||
|
||||
* smbfs.c (smbfs_close): honour changed semantics for return value
|
||||
* smbfs.c (smbfs_close): Honour changed semantics for return value
|
||||
(on error -1 is expected).
|
||||
|
||||
* (fs): it is at least strange use char * for counter. Changed to int
|
||||
* (fs): It is at least strange use char * for counter. Changed to int
|
||||
|
||||
2001-03-14 Pavel Roskin <proski@gnu.org>
|
||||
|
||||
|
93
vfs/smbfs.c
93
vfs/smbfs.c
@ -1,14 +1,15 @@
|
||||
/* Virtual File System: Midnight Commander file system.
|
||||
|
||||
|
||||
Copyright (C) 1995, 1996, 1997 The Free Software Foundation
|
||||
|
||||
Written by Wayne Roberts <wroberts1@home.com>
|
||||
Written by Wayne Roberts <wroberts1@home.com>, 1997
|
||||
Andrew V. Samoilov <sav@bcs.zp.ua> 2002, 2003
|
||||
|
||||
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
|
||||
the License, or (at your option) any later version.
|
||||
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
@ -1737,53 +1738,44 @@ smbfs_setctl (vfs *me, char *path, int ctlop, char *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static smbfs_handle *
|
||||
open_write (smbfs_handle *remote_handle, char *rname, int flags, int mode)
|
||||
{
|
||||
if (flags & O_TRUNC) /* if it exists truncate to zero */
|
||||
DEBUG(3, ("open_write: O_TRUNC\n"));
|
||||
|
||||
remote_handle->fnum = cli_open(remote_handle->cli, rname, flags, DENY_NONE);
|
||||
|
||||
if (remote_handle->fnum == -1) {
|
||||
message_3s (1, MSG_ERROR, _(" %s opening remote file %s "),
|
||||
cli_errstr(remote_handle->cli), CNV_LANG(rname));
|
||||
DEBUG(1,("smbfs_open(rname:%s) error:%s\n",
|
||||
rname, cli_errstr(remote_handle->cli)));
|
||||
my_errno = cli_error(remote_handle->cli, NULL, &err, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return remote_handle;
|
||||
}
|
||||
|
||||
static smbfs_handle *
|
||||
open_read (smbfs_handle *remote_handle, char *rname, int flags, int mode)
|
||||
open_readwrite (smbfs_handle *remote_handle, char *rname, int flags, int mode)
|
||||
{
|
||||
size_t size;
|
||||
size_t size;
|
||||
|
||||
remote_handle->fnum =
|
||||
cli_open(remote_handle->cli, rname, O_RDONLY, DENY_NONE);
|
||||
if (flags & O_TRUNC) /* if it exists truncate to zero */
|
||||
DEBUG (3, ("smbfs_open: O_TRUNC\n"));
|
||||
|
||||
if (remote_handle->fnum == -1) {
|
||||
message_3s (1, MSG_ERROR, _(" %s opening remote file %s "),
|
||||
cli_errstr(remote_handle->cli), CNV_LANG(rname));
|
||||
DEBUG(1,("smbfs_open(rname:%s) error:%s\n",
|
||||
rname, cli_errstr(remote_handle->cli)));
|
||||
my_errno = cli_error(remote_handle->cli, NULL, &err, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!cli_qfileinfo(remote_handle->cli, remote_handle->fnum,
|
||||
&remote_handle->attr, &size, NULL, NULL, NULL, NULL, NULL) &&
|
||||
!cli_getattrE(remote_handle->cli, remote_handle->fnum,
|
||||
&remote_handle->attr, &size, NULL, NULL, NULL)) {
|
||||
message_2s (1, MSG_ERROR, " getattrib: %s ",
|
||||
cli_errstr(remote_handle->cli));
|
||||
DEBUG(1,("smbfs_open(rname:%s) getattrib:%s\n",
|
||||
rname, cli_errstr(remote_handle->cli)));
|
||||
my_errno = cli_error(remote_handle->cli, NULL, &err, NULL);
|
||||
return NULL;
|
||||
remote_handle->fnum =
|
||||
cli_open (remote_handle->cli, rname, flags & O_CREAT ? flags : O_RDONLY,
|
||||
DENY_NONE);
|
||||
|
||||
if (remote_handle->fnum == -1) {
|
||||
message_3s (1, MSG_ERROR, _(" %s opening remote file %s "),
|
||||
cli_errstr (remote_handle->cli), CNV_LANG (rname));
|
||||
DEBUG (1, ("smbfs_open(rname:%s) error:%s\n",
|
||||
rname, cli_errstr (remote_handle->cli)));
|
||||
my_errno = cli_error (remote_handle->cli, NULL, &err, NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (flags & O_CREAT)
|
||||
return remote_handle;
|
||||
|
||||
if (!cli_qfileinfo (remote_handle->cli, remote_handle->fnum,
|
||||
&remote_handle->attr, &size, NULL, NULL, NULL, NULL,
|
||||
NULL)
|
||||
&& !cli_getattrE (remote_handle->cli, remote_handle->fnum,
|
||||
&remote_handle->attr, &size, NULL, NULL, NULL)) {
|
||||
message_2s (1, MSG_ERROR, " getattrib: %s ",
|
||||
cli_errstr (remote_handle->cli));
|
||||
DEBUG (1,
|
||||
("smbfs_open(rname:%s) getattrib:%s\n", rname,
|
||||
cli_errstr (remote_handle->cli)));
|
||||
my_errno = cli_error (remote_handle->cli, NULL, &err, NULL);
|
||||
cli_close (remote_handle->cli, remote_handle->fnum);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return remote_handle;
|
||||
@ -1797,25 +1789,24 @@ smbfs_open (vfs *me, char *file, int flags, int mode)
|
||||
smbfs_connection *sc;
|
||||
smbfs_handle *remote_handle;
|
||||
|
||||
DEBUG(3, ("smbfs_open(file:%s, flags:%d, mode:%d)\n", file, flags, mode));
|
||||
DEBUG(3, ("smbfs_open(file:%s, flags:%d, mode:%o)\n", file, flags, mode));
|
||||
|
||||
if (!(remote_file = smbfs_get_path (&sc, file)))
|
||||
return 0;
|
||||
|
||||
p = remote_file;
|
||||
convert_path(&remote_file, FALSE);
|
||||
convert_path (&remote_file, FALSE);
|
||||
g_free (p);
|
||||
|
||||
remote_handle = g_new (smbfs_handle, 2);
|
||||
remote_handle->cli = sc->cli;
|
||||
remote_handle->nread = 0;
|
||||
|
||||
if (flags & O_CREAT)
|
||||
ret = open_write(remote_handle, remote_file, flags, mode);
|
||||
else
|
||||
ret = open_read(remote_handle, remote_file, flags, mode);
|
||||
ret = open_readwrite (remote_handle, remote_file, flags, mode);
|
||||
|
||||
g_free (remote_file);
|
||||
if (!ret)
|
||||
g_free (remote_handle);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user