Merge branch '3641_cleanup'

* 3641_cleanup:
  lib/mcconfig/paths.c: reduce scope of 'homedir' var.
  lib/mcconfig/paths.c: cleanup.
  doc/man/mc.1.in: fix substitution markers.
  src/vfs/fish/fish.c: apply coding guidelines.
  More use link_isdir().
  Get rid of #define const_cast().
  Fix typos.
  Define NCURSES_CONST if curses library doesn't define it.
  (ftpfs_open_data_connection): fix enable/disable interrupt key.
  (ftpfs_open_data_connection): fix socket leak in case of unsuccessful ftp connection.
  (dlg_adjust_position): refactoring.
  Ticket #3641: code cleanup before 4.8.18 release.
This commit is contained in:
Andrew Borodin 2016-09-11 11:11:47 +03:00
commit 74dda7352e
11 changed files with 81 additions and 96 deletions

View File

@ -377,7 +377,7 @@ AC_ARG_WITH([homedir],
if test x$with_homedir = xXDG; then if test x$with_homedir = xXDG; then
AC_DEFINE(MC_HOMEDIR_XDG, 1, [Define to enable XDG standard support]) AC_DEFINE(MC_HOMEDIR_XDG, 1, [Define to enable XDG standard support])
else else
AC_DEFINE(MC_HOMEDIR_XDG, 0, [Define to disble XDG standard support]) AC_DEFINE(MC_HOMEDIR_XDG, 0, [Define to disable XDG standard support])
AC_DEFINE_UNQUOTED([MC_USERCONF_DIR], ["$with_homedir"], [Where configs will be placed relative to $HOME]) AC_DEFINE_UNQUOTED([MC_USERCONF_DIR], ["$with_homedir"], [Where configs will be placed relative to $HOME])
fi fi

View File

@ -3691,7 +3691,7 @@ or without it). Search of skin\-file will occur in (to the first one found):
.B ~/.local/share/mc/skins/ .B ~/.local/share/mc/skins/
.br .br
2) 2)
.B @sysconfdir@/mc/skins/ .B %sysconfdir%/mc/skins/
.br .br
3) 3)
.B %prefix%/share/mc/skins/ .B %prefix%/share/mc/skins/

View File

@ -135,9 +135,6 @@
/* one caused by typing 'exit' or 'logout' in the subshell */ /* one caused by typing 'exit' or 'logout' in the subshell */
#define SUBSHELL_EXIT 128 #define SUBSHELL_EXIT 128
/* C++ style type casts */
#define const_cast(m_type, m_expr) ((m_type) (m_expr))
#if 0 #if 0
#ifdef MC_ENABLE_DEBUGGING_CODE #ifdef MC_ENABLE_DEBUGGING_CODE
#undef NDEBUG #undef NDEBUG

View File

