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
AC_DEFINE(MC_HOMEDIR_XDG, 1, [Define to enable XDG standard support])
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])
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/
.br
2)
.B @sysconfdir@/mc/skins/
.B %sysconfdir%/mc/skins/
.br
3)
.B %prefix%/share/mc/skins/

View File

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

View File

@ -51,7 +51,6 @@ static char *mc_config_str = NULL;
static char *mc_cache_str = NULL;
static char *mc_data_str = NULL;
static const char *homedir = NULL;
/* value of $MC_HOME */
static const char *mc_home = NULL;
@ -289,8 +288,6 @@ mc_config_init_config_paths (GError ** mcerror)
char *dir;
#if MC_HOMEDIR_XDG == 0
char *defined_userconf_dir;
#else
const char *cdir;
#endif
mc_return_if_error (mcerror);
@ -298,7 +295,7 @@ mc_config_init_config_paths (GError ** mcerror)
if (xdg_vars_initialized)
return;
/* init mc_home and homedir if not yet */
/* init mc_home if not yet */
(void) mc_config_get_home_dir ();
#if MC_HOMEDIR_XDG
@ -318,35 +315,12 @@ mc_config_init_config_paths (GError ** mcerror)
}
else
{
cdir = g_get_user_config_dir ();
if (cdir != NULL && *cdir != '\0')
mc_config_str = mc_config_init_one_config_path (cdir, MC_USERCONF_DIR, mcerror);
else
{
dir = g_build_filename (homedir, ".config", (char *) NULL);
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_str =
mc_config_init_one_config_path (g_get_user_config_dir (), MC_USERCONF_DIR, mcerror);
mc_cache_str =
mc_config_init_one_config_path (g_get_user_cache_dir (), MC_USERCONF_DIR, mcerror);
mc_data_str =
mc_config_init_one_config_path (g_get_user_data_dir (), MC_USERCONF_DIR, mcerror);
}
mc_config_fix_migrated_rules ();
@ -415,9 +389,15 @@ mc_config_get_cache_path (void)
const char *
mc_config_get_home_dir (void)
{
static const char *homedir = NULL;
if (homedir == NULL)
{
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')
homedir = g_getenv ("HOME");
else

View File

@ -80,7 +80,7 @@
/*** file scope variables ************************************************************************/
/* 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;
/*** file scope functions ************************************************************************/

View File

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

View File

@ -686,11 +686,9 @@ dlg_widget_set_position (gpointer data, gpointer user_data)
/* --------------------------------------------------------------------------------------------- */
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 ((w->pos_flags & WPOS_FULLSCREEN) != 0)
if ((pos_flags & WPOS_FULLSCREEN) != 0)
{
*y = 0;
*x = 0;
@ -699,17 +697,13 @@ dlg_adjust_position (const WDialog * h, int *y, int *x, int *lines, int *cols)
}
else
{
if ((w->pos_flags & WPOS_CENTER_HORZ) != 0)
if ((pos_flags & WPOS_CENTER_HORZ) != 0)
*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;
else
*y = w->y;
if ((w->pos_flags & WPOS_TRYUP) != 0)
if ((pos_flags & WPOS_TRYUP) != 0)
{
if (*y > 3)
*y -= 2;
@ -796,7 +790,7 @@ dlg_set_size (WDialog * h, int lines, int cols)
{
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);
}
@ -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);
w = WIDGET (new_d);
w->pos_flags = pos_flags; /* required for dlg_adjust_position() */
dlg_adjust_position (new_d, &y1, &x1, &lines, &cols);
dlg_adjust_position (pos_flags, &y1, &x1, &lines, &cols);
widget_init (w, y1, x1, lines, cols, (callback != NULL) ? callback : dlg_default_callback,
mouse_callback);
w->pos_flags = pos_flags; /* restore after widget_init() */
w->pos_flags = pos_flags;
w->options |= WOP_TOP_SELECT;
w->state |= WST_CONSTRUCT;

View File

@ -55,9 +55,9 @@
/*** file scope macro definitions ****************************************************************/
#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 \
: ( (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 ****************************************************************/

View File

@ -526,10 +526,10 @@ string_file_size (file_entry_t * fe, int len)
static const char *
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");
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 string_file_size (fe, len);
@ -549,7 +549,7 @@ string_file_type (file_entry_t * fe, int len)
buffer[0] = PATH_SEP;
else if (S_ISLNK (fe->st.st_mode))
{
if (fe->f.link_to_dir)
if (link_isdir (fe))
buffer[0] = '~';
else if (fe->f.stale_link)
buffer[0] = '!';
@ -2877,7 +2877,7 @@ chdir_other_panel (WPanel * panel)
if (get_other_type () != 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);
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;
va_start (ap, fmt);
str = g_strdup_vprintf (fmt, ap);
va_end (ap);
if (logfile)
if (logfile != NULL)
{
size_t ret;
ret = fwrite (str, strlen (str), 1, logfile);
ret = fflush (logfile);
(void) ret;
}
tty_enable_interrupt_key ();
status = write (SUP->sockw, str, strlen (str));
g_free (str);
tty_disable_interrupt_key ();
if (status < 0)
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);
close (fileset2[0]);
close (fileset2[1]);
execvp (path, const_cast (char **, argv));
execvp (path, (char **) argv);
my_exit (3);
}
}
@ -403,7 +402,6 @@ fish_info (struct vfs_class *me, struct vfs_s_super *super)
ERRNOR (E_PROTO, FALSE);
}
/* --------------------------------------------------------------------------------------------- */
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..."));
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;
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)
{
char *p, *op;
p = g_strdup_printf (_("fish: Password is required for %s"), super->path_element->user);
op = vfs_get_password (p);
g_free (p);
if (op == NULL)
return FALSE;
super->path_element->password = op;
}
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)
{
gboolean ftalk;
/* hide panels */
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 :]
*/
#if 0
if (!(MEDATA->logfile))
{
if (MEDATA->logfile == NULL)
MEDATA->logfile = fopen ("/tmp/mc-FISH.sh", "w");
}
#endif
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 (quoted_path);
ent = vfs_s_generate_entry (me, NULL, dir, 0);
while (TRUE)
{
int res;
@ -687,17 +685,17 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
me->verrno = ECONNRESET;
goto error;
}
if (logfile)
if (logfile != NULL)
{
fputs (buffer, logfile);
fputs ("\n", logfile);
fflush (logfile);
}
if (!strncmp (buffer, "### ", 4))
if (strncmp (buffer, "### ", 4) == 0)
break;
if ((!buffer[0]))
if (buffer[0] == '\0')
{
if (ent->name)
if (ent->name != NULL)
{
vfs_s_insert_entry (me, dir, ent);
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);
if (!strcmp (data_start, "\".\"") || !strcmp (data_start, "\"..\""))
if (strcmp (data_start, "\".\"") == 0 || strcmp (data_start, "\"..\"") == 0)
break; /* We'll do "." and ".." ourselves */
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;
linkname = strstr (filename, "\" -> \"");
if (!linkname)
if (linkname == NULL)
{
/* broken client, or smth goes wrong */
linkname = filename_bound;
@ -788,6 +786,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
case 'P':
{
size_t skipped;
vfs_parse_filemode (buffer + 1, &skipped, &ST.st_mode);
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
*/
size_t skipped;
vfs_parse_raw_filemode (buffer + 1, &skipped, &ST.st_mode);
break;
}
case 'd':
{
vfs_split_text (buffer + 1);
if (!vfs_parse_filedate (0, &ST.st_ctime))
if (vfs_parse_filedate (0, &ST.st_ctime) == 0)
break;
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':
{
struct tm tim;
/* cppcheck-suppress invalidscanf */
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)
@ -822,6 +823,7 @@ fish_dir_load (struct vfs_class *me, struct vfs_s_inode *dir, char *remote_path)
case 'E':
{
int maj, min;
/* cppcheck-suppress invalidscanf */
if (sscanf (buffer + 1, "%d,%d", &maj, &min) != 2)
break;
@ -1105,7 +1107,9 @@ fish_ctl (void *fh, int ctlop, void *arg)
(void) arg;
(void) fh;
(void) ctlop;
return 0;
#if 0
switch (ctlop)
{
@ -1113,15 +1117,14 @@ fish_ctl (void *fh, int ctlop, void *arg)
{
int v;
if (!FH->linear)
if (FH->linear == 0)
vfs_die ("You may not do this");
if (FH->linear == LS_LINEAR_CLOSED || FH->linear == LS_LINEAR_PREOPEN)
return 0;
v = vfs_s_select_on_two (FH_SUPER->u.fish.sockr, 0);
if (((v < 0) && (errno == EINTR)) || v == 0)
return 1;
return 0;
return (((v < 0) && (errno == EINTR)) || v == 0) ? 1 : 0;
}
default:
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);
if (r != COMPLETE)
ERRNOR (E_REMOTE, -1);
if (flags & OPT_FLUSH)
if ((flags & OPT_FLUSH) != 0)
vfs_s_invalidate (me, super);
return 0;
}
@ -1326,7 +1329,6 @@ fish_utime (const vfs_path_t * vpath, struct utimbuf *times)
gchar *shell_commands = NULL;
char utcmtime[16], utcatime[16];
struct tm *gmt;
char buf[BUF_LARGE];
const char *crpath;
char *rpath;
@ -1366,7 +1368,6 @@ static int
fish_unlink (const vfs_path_t * vpath)
{
gchar *shell_commands = NULL;
char buf[BUF_LARGE];
const char *crpath;
char *rpath;
@ -1394,7 +1395,6 @@ static int
fish_exists (const vfs_path_t * vpath)
{
gchar *shell_commands = NULL;
char buf[BUF_LARGE];
const char *crpath;
char *rpath;
@ -1450,7 +1450,7 @@ fish_mkdir (const vfs_path_t * vpath, mode_t mode)
if (ret_code != 0)
return ret_code;
if (!fish_exists (vpath))
if (fish_exists (vpath) == 0)
{
path_element->class->verrno = EACCES;
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)
fish->append = TRUE;
if (!fh->ino->localname)
if (fh->ino->localname == NULL)
{
vfs_path_t *vpath;
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;
}
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;
if (!fh->ino->localname)
if (fh->ino->localname == NULL)
vfs_die ("retrieve_file failed to fill in localname");
return 0;

View File

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