@ -51,7 +51,6 @@ static char *mc_config_str = NULL;
static char *mc_cache_str = NULL; static char *mc_cache_str = NULL;
static char *mc_data_str = NULL; static char *mc_data_str = NULL;
static const char *homedir = NULL;
/* value of $MC_HOME */ /* value of $MC_HOME */
static const char *mc_home = NULL; static const char *mc_home = NULL;
@ -289,8 +288,6 @@ mc_config_init_config_paths (GError ** mcerror)
char *dir; char *dir;
#if MC_HOMEDIR_XDG == 0 #if MC_HOMEDIR_XDG == 0
char *defined_userconf_dir; char *defined_userconf_dir;
#else
const char *cdir;
#endif #endif
mc_return_if_error (mcerror); mc_return_if_error (mcerror);
@ -298,7 +295,7 @@ mc_config_init_config_paths (GError ** mcerror)
if (xdg_vars_initialized) if (xdg_vars_initialized)
return; return;
/* init mc_home and homedir if not yet */ /* init mc_home if not yet */
(void) mc_config_get_home_dir (); (void) mc_config_get_home_dir ();
#if MC_HOMEDIR_XDG #if MC_HOMEDIR_XDG
@ -318,35 +315,12 @@ mc_config_init_config_paths (GError ** mcerror)
} }
else else
{ {
cdir = g_get_user_config_dir (); mc_config_str =
if (cdir != NULL && *cdir != '\0') mc_config_init_one_config_path (g_get_user_config_dir (), MC_USERCONF_DIR, mcerror);
mc_config_str = mc_config_init_one_config_path (cdir, MC_USERCONF_DIR, mcerror); mc_cache_str =
else mc_config_init_one_config_path (g_get_user_cache_dir (), MC_USERCONF_DIR, mcerror);
{ mc_data_str =
dir = g_build_filename (homedir, ".config", (char *) NULL); mc_config_init_one_config_path (g_get_user_data_dir (), MC_USERCONF_DIR, mcerror);
mc_config_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
g_free (dir);
}
cdir = g_get_user_cache_dir ();
if (cdir != NULL && *cdir != '\0')
mc_cache_str = mc_config_init_one_config_path (cdir, MC_USERCONF_DIR, mcerror);
else
{
dir = g_build_filename (homedir, ".cache", (char *) NULL);
mc_cache_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
g_free (dir);
}
cdir = g_get_user_data_dir ();
if (cdir != NULL && *cdir != '\0')
mc_data_str = mc_config_init_one_config_path (cdir, MC_USERCONF_DIR, mcerror);
else
{
dir = g_build_filename (homedir, ".local", "share", (char *) NULL);
mc_data_str = mc_config_init_one_config_path (dir, MC_USERCONF_DIR, mcerror);
g_free (dir);
}
} }
mc_config_fix_migrated_rules (); mc_config_fix_migrated_rules ();
@ -415,9 +389,15 @@ mc_config_get_cache_path (void)
const char * const char *
mc_config_get_home_dir (void) mc_config_get_home_dir (void)
{ {
static const char *homedir = NULL;
if (homedir == NULL) if (homedir == NULL)
{ {
homedir = g_getenv ("MC_HOME"); homedir = g_getenv ("MC_HOME");
/* Prior to GLib 2.36, g_get_home_dir() ignores $HOME, which is why
* we read it ourselves. As that function's documentation explains,
* using $HOME is good for compatibility with other programs and
* for running from test frameworks. */
if (homedir == NULL || *homedir == '\0') if (homedir == NULL || *homedir == '\0')
homedir = g_getenv ("HOME"); homedir = g_getenv ("HOME");
else else

View File

@ -80,7 +80,7 @@
/*** file scope variables ************************************************************************/ /*** file scope variables ************************************************************************/
/* ncurses supports cursor positions only within window */ /* ncurses supports cursor positions only within window */
/* We use our own cursor coordibates to support partially visible widgets */ /* We use our own cursor coordinates to support partially visible widgets */
static int mc_curs_row, mc_curs_col; static int mc_curs_row, mc_curs_col;
/*** file scope functions ************************************************************************/ /*** file scope functions ************************************************************************/

View File

@ -20,6 +20,11 @@
#include <ncursesw/curses.h> #include <ncursesw/curses.h>
#endif /* USE_NCURSESW */ #endif /* USE_NCURSESW */
/* netbsd-libcurses doesn't define NCURSES_CONST */
#ifndef NCURSES_CONST
#define NCURSES_CONST const
#endif
/*** typedefs(not structures) and defined constants **********************************************/ /*** typedefs(not structures) and defined constants **********************************************/
/*** enums ***************************************************************************************/ /*** enums ***************************************************************************************/

View File

@ -686,11 +686,9 @@ dlg_widget_set_position (gpointer data, gpointer user_data)
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
static void static void
dlg_adjust_position (const WDialog * h, int *y, int *x, int *lines, int *cols) dlg_adjust_position (widget_pos_flags_t pos_flags, int *y, int *x, int *lines, int *cols)
{ {
const Widget *w = CONST_WIDGET (h); if ((pos_flags & WPOS_FULLSCREEN) != 0)
if ((w->pos_flags & WPOS_FULLSCREEN) != 0)
{ {
*y = 0; *y = 0;
*x = 0; *x = 0;
@ -699,17 +697,13 @@ dlg_adjust_position (const WDialog * h, int *y, int *x, int *lines, int *cols)
} }
else else
{ {
if ((w->pos_flags & WPOS_CENTER_HORZ) != 0) if ((pos_flags & WPOS_CENTER_HORZ) != 0)
*x = (COLS - *cols) / 2; *x = (COLS - *cols) / 2;
else
*x = w->x;
if ((w->pos_flags & WPOS_CENTER_VERT) != 0) if ((pos_flags & WPOS_CENTER_VERT) != 0)
*y = (LINES - *lines) / 2; *y = (LINES - *lines) / 2;
else
*y = w->y;
if ((w->pos_flags & WPOS_TRYUP) != 0) if ((pos_flags & WPOS_TRYUP) != 0)
{ {
if (*y > 3) if (*y > 3)
*y -= 2; *y -= 2;
@ -796,7 +790,7 @@ dlg_set_size (WDialog * h, int lines, int cols)
{ {
int x = 0, y = 0; int x = 0, y = 0;
dlg_adjust_position (h, &y, &x, &lines, &cols); dlg_adjust_position (WIDGET (h)->pos_flags, &y, &x, &lines, &cols);
dlg_set_position (h, y, x, lines, cols); dlg_set_position (h, y, x, lines, cols);
} }
@ -855,11 +849,10 @@ dlg_create (gboolean modal, int y1, int x1, int lines, int cols, widget_pos_flag
new_d = g_new0 (WDialog, 1); new_d = g_new0 (WDialog, 1);
w = WIDGET (new_d); w = WIDGET (new_d);
w->pos_flags = pos_flags; /* required for dlg_adjust_position() */ dlg_adjust_position (pos_flags, &y1, &x1, &lines, &cols);
dlg_adjust_position (new_d, &y1, &x1, &lines, &cols);
widget_init (w, y1, x1, lines, cols, (callback != NULL) ? callback : dlg_default_callback, widget_init (w, y1, x1, lines, cols, (callback != NULL) ? callback : dlg_default_callback,
mouse_callback); mouse_callback);
w->pos_flags = pos_flags; /* restore after widget_init() */ w->pos_flags = pos_flags;
w->options |= WOP_TOP_SELECT; w->options |= WOP_TOP_SELECT;
w->state |= WST_CONSTRUCT; w->state |= WST_CONSTRUCT;

View File

@ -55,9 +55,9 @@
/*** file scope macro definitions ****************************************************************/ /*** file scope macro definitions ****************************************************************/
#define MY_ISDIR(x) (\ #define MY_ISDIR(x) (\
(is_exe (x->st.st_mode) && !(S_ISDIR (x->st.st_mode) || x->f.link_to_dir) && exec_first) \ (is_exe (x->st.st_mode) && !(S_ISDIR (x->st.st_mode) || link_isdir (x)) && exec_first) \
? 1 \ ? 1 \
: ( (S_ISDIR (x->st.st_mode) || x->f.link_to_dir) ? 2 : 0) ) : ( (S_ISDIR (x->st.st_mode) || link_isdir (x)) ? 2 : 0) )
/*** file scope type declarations ****************************************************************/ /*** file scope type declarations ****************************************************************/

View File

@ -526,10 +526,10 @@ string_file_size (file_entry_t * fe, int len)
static const char * static const char *
string_file_size_brief (file_entry_t * fe, int len) string_file_size_brief (file_entry_t * fe, int len)
{ {
if (S_ISLNK (fe->st.st_mode) && !fe->f.link_to_dir) if (S_ISLNK (fe->st.st_mode) && !link_isdir (fe))
return _("SYMLINK"); return _("SYMLINK");
if ((S_ISDIR (fe->st.st_mode) || fe->f.link_to_dir) && !DIR_IS_DOTDOT (fe->fname)) if ((S_ISDIR (fe->st.st_mode) || link_isdir (fe)) && !DIR_IS_DOTDOT (fe->fname))
return _("SUB-DIR"); return _("SUB-DIR");
return string_file_size (fe, len); return string_file_size (fe, len);
@ -549,7 +549,7 @@ string_file_type (file_entry_t * fe, int len)
buffer[0] = PATH_SEP; buffer[0] = PATH_SEP;
else if (S_ISLNK (fe->st.st_mode)) else if (S_ISLNK (fe->st.st_mode))
{ {
if (fe->f.link_to_dir) if (link_isdir (fe))
buffer[0] = '~'; buffer[0] = '~';
else if (fe->f.stale_link) else if (fe->f.stale_link)
buffer[0] = '!'; buffer[0] = '!';
@ -2877,7 +2877,7 @@ chdir_other_panel (WPanel * panel)
if (get_other_type () != view_listing) if (get_other_type () != view_listing)
set_display_type (get_other_index (), view_listing); set_display_type (get_other_index (), view_listing);
if (S_ISDIR (entry->st.st_mode) || entry->f.link_to_dir) if (S_ISDIR (entry->st.st_mode) || link_isdir (entry))
new_dir_vpath = vfs_path_append_new (panel->cwd_vpath, entry->fname, (char *) NULL); new_dir_vpath = vfs_path_append_new (panel->cwd_vpath, entry->fname, (char *) NULL);
else else
{ {

View File

@ -245,24 +245,23 @@ fish_command (struct vfs_class *me, struct vfs_s_super *super, int wait_reply, c
FILE *logfile = MEDATA->logfile; FILE *logfile = MEDATA->logfile;
va_start (ap, fmt); va_start (ap, fmt);
str = g_strdup_vprintf (fmt, ap); str = g_strdup_vprintf (fmt, ap);
va_end (ap); va_end (ap);
if (logfile) if (logfile != NULL)
{ {
size_t ret; size_t ret;
ret = fwrite (str, strlen (str), 1, logfile); ret = fwrite (str, strlen (str), 1, logfile);
ret = fflush (logfile); ret = fflush (logfile);
(void) ret; (void) ret;
} }
tty_enable_interrupt_key (); tty_enable_interrupt_key ();
status = write (SUP->sockw, str, strlen (str)); status = write (SUP->sockw, str, strlen (str));
g_free (str); g_free (str);
tty_disable_interrupt_key (); tty_disable_interrupt_key ();
if (status < 0) if (status < 0)
return TRANSIENT; return TRANSIENT;
@ -340,7 +339,7 @@ fish_pipeopen (struct vfs_s_super *super, const char *path, const char *argv[])
res = open ("/dev/null", O_WRONLY); res = open ("/dev/null", O_WRONLY);
close (fileset2[0]); close (fileset2[0]);
close (fileset2[1]); close (fileset2[1]);
execvp (path, const_cast (char **, argv)); execvp (path, (char **) argv);
my_exit (3); my_exit (3);
} }
} }
@ -403,7 +402,6 @@ fish_info (struct vfs_class *me, struct vfs_s_super *super)
ERRNOR (E_PROTO, FALSE); ERRNOR (E_PROTO, FALSE);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
static void static void
@ -459,7 +457,7 @@ fish_open_archive_talk (struct vfs_class *me, struct vfs_s_super *super)
printf ("\n%s\n", _("fish: Waiting for initial line...")); printf ("\n%s\n", _("fish: Waiting for initial line..."));
if (!vfs_s_get_line (me, SUP->sockr, answer, sizeof (answer), ':')) if (vfs_s_get_line (me, SUP->sockr, answer, sizeof (answer), ':') == 0)
return FALSE; return FALSE;
if (strstr (answer, "assword") != NULL) if (strstr (answer, "assword") != NULL)
@ -474,13 +472,13 @@ fish_open_archive_talk (struct vfs_class *me, struct vfs_s_super *super)
if (super->path_element->password == NULL) if (super->path_element->password == NULL)
{ {
char *p, *op; char *p, *op;
p = g_strdup_printf (_("fish: Password is required for %s"), super->path_element->user); p = g_strdup_printf (_("fish: Password is required for %s"), super->path_element->user);
op = vfs_get_password (p); op = vfs_get_password (p);
g_free (p); g_free (p);
if (op == NULL) if (op == NULL)
return FALSE; return FALSE;
super->path_element->password = op; super->path_element->password = op;
} }
printf ("\n%s\n", _("fish: Sending password...")); printf ("\n%s\n", _("fish: Sending password..."));
@ -504,6 +502,7 @@ static int
fish_open_archive_int (struct vfs_class *me, struct vfs_s_super *super) fish_open_archive_int (struct vfs_class *me, struct vfs_s_super *super)
{ {
gboolean ftalk; gboolean ftalk;
/* hide panels */ /* hide panels */
pre_exec (); pre_exec ();
@ -658,10 +657,8 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
* Simple FISH debug interface :] * Simple FISH debug interface :]
*/ */
#if 0 #if 0
if (!(MEDATA->logfile)) if (MEDATA->logfile == NULL)
{
MEDATA->logfile = fopen ("/tmp/mc-FISH.sh", "w"); MEDATA->logfile = fopen ("/tmp/mc-FISH.sh", "w");
}
#endif #endif
logfile = MEDATA->logfile; logfile = MEDATA->logfile;
@ -675,6 +672,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
g_free (shell_commands); g_free (shell_commands);
g_free (quoted_path); g_free (quoted_path);
ent = vfs_s_generate_entry (me, NULL, dir, 0); ent = vfs_s_generate_entry (me, NULL, dir, 0);
while (TRUE) while (TRUE)
{ {
int res; int res;
@ -687,17 +685,17 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
me->verrno = ECONNRESET; me->verrno = ECONNRESET;
goto error; goto error;
} }
if (logfile) if (logfile != NULL)
{ {
fputs (buffer, logfile); fputs (buffer, logfile);
fputs ("\n", logfile); fputs ("\n", logfile);
fflush (logfile); fflush (logfile);
} }
if (!strncmp (buffer, "### ", 4)) if (strncmp (buffer, "### ", 4) == 0)
break; break;
if ((!buffer[0])) if (buffer[0] == '\0')
{ {
if (ent->name) if (ent->name != NULL)
{ {
vfs_s_insert_entry (me, dir, ent); vfs_s_insert_entry (me, dir, ent);
ent = vfs_s_generate_entry (me, NULL, dir, 0); ent = vfs_s_generate_entry (me, NULL, dir, 0);
@ -718,7 +716,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
filename_bound = filename + strlen (filename); filename_bound = filename + strlen (filename);
if (!strcmp (data_start, "\".\"") || !strcmp (data_start, "\"..\"")) if (strcmp (data_start, "\".\"") == 0 || strcmp (data_start, "\"..\"") == 0)
break; /* We'll do "." and ".." ourselves */ break; /* We'll do "." and ".." ourselves */
if (S_ISLNK (ST.st_mode)) if (S_ISLNK (ST.st_mode))
@ -736,7 +734,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
++filename; ++filename;
linkname = strstr (filename, "\" -> \""); linkname = strstr (filename, "\" -> \"");
if (!linkname) if (linkname == NULL)
{ {
/* broken client, or smth goes wrong */ /* broken client, or smth goes wrong */
linkname = filename_bound; linkname = filename_bound;
@ -788,6 +786,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
case 'P': case 'P':
{ {
size_t skipped; size_t skipped;
vfs_parse_filemode (buffer + 1, &skipped, &ST.st_mode); vfs_parse_filemode (buffer + 1, &skipped, &ST.st_mode);
break; break;
} }
@ -798,13 +797,14 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
we expect: Roctal-filemode octal-filetype uid.gid we expect: Roctal-filemode octal-filetype uid.gid
*/ */
size_t skipped; size_t skipped;
vfs_parse_raw_filemode (buffer + 1, &skipped, &ST.st_mode); vfs_parse_raw_filemode (buffer + 1, &skipped, &ST.st_mode);
break; break;
} }
case 'd': case 'd':
{ {
vfs_split_text (buffer + 1); vfs_split_text (buffer + 1);
if (!vfs_parse_filedate (0, &ST.st_ctime)) if (vfs_parse_filedate (0, &ST.st_ctime) == 0)
break; break;
ST.st_atime = ST.st_mtime = ST.st_ctime; ST.st_atime = ST.st_mtime = ST.st_ctime;
} }
@ -812,6 +812,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
case 'D': case 'D':
{ {
struct tm tim; struct tm tim;
/* cppcheck-suppress invalidscanf */ /* cppcheck-suppress invalidscanf */
if (sscanf (buffer + 1, "%d %d %d %d %d %d", &tim.tm_year, &tim.tm_mon, if (sscanf (buffer + 1, "%d %d %d %d %d %d", &tim.tm_year, &tim.tm_mon,
&tim.tm_mday, &tim.tm_hour, &tim.tm_min, &tim.tm_sec) != 6) &tim.tm_mday, &tim.tm_hour, &tim.tm_min, &tim.tm_sec) != 6)
@ -822,6 +823,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
case 'E': case 'E':
{ {
int maj, min; int maj, min;
/* cppcheck-suppress invalidscanf */ /* cppcheck-suppress invalidscanf */
if (sscanf (buffer + 1, "%d,%d", &maj, &min) != 2) if (sscanf (buffer + 1, "%d,%d", &maj, &min) != 2)
break; break;
@ -1105,7 +1107,9 @@ fish_ctl (void *fh, int ctlop, void *arg)
(void) arg; (void) arg;
(void) fh; (void) fh;
(void) ctlop; (void) ctlop;
return 0; return 0;
#if 0 #if 0
switch (ctlop) switch (ctlop)
{ {
@ -1113,15 +1117,14 @@ fish_ctl (void *fh, int ctlop, void *arg)
{ {
int v; int v;
if (!FH->linear) if (FH->linear == 0)
vfs_die ("You may not do this"); vfs_die ("You may not do this");
if (FH->linear == LS_LINEAR_CLOSED || FH->linear == LS_LINEAR_PREOPEN) if (FH->linear == LS_LINEAR_CLOSED || FH->linear == LS_LINEAR_PREOPEN)
return 0; return 0;
v = vfs_s_select_on_two (FH_SUPER->u.fish.sockr, 0); v = vfs_s_select_on_two (FH_SUPER->u.fish.sockr, 0);
if (((v < 0) && (errno == EINTR)) || v == 0)
return 1; return (((v < 0) && (errno == EINTR)) || v == 0) ? 1 : 0;
return 0;
} }
default: default:
return 0; return 0;
@ -1140,7 +1143,7 @@ fish_send_command (struct vfs_class *me, struct vfs_s_super *super, const char *
vfs_stamp_create (&vfs_fish_ops, super); vfs_stamp_create (&vfs_fish_ops, super);
if (r != COMPLETE) if (r != COMPLETE)
ERRNOR (E_REMOTE, -1); ERRNOR (E_REMOTE, -1);
if (flags & OPT_FLUSH) if ((flags & OPT_FLUSH) != 0)
vfs_s_invalidate (me, super); vfs_s_invalidate (me, super);
return 0; return 0;
} }
@ -1326,7 +1329,6 @@ fish_utime (const vfs_path_t * vpath, struct utimbuf *times)
gchar *shell_commands = NULL; gchar *shell_commands = NULL;
char utcmtime[16], utcatime[16]; char utcmtime[16], utcatime[16];
struct tm *gmt; struct tm *gmt;
char buf[BUF_LARGE]; char buf[BUF_LARGE];
const char *crpath; const char *crpath;
char *rpath; char *rpath;
@ -1366,7 +1368,6 @@ static int
fish_unlink (const vfs_path_t * vpath) fish_unlink (const vfs_path_t * vpath)
{ {
gchar *shell_commands = NULL; gchar *shell_commands = NULL;
char buf[BUF_LARGE]; char buf[BUF_LARGE];
const char *crpath; const char *crpath;
char *rpath; char *rpath;
@ -1394,7 +1395,6 @@ static int
fish_exists (const vfs_path_t * vpath) fish_exists (const vfs_path_t * vpath)
{ {
gchar *shell_commands = NULL; gchar *shell_commands = NULL;
char buf[BUF_LARGE]; char buf[BUF_LARGE];
const char *crpath; const char *crpath;
char *rpath; char *rpath;
@ -1450,7 +1450,7 @@ fish_mkdir (const vfs_path_t * vpath, mode_t mode)
if (ret_code != 0) if (ret_code != 0)
return ret_code; return ret_code;
if (!fish_exists (vpath)) if (fish_exists (vpath) == 0)
{ {
path_element->class->verrno = EACCES; path_element->class->verrno = EACCES;
return -1; return -1;
@ -1513,7 +1513,7 @@ fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t m
if ((flags & O_APPEND) != 0) if ((flags & O_APPEND) != 0)
fish->append = TRUE; fish->append = TRUE;
if (!fh->ino->localname) if (fh->ino->localname == NULL)
{ {
vfs_path_t *vpath; vfs_path_t *vpath;
int tmp_handle; int tmp_handle;
@ -1530,9 +1530,9 @@ fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t m
} }
return 0; return 0;
} }
if (!fh->ino->localname && vfs_s_retrieve_file (me, fh->ino) == -1) if (fh->ino->localname == NULL && vfs_s_retrieve_file (me, fh->ino) == -1)
goto fail; goto fail;
if (!fh->ino->localname) if (fh->ino->localname == NULL)
vfs_die ("retrieve_file failed to fill in localname"); vfs_die ("retrieve_file failed to fill in localname");
return 0; return 0;

View File

@ -1370,13 +1370,21 @@ ftpfs_open_data_connection (struct vfs_class *me, struct vfs_s_super *super, con
return -1; return -1;
if (ftpfs_changetype (me, super, isbinary) == -1) if (ftpfs_changetype (me, super, isbinary) == -1)
{
close (s);
return -1; return -1;
}
if (reget > 0) if (reget > 0)
{ {
j = ftpfs_command (me, super, WAIT_REPLY, "REST %d", reget); j = ftpfs_command (me, super, WAIT_REPLY, "REST %d", reget);
if (j != CONTINUE) if (j != CONTINUE)
{
close (s);
return -1; return -1;
}
} }
if (remote) if (remote)
{ {
char *remote_path = ftpfs_translate_path (me, super, remote); char *remote_path = ftpfs_translate_path (me, super, remote);
@ -1389,22 +1397,24 @@ ftpfs_open_data_connection (struct vfs_class *me, struct vfs_s_super *super, con
j = ftpfs_command (me, super, WAIT_REPLY, "%s", cmd); j = ftpfs_command (me, super, WAIT_REPLY, "%s", cmd);
if (j != PRELIM) if (j != PRELIM)
{
close (s);
ERRNOR (EPERM, -1); ERRNOR (EPERM, -1);
tty_enable_interrupt_key (); }
if (SUP->use_passive_connection) if (SUP->use_passive_connection)
data = s; data = s;
else else
{ {
tty_enable_interrupt_key ();
data = accept (s, (struct sockaddr *) &from, &fromlen); data = accept (s, (struct sockaddr *) &from, &fromlen);
if (data < 0) if (data < 0)
{
ftpfs_errno = errno; ftpfs_errno = errno;
close (s); tty_disable_interrupt_key ();
return -1;
}
close (s); close (s);
if (data < 0)
return -1;
} }
tty_disable_interrupt_key ();
SUP->ctl_connection_busy = 1; SUP->ctl_connection_busy = 1;
return data; return data;
} }