Remove vfs_path_to_str() function for avoid often memory allocations.

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
Slava Zanko 2013-04-14 16:38:37 +03:00
parent 31bacf56c9
commit 2640b21bb9
49 changed files with 420 additions and 743 deletions

View File

@ -2,7 +2,7 @@
Various utilities Various utilities
Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, Copyright (C) 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003,
2004, 2005, 2007, 2009, 2011 2004, 2005, 2007, 2009, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
@ -11,6 +11,7 @@
Dugan Porter, 1994, 1995, 1996 Dugan Porter, 1994, 1995, 1996
Jakub Jelinek, 1994, 1995, 1996 Jakub Jelinek, 1994, 1995, 1996
Mauricio Plaza, 1994, 1995, 1996 Mauricio Plaza, 1994, 1995, 1996
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -116,7 +117,7 @@ resolve_symlinks (const vfs_path_t * vpath)
if (vpath->relative) if (vpath->relative)
return NULL; return NULL;
p = p2 = vfs_path_to_str (vpath); p = p2 = g_strdup (vfs_path_as_str (vpath));
r = buf = g_malloc (MC_MAXPATHLEN); r = buf = g_malloc (MC_MAXPATHLEN);
buf2 = g_malloc (MC_MAXPATHLEN); buf2 = g_malloc (MC_MAXPATHLEN);
*r++ = PATH_SEP; *r++ = PATH_SEP;
@ -1098,7 +1099,6 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
FILE *f; FILE *f;
char buf[MC_MAXPATHLEN + 100]; char buf[MC_MAXPATHLEN + 100];
const size_t len = vfs_path_len (filename_vpath); const size_t len = vfs_path_len (filename_vpath);
char *filename;
/* defaults */ /* defaults */
*line = 1; *line = 1;
@ -1115,7 +1115,6 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
/* prepare array for serialized bookmarks */ /* prepare array for serialized bookmarks */
if (bookmarks != NULL) if (bookmarks != NULL)
*bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS); *bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS);
filename = vfs_path_to_str (filename_vpath);
while (fgets (buf, sizeof (buf), f) != NULL) while (fgets (buf, sizeof (buf), f) != NULL)
{ {
@ -1123,7 +1122,7 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
gchar **pos_tokens; gchar **pos_tokens;
/* check if the filename matches the beginning of string */ /* check if the filename matches the beginning of string */
if (strncmp (buf, filename, len) != 0) if (strncmp (buf, vfs_path_as_str (filename_vpath), len) != 0)
continue; continue;
/* followed by single space */ /* followed by single space */
@ -1175,7 +1174,6 @@ load_file_position (const vfs_path_t * filename_vpath, long *line, long *column,
g_strfreev (pos_tokens); g_strfreev (pos_tokens);
} }
g_free (filename);
fclose (f); fclose (f);
} }
@ -1195,7 +1193,6 @@ save_file_position (const vfs_path_t * filename_vpath, long line, long column, o
size_t i; size_t i;
const size_t len = vfs_path_len (filename_vpath); const size_t len = vfs_path_len (filename_vpath);
gboolean src_error = FALSE; gboolean src_error = FALSE;
char *filename;
if (filepos_max_saved_entries == 0) if (filepos_max_saved_entries == 0)
filepos_max_saved_entries = mc_config_get_int (mc_main_config, CONFIG_APP_SECTION, filepos_max_saved_entries = mc_config_get_int (mc_main_config, CONFIG_APP_SECTION,
@ -1220,11 +1217,12 @@ save_file_position (const vfs_path_t * filename_vpath, long line, long column, o
goto open_source_error; goto open_source_error;
} }
filename = vfs_path_to_str (filename_vpath);
/* put the new record */ /* put the new record */
if (line != 1 || column != 0 || bookmarks != NULL) if (line != 1 || column != 0 || bookmarks != NULL)
{ {
if (fprintf (f, "%s %ld;%ld;%" PRIuMAX, filename, line, column, (uintmax_t) offset) < 0) if (fprintf
(f, "%s %ld;%ld;%" PRIuMAX, vfs_path_as_str (filename_vpath), line, column,
(uintmax_t) offset) < 0)
goto write_position_error; goto write_position_error;
if (bookmarks != NULL) if (bookmarks != NULL)
for (i = 0; i < bookmarks->len && i < MAX_SAVED_BOOKMARKS; i++) for (i = 0; i < bookmarks->len && i < MAX_SAVED_BOOKMARKS; i++)
@ -1238,7 +1236,7 @@ save_file_position (const vfs_path_t * filename_vpath, long line, long column, o
i = 1; i = 1;
while (fgets (buf, sizeof (buf), tmp_f) != NULL) while (fgets (buf, sizeof (buf), tmp_f) != NULL)
{ {
if (buf[len] == ' ' && strncmp (buf, filename, len) == 0 if (buf[len] == ' ' && strncmp (buf, vfs_path_as_str (filename_vpath), len) == 0
&& strchr (&buf[len + 1], ' ') == NULL) && strchr (&buf[len + 1], ' ') == NULL)
continue; continue;
@ -1248,7 +1246,6 @@ save_file_position (const vfs_path_t * filename_vpath, long line, long column, o
} }
write_position_error: write_position_error:
g_free (filename);
fclose (tmp_f); fclose (tmp_f);
open_source_error: open_source_error:
g_free (tmp_fn); g_free (tmp_fn);

View File

@ -1,11 +1,12 @@
/* /*
Directory cache support Directory cache support
Copyright (C) 1998, 2011 Copyright (C) 1998, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Pavel Machek <pavel@ucw.cz>, 1998 Pavel Machek <pavel@ucw.cz>, 1998
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -1260,7 +1261,7 @@ vfs_s_open (const vfs_path_t * vpath, int flags, mode_t mode)
vfs_path_t *tmp_vpath; vfs_path_t *tmp_vpath;
tmp_handle = vfs_mkstemps (&tmp_vpath, path_element->class->name, name); tmp_handle = vfs_mkstemps (&tmp_vpath, path_element->class->name, name);
ino->localname = vfs_path_to_str (tmp_vpath); ino->localname = g_strdup (vfs_path_as_str (tmp_vpath));
vfs_path_free (tmp_vpath); vfs_path_free (tmp_vpath);
if (tmp_handle == -1) if (tmp_handle == -1)
{ {
@ -1353,7 +1354,7 @@ vfs_s_retrieve_file (struct vfs_class *me, struct vfs_s_inode *ino)
fh.handle = -1; fh.handle = -1;
handle = vfs_mkstemps (&tmp_vpath, me->name, ino->ent->name); handle = vfs_mkstemps (&tmp_vpath, me->name, ino->ent->name);
ino->localname = vfs_path_to_str (tmp_vpath); ino->localname = g_strdup (vfs_path_as_str (tmp_vpath));
vfs_path_free (tmp_vpath); vfs_path_free (tmp_vpath);
if (handle == -1) if (handle == -1)
{ {

View File

@ -1,11 +1,11 @@
/* /*
Virtual File System: interface functions Virtual File System: interface functions
Copyright (C) 2011 Copyright (C) 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Slava Zanko <slavazanko@gmail.com>, 2011 Slava Zanko <slavazanko@gmail.com>, 2011, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -878,16 +878,12 @@ mc_tmpdir (void)
g_free (fallback_prefix); g_free (fallback_prefix);
if (test_fd != -1) if (test_fd != -1)
{ {
char *test_fn;
test_fn = vfs_path_to_str (test_vpath);
close (test_fd); close (test_fd);
test_fd = open (test_fn, O_RDONLY); test_fd = open (vfs_path_as_str (test_vpath), O_RDONLY);
g_free (test_fn);
if (test_fd != -1) if (test_fd != -1)
{ {
close (test_fd); close (test_fd);
unlink (test_fn); unlink (vfs_path_as_str (test_vpath));
fallback_ok = TRUE; fallback_ok = TRUE;
} }
} }

View File

@ -1,11 +1,11 @@
/* /*
Virtual File System path handlers Virtual File System path handlers
Copyright (C) 2011 Copyright (C) 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Slava Zanko <slavazanko@gmail.com>, 2011 Slava Zanko <slavazanko@gmail.com>, 2011, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -591,8 +591,6 @@ vfs_path_strip_home (const char *dir)
return g_strdup (dir); return g_strdup (dir);
} }
/* --------------------------------------------------------------------------------------------- */
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/*** public functions ****************************************************************************/ /*** public functions ****************************************************************************/
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -713,21 +711,6 @@ vfs_path_to_str_elements_count (const vfs_path_t * vpath, int elements_count)
return vfs_path_to_str_flags (vpath, elements_count, VPF_NONE); return vfs_path_to_str_flags (vpath, elements_count, VPF_NONE);
} }
/* --------------------------------------------------------------------------------------------- */
/**
* Convert vfs_path_t to string representation.
*
* @param vpath pointer to vfs_path_t object
*
* @return pointer to newly created string.
*/
char *
vfs_path_to_str (const vfs_path_t * vpath)
{
return vfs_path_to_str_elements_count (vpath, vfs_path_elements_count (vpath));
}
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/** /**
* Split path string to path elements with flags for change parce process. * Split path string to path elements with flags for change parce process.
@ -760,6 +743,7 @@ vfs_path_from_str_flags (const char *path_str, vfs_path_flag_t flags)
else else
vpath = vfs_path_from_str_uri_parser (path, flags); vpath = vfs_path_from_str_uri_parser (path, flags);
vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
g_free (path); g_free (path);
return vpath; return vpath;
@ -824,6 +808,8 @@ void
vfs_path_add_element (const vfs_path_t * vpath, const vfs_path_element_t * path_element) vfs_path_add_element (const vfs_path_t * vpath, const vfs_path_element_t * path_element)
{ {
g_array_append_val (vpath->path, path_element); g_array_append_val (vpath->path, path_element);
g_free (vpath->str);
((vfs_path_t *) vpath)->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -944,6 +930,7 @@ vfs_path_clone (const vfs_path_t * vpath)
path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, vpath_element_index)); path_element = vfs_path_element_clone (vfs_path_get_by_index (vpath, vpath_element_index));
g_array_append_val (new_vpath->path, path_element); g_array_append_val (new_vpath->path, path_element);
} }
new_vpath->str = g_strdup (vpath->str);
return new_vpath; return new_vpath;
} }
@ -974,6 +961,7 @@ vfs_path_free (vfs_path_t * vpath)
} }
g_array_free (vpath->path, TRUE); g_array_free (vpath->path, TRUE);
g_free (vpath->str);
g_free (vpath); g_free (vpath);
} }
@ -1000,6 +988,8 @@ vfs_path_remove_element_by_index (vfs_path_t * vpath, int element_index)
element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, element_index); element = (vfs_path_element_t *) vfs_path_get_by_index (vpath, element_index);
vpath->path = g_array_remove_index (vpath->path, element_index); vpath->path = g_array_remove_index (vpath->path, element_index);
vfs_path_element_free (element); vfs_path_element_free (element);
g_free (vpath->str);
vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -1185,6 +1175,7 @@ vfs_path_deserialize (const char *data, GError ** error)
g_set_error (error, MC_ERROR, -1, "No any path elements found"); g_set_error (error, MC_ERROR, -1, "No any path elements found");
return NULL; return NULL;
} }
vpath->str = vfs_path_to_str_flags (vpath, 0, VPF_NONE);
return vpath; return vpath;
} }
@ -1232,7 +1223,8 @@ vfs_path_t *
vfs_path_append_new (const vfs_path_t * vpath, const char *first_element, ...) vfs_path_append_new (const vfs_path_t * vpath, const char *first_element, ...)
{ {
va_list args; va_list args;
char *str_path, *result_str; char *str_path;
const char *result_str;
vfs_path_t *ret_vpath; vfs_path_t *ret_vpath;
if (vpath == NULL || first_element == NULL) if (vpath == NULL || first_element == NULL)
@ -1242,9 +1234,8 @@ vfs_path_append_new (const vfs_path_t * vpath, const char *first_element, ...)
str_path = mc_build_filenamev (first_element, args); str_path = mc_build_filenamev (first_element, args);
va_end (args); va_end (args);
result_str = vfs_path_to_str (vpath); result_str = vfs_path_as_str (vpath);
ret_vpath = vfs_path_build_filename (result_str, str_path, NULL); ret_vpath = vfs_path_build_filename (result_str, str_path, NULL);
g_free (result_str);
g_free (str_path); g_free (str_path);
return ret_vpath; return ret_vpath;
@ -1291,6 +1282,8 @@ vfs_path_append_vpath_new (const vfs_path_t * first_vpath, ...)
while (current_vpath != NULL); while (current_vpath != NULL);
va_end (args); va_end (args);
ret_vpath->str = vfs_path_to_str_flags (ret_vpath, 0, VPF_NONE);
return ret_vpath; return ret_vpath;
} }
@ -1535,21 +1528,17 @@ vfs_path_element_build_pretty_path_str (const vfs_path_element_t * element)
gboolean gboolean
vfs_path_equal (const vfs_path_t * vpath1, const vfs_path_t * vpath2) vfs_path_equal (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
{ {
char *path1; const char *path1, *path2;
char *path2;
gboolean ret_val; gboolean ret_val;
if (vpath1 == NULL || vpath2 == NULL) if (vpath1 == NULL || vpath2 == NULL)
return FALSE; return FALSE;
path1 = vfs_path_to_str (vpath1); path1 = vfs_path_as_str (vpath1);
path2 = vfs_path_to_str (vpath2); path2 = vfs_path_as_str (vpath2);
ret_val = strcmp (path1, path2) == 0; ret_val = strcmp (path1, path2) == 0;
g_free (path1);
g_free (path2);
return ret_val; return ret_val;
} }
@ -1567,21 +1556,17 @@ vfs_path_equal (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
gboolean gboolean
vfs_path_equal_len (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len) vfs_path_equal_len (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t len)
{ {
char *path1; const char *path1, *path2;
char *path2;
gboolean ret_val; gboolean ret_val;
if (vpath1 == NULL || vpath2 == NULL) if (vpath1 == NULL || vpath2 == NULL)
return FALSE; return FALSE;
path1 = vfs_path_to_str (vpath1); path1 = vfs_path_as_str (vpath1);
path2 = vfs_path_to_str (vpath2); path2 = vfs_path_as_str (vpath2);
ret_val = strncmp (path1, path2, len) == 0; ret_val = strncmp (path1, path2, len) == 0;
g_free (path1);
g_free (path2);
return ret_val; return ret_val;
} }
@ -1597,16 +1582,10 @@ vfs_path_equal_len (const vfs_path_t * vpath1, const vfs_path_t * vpath2, size_t
size_t size_t
vfs_path_len (const vfs_path_t * vpath) vfs_path_len (const vfs_path_t * vpath)
{ {
char *path;
size_t ret_val;
if (vpath == NULL) if (vpath == NULL)
return 0; return 0;
path = vfs_path_to_str (vpath); return strlen (vpath->str);
ret_val = strlen (path);
g_free (path);
return ret_val;
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -1622,14 +1601,13 @@ vfs_path_t *
vfs_path_to_absolute (const vfs_path_t * vpath) vfs_path_to_absolute (const vfs_path_t * vpath)
{ {
vfs_path_t *absolute_vpath; vfs_path_t *absolute_vpath;
char *path_str; const char *path_str;
if (!vpath->relative) if (!vpath->relative)
return vfs_path_clone (vpath); return vfs_path_clone (vpath);
path_str = vfs_path_to_str (vpath); path_str = vfs_path_as_str (vpath);
absolute_vpath = vfs_path_from_str (path_str); absolute_vpath = vfs_path_from_str (path_str);
g_free (path_str);
return absolute_vpath; return absolute_vpath;
} }

View File

@ -27,6 +27,7 @@ typedef struct
{ {
gboolean relative; gboolean relative;
GArray *path; GArray *path;
char *str;
} vfs_path_t; } vfs_path_t;
typedef struct typedef struct
@ -62,7 +63,6 @@ void vfs_path_remove_element_by_index (vfs_path_t * vpath, int element_index);
void vfs_path_free (vfs_path_t * path); void vfs_path_free (vfs_path_t * path);
int vfs_path_elements_count (const vfs_path_t * path); int vfs_path_elements_count (const vfs_path_t * path);
char *vfs_path_to_str (const vfs_path_t * path);
char *vfs_path_to_str_elements_count (const vfs_path_t * path, int elements_count); char *vfs_path_to_str_elements_count (const vfs_path_t * path, int elements_count);
char *vfs_path_to_str_flags (const vfs_path_t * vpath, int elements_count, vfs_path_flag_t flags); char *vfs_path_to_str_flags (const vfs_path_t * vpath, int elements_count, vfs_path_flag_t flags);
vfs_path_t *vfs_path_from_str (const char *path_str); vfs_path_t *vfs_path_from_str (const char *path_str);
@ -128,4 +128,23 @@ vfs_path_get_last_path_vfs (const vfs_path_t * vpath)
return (element != NULL) ? element->class : NULL; return (element != NULL) ? element->class : NULL;
} }
/* --------------------------------------------------------------------------------------------- */
/**
* Convert vfs_path_t to string representation.
*
* @param vpath pointer to vfs_path_t object
*
* @return pointer to newly created string.
*/
static inline char *
vfs_path_as_str (const vfs_path_t * vpath)
{
if (vpath == NULL)
return NULL;
return vpath->str;
}
/* --------------------------------------------------------------------------------------------- */
#endif #endif

View File

@ -2,12 +2,13 @@
Virtual File System switch code Virtual File System switch code
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2007, 2011 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: 1995 Miguel de Icaza Written by: 1995 Miguel de Icaza
Jakub Jelinek, 1995 Jakub Jelinek, 1995
Pavel Machek, 1998 Pavel Machek, 1998
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -370,7 +371,7 @@ vfs_translate_path_n (const char *path)
char * char *
vfs_get_current_dir (void) vfs_get_current_dir (void)
{ {
return vfs_path_to_str (current_path); return g_strdup (current_path->str);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -579,8 +580,11 @@ vfs_setup_cwd (void)
char * char *
_vfs_get_cwd (void) _vfs_get_cwd (void)
{ {
const vfs_path_t *current_dir_vpath;
vfs_setup_cwd (); vfs_setup_cwd ();
return vfs_path_to_str (vfs_get_raw_current_dir ()); current_dir_vpath = vfs_get_raw_current_dir ();
return g_strdup (vfs_path_as_str (current_dir_vpath));
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

View File

@ -1,10 +1,10 @@
/* /*
Copyright (C) 2007, 2010, 2011, 2012 Copyright (C) 2007, 2010, 2011, 2012, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Daniel Borca <dborca@yahoo.com>, 2007 Daniel Borca <dborca@yahoo.com>, 2007
Slava Zanko <slavazanko@gmail.com>, 2010 Slava Zanko <slavazanko@gmail.com>, 2010, 2013
Andrew Borodin <aborodin@vmail.ru>, 2010, 2012 Andrew Borodin <aborodin@vmail.ru>, 2010, 2012
Ilia Maslakov <il.smind@gmail.com>, 2010 Ilia Maslakov <il.smind@gmail.com>, 2010
@ -172,7 +172,7 @@ open_temp (void **name)
_("Cannot create temporary diff file\n%s"), unix_error_string (errno)); _("Cannot create temporary diff file\n%s"), unix_error_string (errno));
return -1; return -1;
} }
*name = vfs_path_to_str (diff_file_name); *name = g_strdup (vfs_path_as_str (diff_file_name));
vfs_path_free (diff_file_name); vfs_path_free (diff_file_name);
return fd; return fd;
} }
@ -3618,21 +3618,11 @@ dview_diff_cmd (const void *f0, const void *f1)
GET_FILE_AND_STAMP (0); GET_FILE_AND_STAMP (0);
GET_FILE_AND_STAMP (1); GET_FILE_AND_STAMP (1);
if (real_file0 != NULL && real_file1 != NULL)
{
char *real_file0_str, *real_file1_str;
char *file0_str, *file1_str;
real_file0_str = vfs_path_to_str (real_file0); if (real_file0 != NULL && real_file1 != NULL)
real_file1_str = vfs_path_to_str (real_file1); rv = diff_view (vfs_path_as_str (real_file0), vfs_path_as_str (real_file1),
file0_str = vfs_path_to_str (file0); vfs_path_as_str (file0), vfs_path_as_str (file1));
file1_str = vfs_path_to_str (file1);
rv = diff_view (real_file0_str, real_file1_str, file0_str, file1_str);
g_free (real_file0_str);
g_free (real_file1_str);
g_free (file0_str);
g_free (file1_str);
}
UNGET_FILE (1); UNGET_FILE (1);
UNGET_FILE (0); UNGET_FILE (0);
} }

View File

@ -211,11 +211,10 @@ edit_load_file_fast (WEdit * edit, const vfs_path_t * filename_vpath)
file = mc_open (filename_vpath, O_RDONLY | O_BINARY); file = mc_open (filename_vpath, O_RDONLY | O_BINARY);
if (file == -1) if (file == -1)
{ {
gchar *errmsg, *filename; gchar *errmsg;
filename = vfs_path_to_str (filename_vpath); errmsg =
errmsg = g_strdup_printf (_("Cannot open %s for reading"), filename); g_strdup_printf (_("Cannot open %s for reading"), vfs_path_as_str (filename_vpath));
g_free (filename);
edit_error_dialog (_("Error"), errmsg); edit_error_dialog (_("Error"), errmsg);
g_free (errmsg); g_free (errmsg);
return FALSE; return FALSE;
@ -245,11 +244,9 @@ edit_load_file_fast (WEdit * edit, const vfs_path_t * filename_vpath)
if (!ret) if (!ret)
{ {
gchar *errmsg, *filename; gchar *errmsg;
filename = vfs_path_to_str (filename_vpath); errmsg = g_strdup_printf (_("Error reading %s"), vfs_path_as_str (filename_vpath));
errmsg = g_strdup_printf (_("Error reading %s"), filename);
g_free (filename);
edit_error_dialog (_("Error"), errmsg); edit_error_dialog (_("Error"), errmsg);
g_free (errmsg); g_free (errmsg);
} }
@ -264,24 +261,18 @@ static int
edit_find_filter (const vfs_path_t * filename_vpath) edit_find_filter (const vfs_path_t * filename_vpath)
{ {
size_t i, l, e; size_t i, l, e;
char *filename;
if (filename_vpath == NULL) if (filename_vpath == NULL)
return -1; return -1;
filename = vfs_path_to_str (filename_vpath); l = strlen (vfs_path_as_str (filename_vpath));
l = strlen (filename);
for (i = 0; i < G_N_ELEMENTS (all_filters); i++) for (i = 0; i < G_N_ELEMENTS (all_filters); i++)
{ {
e = strlen (all_filters[i].extension); e = strlen (all_filters[i].extension);
if (l > e) if (l > e)
if (!strcmp (all_filters[i].extension, filename + l - e)) if (!strcmp (all_filters[i].extension, vfs_path_as_str (filename_vpath) + l - e))
{
g_free (filename);
return i; return i;
}
} }
g_free (filename);
return -1; return -1;
} }
@ -291,15 +282,13 @@ static char *
edit_get_filter (const vfs_path_t * filename_vpath) edit_get_filter (const vfs_path_t * filename_vpath)
{ {
int i; int i;
char *p, *quoted_name, *filename; char *p, *quoted_name;
i = edit_find_filter (filename_vpath); i = edit_find_filter (filename_vpath);
if (i < 0) if (i < 0)
return NULL; return NULL;
filename = vfs_path_to_str (filename_vpath); quoted_name = name_quote (vfs_path_as_str (filename_vpath), 0);
quoted_name = name_quote (filename, 0);
g_free (filename);
p = g_strdup_printf (all_filters[i].read, quoted_name); p = g_strdup_printf (all_filters[i].read, quoted_name);
g_free (quoted_name); g_free (quoted_name);
return p; return p;
@ -347,11 +336,8 @@ check_file_access (WEdit * edit, const vfs_path_t * filename_vpath, struct stat
file = mc_open (filename_vpath, O_NONBLOCK | O_RDONLY | O_BINARY | O_CREAT | O_EXCL, 0666); file = mc_open (filename_vpath, O_NONBLOCK | O_RDONLY | O_BINARY | O_CREAT | O_EXCL, 0666);
if (file < 0) if (file < 0)
{ {
char *filename; errmsg =
g_strdup_printf (_("Cannot open %s for reading"), vfs_path_as_str (filename_vpath));
filename = vfs_path_to_str (filename_vpath);
errmsg = g_strdup_printf (_("Cannot open %s for reading"), filename);
g_free (filename);
goto cleanup; goto cleanup;
} }
@ -362,22 +348,17 @@ check_file_access (WEdit * edit, const vfs_path_t * filename_vpath, struct stat
/* Check what we have opened */ /* Check what we have opened */
if (mc_fstat (file, st) < 0) if (mc_fstat (file, st) < 0)
{ {
char *filename; errmsg =
g_strdup_printf (_("Cannot get size/permissions for %s"),
filename = vfs_path_to_str (filename_vpath); vfs_path_as_str (filename_vpath));
errmsg = g_strdup_printf (_("Cannot get size/permissions for %s"), filename);
g_free (filename);
goto cleanup; goto cleanup;
} }
/* We want to open regular files only */ /* We want to open regular files only */
if (!S_ISREG (st->st_mode)) if (!S_ISREG (st->st_mode))
{ {
char *filename; errmsg =
g_strdup_printf (_("\"%s\" is not a regular file"), vfs_path_as_str (filename_vpath));
filename = vfs_path_to_str (filename_vpath);
errmsg = g_strdup_printf (_("\"%s\" is not a regular file"), filename);
g_free (filename);
goto cleanup; goto cleanup;
} }
@ -389,13 +370,7 @@ check_file_access (WEdit * edit, const vfs_path_t * filename_vpath, struct stat
edit->delete_file = 0; edit->delete_file = 0;
if (st->st_size >= SIZE_LIMIT) if (st->st_size >= SIZE_LIMIT)
{ errmsg = g_strdup_printf (_("File \"%s\" is too large"), vfs_path_as_str (filename_vpath));
char *filename;
filename = vfs_path_to_str (filename_vpath);
errmsg = g_strdup_printf (_("File \"%s\" is too large"), filename);
g_free (filename);
}
cleanup: cleanup:
(void) mc_close (file); (void) mc_close (file);

View File

@ -446,7 +446,6 @@ static vfs_path_t *
edit_get_save_file_as (WEdit * edit) edit_get_save_file_as (WEdit * edit)
{ {
static LineBreaks cur_lb = LB_ASIS; static LineBreaks cur_lb = LB_ASIS;
char *filename;
char *filename_res; char *filename_res;
vfs_path_t *ret_vpath = NULL; vfs_path_t *ret_vpath = NULL;
@ -457,12 +456,11 @@ edit_get_save_file_as (WEdit * edit)
N_("&Macintosh format (CR)") N_("&Macintosh format (CR)")
}; };
filename = vfs_path_to_str (edit->filename_vpath);
{ {
quick_widget_t quick_widgets[] = { quick_widget_t quick_widgets[] = {
/* *INDENT-OFF* */ /* *INDENT-OFF* */
QUICK_LABELED_INPUT (N_("Enter file name:"), input_label_above, filename, "save-as", QUICK_LABELED_INPUT (N_("Enter file name:"), input_label_above,
vfs_path_as_str (edit->filename_vpath), "save-as",
&filename_res, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES), &filename_res, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
QUICK_SEPARATOR (TRUE), QUICK_SEPARATOR (TRUE),
QUICK_LABEL (N_("Change line breaks to:"), NULL), QUICK_LABEL (N_("Change line breaks to:"), NULL),
@ -490,8 +488,6 @@ edit_get_save_file_as (WEdit * edit)
} }
} }
g_free (filename);
return ret_vpath; return ret_vpath;
} }
@ -2056,12 +2052,10 @@ edit_save_confirm_cmd (WEdit * edit)
if (edit_confirm_save) if (edit_confirm_save)
{ {
char *filename;
gboolean ok; gboolean ok;
filename = vfs_path_to_str (edit->filename_vpath); f = g_strdup_printf (_("Confirm save file: \"%s\""),
f = g_strdup_printf (_("Confirm save file: \"%s\""), filename); vfs_path_as_str (edit->filename_vpath));
g_free (filename);
ok = (edit_query_dialog2 (_("Save file"), f, _("&Save"), _("&Cancel")) == 0); ok = (edit_query_dialog2 (_("Save file"), f, _("&Save"), _("&Cancel")) == 0);
g_free (f); g_free (f);
if (!ok) if (!ok)
@ -2791,7 +2785,7 @@ edit_ok_to_exit (WEdit * edit)
return TRUE; return TRUE;
if (edit->filename_vpath != NULL) if (edit->filename_vpath != NULL)
fname = vfs_path_to_str (edit->filename_vpath); fname = g_strdup (vfs_path_as_str (edit->filename_vpath));
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
else else
fname = g_strdup (_(fname)); fname = g_strdup (_(fname));

View File

@ -2,12 +2,13 @@
Editor text drawing. Editor text drawing.
Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006, Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2011, 2012 2007, 2011, 2012, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Paul Sheer, 1996, 1997 Paul Sheer, 1996, 1997
Andrew Borodin <aborodin@vmail.ru> 2012 Andrew Borodin <aborodin@vmail.ru> 2012
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -260,12 +261,10 @@ edit_status_window (WEdit * edit)
if (cols > 5) if (cols > 5)
{ {
const char *fname = N_("NoName"); const char *fname = N_("NoName");
char *full_fname = NULL;
if (edit->filename_vpath != NULL) if (edit->filename_vpath != NULL)
{ {
full_fname = vfs_path_to_str (edit->filename_vpath); fname = x_basename (vfs_path_as_str (edit->filename_vpath));
fname = x_basename (full_fname);
} }
#ifdef ENABLE_NLS #ifdef ENABLE_NLS
else else
@ -274,7 +273,6 @@ edit_status_window (WEdit * edit)
edit_move (2, 0); edit_move (2, 0);
tty_printf ("[%s]", str_term_trim (fname, w->cols - 8 - 6)); tty_printf ("[%s]", str_term_trim (fname, w->cols - 8 - 6));
g_free (full_fname);
} }
tty_getyx (&y, &x); tty_getyx (&y, &x);

View File

@ -338,13 +338,9 @@ edit_window_list (const WDialog * h)
if (e->filename_vpath == NULL) if (e->filename_vpath == NULL)
fname = g_strdup_printf ("%c [%s]", e->modified ? '*' : ' ', _("NoName")); fname = g_strdup_printf ("%c [%s]", e->modified ? '*' : ' ', _("NoName"));
else else
{ fname =
char *fname2; g_strdup_printf ("%c%s", e->modified ? '*' : ' ',
vfs_path_as_str (e->filename_vpath));
fname2 = vfs_path_to_str (e->filename_vpath);
fname = g_strdup_printf ("%c%s", e->modified ? '*' : ' ', fname2);
g_free (fname2);
}
listbox_add_item (listbox->list, LISTBOX_APPEND_AT_END, get_hotkey (i++), listbox_add_item (listbox->list, LISTBOX_APPEND_AT_END, get_hotkey (i++),
str_term_trim (fname, WIDGET (listbox->list)->cols - 2), NULL); str_term_trim (fname, WIDGET (listbox->list)->cols - 2), NULL);
@ -394,9 +390,11 @@ edit_get_title (const WDialog * h, size_t len)
len -= 4; len -= 4;
filename = vfs_path_to_str (edit->filename_vpath); if (edit->filename_vpath == NULL)
if (filename == NULL)
filename = g_strdup (_("[NoName]")); filename = g_strdup (_("[NoName]"));
else
filename = g_strdup (vfs_path_as_str (edit->filename_vpath));
file_label = str_term_trim (filename, len - str_term_width1 (_("Edit: "))); file_label = str_term_trim (filename, len - str_term_width1 (_("Edit: ")));
g_free (filename); g_free (filename);
@ -1249,7 +1247,7 @@ edit_files (const GList * files)
char * char *
edit_get_file_name (const WEdit * edit) edit_get_file_name (const WEdit * edit)
{ {
return vfs_path_to_str (edit->filename_vpath); return g_strdup (vfs_path_as_str (edit->filename_vpath));
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

View File

@ -2,12 +2,13 @@
Editor syntax highlighting. Editor syntax highlighting.
Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006, Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2010, 2011 2007, 2010, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Paul Sheer, 1998 Paul Sheer, 1998
Egmont Koblinger <egmont@gmail.com>, 2010 Egmont Koblinger <egmont@gmail.com>, 2010
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -1484,15 +1485,9 @@ edit_load_syntax (WEdit * edit, char ***pnames, const char *type)
f = mc_config_get_full_path (EDIT_SYNTAX_FILE); f = mc_config_get_full_path (EDIT_SYNTAX_FILE);
if (edit != NULL) if (edit != NULL)
{ r = edit_read_syntax_file (edit, pnames, f, vfs_path_as_str (edit->filename_vpath),
char *tmp_f;
tmp_f = vfs_path_to_str (edit->filename_vpath);
r = edit_read_syntax_file (edit, pnames, f, tmp_f,
get_first_editor_line (edit), get_first_editor_line (edit),
option_auto_syntax ? NULL : edit->syntax_type); option_auto_syntax ? NULL : edit->syntax_type);
g_free (tmp_f);
}
else else
r = edit_read_syntax_file (NULL, pnames, f, NULL, "", NULL); r = edit_read_syntax_file (NULL, pnames, f, NULL, "", NULL);
if (r == -1) if (r == -1)

View File

@ -1,9 +1,12 @@
/* /*
Execution routines for GNU Midnight Commander Execution routines for GNU Midnight Commander
Copyright (C) 2003, 2004, 2005, 2007, 2011 Copyright (C) 2003, 2004, 2005, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -187,11 +190,8 @@ execute_prepare_with_vfs_arg (const vfs_path_t * filename_vpath, vfs_path_t ** l
*localcopy_vpath = mc_getlocalcopy (filename_vpath); *localcopy_vpath = mc_getlocalcopy (filename_vpath);
if (*localcopy_vpath == NULL) if (*localcopy_vpath == NULL)
{ {
char *filename; message (D_ERROR, MSG_ERROR, _("Cannot fetch a local copy of %s"),
vfs_path_as_str (filename_vpath));
filename = vfs_path_to_str (filename_vpath);
message (D_ERROR, MSG_ERROR, _("Cannot fetch a local copy of %s"), filename);
g_free (filename);
return FALSE; return FALSE;
} }

View File

@ -943,7 +943,11 @@ tree_box (const char *current_dir)
WIDGET (bar)->y = LINES - 1; WIDGET (bar)->y = LINES - 1;
if (run_dlg (dlg) == B_ENTER) if (run_dlg (dlg) == B_ENTER)
val = vfs_path_to_str (tree_selected_name (mytree)); {
const vfs_path_t *selected_name;
selected_name = tree_selected_name (mytree);
val = g_strdup (vfs_path_as_str (selected_name));
}
destroy_dlg (dlg); destroy_dlg (dlg);
return val; return val;
@ -1066,41 +1070,30 @@ void
symlink_dialog (const vfs_path_t * existing_vpath, const vfs_path_t * new_vpath, symlink_dialog (const vfs_path_t * existing_vpath, const vfs_path_t * new_vpath,
char **ret_existing, char **ret_new) char **ret_existing, char **ret_new)
{ {
char *existing; quick_widget_t quick_widgets[] = {
char *new;
existing = vfs_path_to_str (existing_vpath);
new = vfs_path_to_str (new_vpath);
{
quick_widget_t quick_widgets[] = {
/* *INDENT-OFF* */ /* *INDENT-OFF* */
QUICK_LABELED_INPUT (N_("Existing filename (filename symlink will point to):"), QUICK_LABELED_INPUT (N_("Existing filename (filename symlink will point to):"),
input_label_above, input_label_above,
existing, "input-2", ret_existing, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES), vfs_path_as_str (existing_vpath), "input-2", ret_existing, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
QUICK_SEPARATOR (FALSE), QUICK_SEPARATOR (FALSE),
QUICK_LABELED_INPUT (N_("Symbolic link filename:"), input_label_above, QUICK_LABELED_INPUT (N_("Symbolic link filename:"), input_label_above,
new, "input-1", ret_new, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES), vfs_path_as_str (new_vpath), "input-1", ret_new, NULL, FALSE, FALSE, INPUT_COMPLETE_FILENAMES),
QUICK_BUTTONS_OK_CANCEL, QUICK_BUTTONS_OK_CANCEL,
QUICK_END QUICK_END
/* *INDENT-ON* */ /* *INDENT-ON* */
}; };
quick_dialog_t qdlg = { quick_dialog_t qdlg = {
-1, -1, 64, -1, -1, 64,
N_("Symbolic link"), "[File Menu]", N_("Symbolic link"), "[File Menu]",
quick_widgets, NULL, NULL quick_widgets, NULL, NULL
}; };
if (quick_dialog (&qdlg) == B_CANCEL) if (quick_dialog (&qdlg) == B_CANCEL)
{ {
*ret_new = NULL; *ret_new = NULL;
*ret_existing = NULL; *ret_existing = NULL;
}
} }
g_free (existing);
g_free (new);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */

View File

@ -295,20 +295,15 @@ static int
compare_files (const vfs_path_t * vpath1, const vfs_path_t * vpath2, off_t size) compare_files (const vfs_path_t * vpath1, const vfs_path_t * vpath2, off_t size)
{ {
int file1, file2; int file1, file2;
char *name;
int result = -1; /* Different by default */ int result = -1; /* Different by default */
if (size == 0) if (size == 0)
return 0; return 0;
name = vfs_path_to_str (vpath1); file1 = open (vfs_path_as_str (vpath1), O_RDONLY);
file1 = open (name, O_RDONLY);
g_free (name);
if (file1 >= 0) if (file1 >= 0)
{ {
name = vfs_path_to_str (vpath2); file2 = open (vfs_path_as_str (vpath2), O_RDONLY);
file2 = open (name, O_RDONLY);
g_free (name);
if (file2 >= 0) if (file2 >= 0)
{ {
#ifdef HAVE_MMAP #ifdef HAVE_MMAP
@ -1235,12 +1230,10 @@ hotlist_cmd (void)
else else
{ {
vfs_path_t *deprecated_vpath; vfs_path_t *deprecated_vpath;
char *cmd, *normalized_target; char *cmd;
deprecated_vpath = vfs_path_from_str_flags (target, VPF_USE_DEPRECATED_PARSER); deprecated_vpath = vfs_path_from_str_flags (target, VPF_USE_DEPRECATED_PARSER);
normalized_target = vfs_path_to_str (deprecated_vpath); cmd = g_strconcat ("cd ", vfs_path_as_str (deprecated_vpath), (char *) NULL);
cmd = g_strconcat ("cd ", normalized_target, (char *) NULL);
g_free (normalized_target);
vfs_path_free (deprecated_vpath); vfs_path_free (deprecated_vpath);
do_cd_command (cmd); do_cd_command (cmd);

View File

@ -5,9 +5,12 @@
help from the program's callback. help from the program's callback.
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2007, 2011 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -399,8 +402,6 @@ do_cd_command (char *orig_cmd)
} }
else if (strcmp (cmd + operand_pos, "..") == 0) else if (strcmp (cmd + operand_pos, "..") == 0)
{ {
char *str_path;
if (vfs_path_elements_count (current_panel->cwd_vpath) != 1 || if (vfs_path_elements_count (current_panel->cwd_vpath) != 1 ||
strlen (vfs_path_get_by_index (current_panel->cwd_vpath, 0)->path) > 1) strlen (vfs_path_get_by_index (current_panel->cwd_vpath, 0)->path) > 1)
{ {
@ -410,9 +411,7 @@ do_cd_command (char *orig_cmd)
vfs_path_vtokens_get (tmp_vpath, 0, vfs_path_tokens_count (tmp_vpath) - 1); vfs_path_vtokens_get (tmp_vpath, 0, vfs_path_tokens_count (tmp_vpath) - 1);
vfs_path_free (tmp_vpath); vfs_path_free (tmp_vpath);
} }
str_path = vfs_path_to_str (current_panel->cwd_vpath); sync_tree (vfs_path_as_str (current_panel->cwd_vpath));
sync_tree (str_path);
g_free (str_path);
} }
else if (cmd[operand_pos] == PATH_SEP) else if (cmd[operand_pos] == PATH_SEP)
{ {
@ -420,14 +419,11 @@ do_cd_command (char *orig_cmd)
} }
else else
{ {
char *str_path;
vfs_path_t *new_vpath; vfs_path_t *new_vpath;
new_vpath = vfs_path_append_new (current_panel->cwd_vpath, cmd + operand_pos, NULL); new_vpath = vfs_path_append_new (current_panel->cwd_vpath, cmd + operand_pos, NULL);
str_path = vfs_path_to_str (new_vpath); sync_tree (vfs_path_as_str (new_vpath));
vfs_path_free (new_vpath); vfs_path_free (new_vpath);
sync_tree (str_path);
g_free (str_path);
} }
} }
else else

View File

@ -2,9 +2,12 @@
Directory routines Directory routines
Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2011 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -554,7 +557,7 @@ do_load_dir (const vfs_path_t * vpath, dir_list * list, sortfn * sort, gboolean
int status, link_to_dir, stale_link; int status, link_to_dir, stale_link;
int next_free = 0; int next_free = 0;
struct stat st; struct stat st;
char *path; const char *vpath_str;
/* ".." (if any) must be the first entry in the list */ /* ".." (if any) must be the first entry in the list */
if (!set_zero_dir (list)) if (!set_zero_dir (list))
@ -573,11 +576,10 @@ do_load_dir (const vfs_path_t * vpath, dir_list * list, sortfn * sort, gboolean
tree_store_start_check (vpath); tree_store_start_check (vpath);
vpath_str = vfs_path_as_str (vpath);
/* Do not add a ".." entry to the root directory */ /* Do not add a ".." entry to the root directory */
path = vfs_path_to_str (vpath); if ((vpath_str[0] == PATH_SEP) && (vpath_str[1] == '\0'))
if ((path[0] == PATH_SEP) && (path[1] == '\0'))
next_free--; next_free--;
g_free (path);
while ((dp = mc_readdir (dirp)) != NULL) while ((dp = mc_readdir (dirp)) != NULL)
{ {

View File

@ -2,12 +2,13 @@
Extension dependent execution. Extension dependent execution.
Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2007, 2011 2005, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Jakub Jelinek, 1995 Jakub Jelinek, 1995
Miguel de Icaza, 1994 Miguel de Icaza, 1994
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -366,13 +367,7 @@ exec_extension_view (void *target, char *cmd, const vfs_path_t * filename_vpath,
if (target == NULL) if (target == NULL)
mcview_viewer (cmd, filename_vpath, start_line); mcview_viewer (cmd, filename_vpath, start_line);
else else
{ mcview_load ((mcview_t *) target, cmd, vfs_path_as_str (filename_vpath), start_line);
char *file_name;
file_name = vfs_path_to_str (filename_vpath);
mcview_load ((mcview_t *) target, cmd, file_name, start_line);
g_free (file_name);
}
if (changed_hex_mode && !mcview_altered_hex_mode) if (changed_hex_mode && !mcview_altered_hex_mode)
mcview_default_hex_mode = def_hex_mode; mcview_default_hex_mode = def_hex_mode;
@ -478,13 +473,7 @@ exec_extension (void *target, const vfs_path_t * filename_vpath, const char *lc_
* so we clean up after calling view(). * so we clean up after calling view().
*/ */
if (!run_view) if (!run_view)
{ fprintf (cmd_file, "\n/bin/rm -f %s\n", vfs_path_as_str (script_vpath));
char *file_name;
file_name = vfs_path_to_str (script_vpath);
fprintf (cmd_file, "\n/bin/rm -f %s\n", file_name);
g_free (file_name);
}
fclose (cmd_file); fclose (cmd_file);
@ -495,14 +484,10 @@ exec_extension (void *target, const vfs_path_t * filename_vpath, const char *lc_
} }
else else
{ {
char *file_name;
file_name = vfs_path_to_str (script_vpath);
/* Set executable flag on the command file ... */ /* Set executable flag on the command file ... */
mc_chmod (script_vpath, S_IRWXU); mc_chmod (script_vpath, S_IRWXU);
/* ... but don't rely on it - run /bin/sh explicitly */ /* ... but don't rely on it - run /bin/sh explicitly */
cmd = g_strconcat ("/bin/sh ", file_name, (char *) NULL); cmd = g_strconcat ("/bin/sh ", vfs_path_as_str (script_vpath), (char *) NULL);
g_free (file_name);
} }
if (run_view) if (run_view)
@ -664,13 +649,10 @@ regex_check_type (const vfs_path_t * filename_vpath, const char *ptr, int *have_
localfile_vpath = mc_getlocalcopy (filename_vpath); localfile_vpath = mc_getlocalcopy (filename_vpath);
if (localfile_vpath == NULL) if (localfile_vpath == NULL)
{ {
char *filename;
filename = vfs_path_to_str (filename_vpath);
g_propagate_error (error, g_propagate_error (error,
g_error_new (MC_ERROR, -1, g_error_new (MC_ERROR, -1,
_("Cannot fetch a local copy of %s"), filename)); _("Cannot fetch a local copy of %s"),
g_free (filename); vfs_path_as_str (filename_vpath)));
return FALSE; return FALSE;
} }
@ -791,7 +773,7 @@ int
regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *action, regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *action,
vfs_path_t ** script_vpath) vfs_path_t ** script_vpath)
{ {
char *filename, *p, *q, *r, c; char *p, *q, *r, c;
size_t file_len; size_t file_len;
gboolean found = FALSE; gboolean found = FALSE;
gboolean error_flag = FALSE; gboolean error_flag = FALSE;
@ -893,7 +875,6 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *
include_target = NULL; include_target = NULL;
include_target_len = 0; include_target_len = 0;
filename = vfs_path_to_str (filename_vpath);
file_len = vfs_path_len (filename_vpath); file_len = vfs_path_len (filename_vpath);
for (p = data; *p != '\0'; p++) for (p = data; *p != '\0'; p++)
@ -941,13 +922,15 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *
{ {
search->search_type = MC_SEARCH_T_REGEX; search->search_type = MC_SEARCH_T_REGEX;
search->is_case_sensitive = !case_insense; search->is_case_sensitive = !case_insense;
found = mc_search_run (search, filename, 0, file_len, NULL); found =
mc_search_run (search, vfs_path_as_str (filename_vpath), 0, file_len, NULL);
mc_search_free (search); mc_search_free (search);
} }
} }
else if (strncmp (p, "directory/", 10) == 0) else if (strncmp (p, "directory/", 10) == 0)
{ {
if (S_ISDIR (mystat.st_mode) && mc_search (p + 10, filename, MC_SEARCH_T_REGEX)) if (S_ISDIR (mystat.st_mode)
&& mc_search (p + 10, vfs_path_as_str (filename_vpath), MC_SEARCH_T_REGEX))
found = TRUE; found = TRUE;
} }
else if (strncmp (p, "shell/", 6) == 0) else if (strncmp (p, "shell/", 6) == 0)
@ -964,12 +947,14 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *
if (*p == '.' && file_len >= (size_t) (q - p)) if (*p == '.' && file_len >= (size_t) (q - p))
{ {
if (cmp_func (p, filename + file_len - (q - p), q - p) == 0) if (cmp_func
(p, vfs_path_as_str (filename_vpath) + file_len - (q - p), q - p) == 0)
found = TRUE; found = TRUE;
} }
else else
{ {
if ((size_t) (q - p) == file_len && cmp_func (p, filename, q - p) == 0) if ((size_t) (q - p) == file_len
&& cmp_func (p, vfs_path_as_str (filename_vpath), q - p) == 0)
found = TRUE; found = TRUE;
} }
} }
@ -1066,7 +1051,6 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *
break; break;
} }
} }
g_free (filename);
if (error_flag) if (error_flag)
ret = -1; ret = -1;
return ret; return ret;

View File

@ -1030,15 +1030,11 @@ erase_file (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * v
{ {
int return_status; int return_status;
struct stat buf; struct stat buf;
char *s;
s = vfs_path_to_str (vpath); file_progress_show_deleting (ctx, vfs_path_as_str (vpath));
file_progress_show_deleting (ctx, s);
if (check_progress_buttons (ctx) == FILE_ABORT) if (check_progress_buttons (ctx) == FILE_ABORT)
{
g_free (s);
return FILE_ABORT; return FILE_ABORT;
}
mc_refresh (); mc_refresh ();
if (tctx->progress_count != 0 && mc_lstat (vpath, &buf) != 0) if (tctx->progress_count != 0 && mc_lstat (vpath, &buf) != 0)
@ -1049,19 +1045,15 @@ erase_file (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * v
while (mc_unlink (vpath) != 0 && !ctx->skip_all) while (mc_unlink (vpath) != 0 && !ctx->skip_all)
{ {
return_status = file_error (_("Cannot delete file \"%s\"\n%s"), s); return_status = file_error (_("Cannot delete file \"%s\"\n%s"), vfs_path_as_str (vpath));
if (return_status == FILE_ABORT) if (return_status == FILE_ABORT)
{
g_free (s);
return return_status; return return_status;
}
if (return_status == FILE_RETRY) if (return_status == FILE_RETRY)
continue; continue;
if (return_status == FILE_SKIPALL) if (return_status == FILE_SKIPALL)
ctx->skip_all = TRUE; ctx->skip_all = TRUE;
break; break;
} }
g_free (s);
if (tctx->progress_count == 0) if (tctx->progress_count == 0)
return FILE_CONT; return FILE_CONT;
return progress_update_one (tctx, ctx, buf.st_size); return progress_update_one (tctx, ctx, buf.st_size);
@ -1236,9 +1228,11 @@ panel_get_file (WPanel * panel)
if (get_current_type () == view_tree) if (get_current_type () == view_tree)
{ {
WTree *tree; WTree *tree;
vfs_path_t *selected_name;
tree = (WTree *) get_panel_widget (get_current_index ()); tree = (WTree *) get_panel_widget (get_current_index ());
return vfs_path_to_str (tree_selected_name (tree)); selected_name = tree_selected_name (tree);
return g_strdup (vfs_path_as_str (selected_name));
} }
if (panel->marked != 0) if (panel->marked != 0)
@ -2416,13 +2410,8 @@ move_dir_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const char *s, con
lp = (struct link *) erase_list->data; lp = (struct link *) erase_list->data;
if (S_ISDIR (lp->st_mode)) if (S_ISDIR (lp->st_mode))
{
char *src_path;
src_path = vfs_path_to_str (lp->src_vpath); return_status = erase_dir_iff_empty (ctx, vfs_path_as_str (lp->src_vpath));
return_status = erase_dir_iff_empty (ctx, src_path);
g_free (src_path);
}
else else
return_status = erase_file (tctx, ctx, lp->src_vpath); return_status = erase_file (tctx, ctx, lp->src_vpath);
@ -2451,9 +2440,6 @@ FileProgressStatus
erase_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * s_vpath) erase_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * s_vpath)
{ {
FileProgressStatus error; FileProgressStatus error;
char *s;
s = vfs_path_to_str (s_vpath);
/* /*
if (strcmp (s, "..") == 0) if (strcmp (s, "..") == 0)
@ -2463,12 +2449,9 @@ erase_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * s_
return FILE_SKIP; return FILE_SKIP;
*/ */
file_progress_show_deleting (ctx, s); file_progress_show_deleting (ctx, vfs_path_as_str (s_vpath));
if (check_progress_buttons (ctx) == FILE_ABORT) return FILE_ABORT;
{
g_free (s);
return FILE_ABORT;
}
mc_refresh (); mc_refresh ();
/* The old way to detect a non empty directory was: /* The old way to detect a non empty directory was:
@ -2481,24 +2464,19 @@ erase_dir (FileOpTotalContext * tctx, FileOpContext * ctx, const vfs_path_t * s_
error = check_dir_is_empty (s_vpath); error = check_dir_is_empty (s_vpath);
if (error == 0) if (error == 0)
{ /* not empty */ { /* not empty */
error = query_recursive (ctx, s); error = query_recursive (ctx, vfs_path_as_str (s_vpath));
if (error == FILE_CONT) if (error == FILE_CONT)
error = recursive_erase (tctx, ctx, s); error = recursive_erase (tctx, ctx, vfs_path_as_str (s_vpath));
g_free (s);
return error; return error;
} }
while (my_rmdir (s) == -1 && !ctx->skip_all) while (my_rmdir (vfs_path_as_str (s_vpath)) == -1 && !ctx->skip_all)
{ {
error = file_error (_("Cannot remove directory \"%s\"\n%s"), s); error = file_error (_("Cannot remove directory \"%s\"\n%s"), vfs_path_as_str (s_vpath));
if (error != FILE_RETRY) if (error != FILE_RETRY)
{
g_free (s);
return error; return error;
}
} }
g_free (s);
return FILE_CONT; return FILE_CONT;
} }
@ -2581,17 +2559,14 @@ compute_dir_size_update_ui (void *ui, const vfs_path_t * dirname_vpath, size_t d
ComputeDirSizeUI *this = (ComputeDirSizeUI *) ui; ComputeDirSizeUI *this = (ComputeDirSizeUI *) ui;
int c; int c;
Gpm_Event event; Gpm_Event event;
char *dirname;
char buffer[BUF_1K]; char buffer[BUF_1K];
if (ui == NULL) if (ui == NULL)
return FILE_CONT; return FILE_CONT;
dirname = vfs_path_to_str (dirname_vpath);
g_snprintf (buffer, sizeof (buffer), _("%s\nDirectories: %zd, total size: %s"), g_snprintf (buffer, sizeof (buffer), _("%s\nDirectories: %zd, total size: %s"),
str_trunc (dirname, WIDGET (this->dlg)->cols - 6), dir_count, str_trunc (vfs_path_as_str (dirname_vpath), WIDGET (this->dlg)->cols - 6),
size_trunc_sep (total_size, panels_options.kilobyte_si)); dir_count, size_trunc_sep (total_size, panels_options.kilobyte_si));
g_free (dirname);
label_set_text (this->dirname, buffer); label_set_text (this->dirname, buffer);
event.x = -1; /* Don't show the GPM cursor */ event.x = -1; /* Don't show the GPM cursor */
@ -2658,7 +2633,6 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
char *source = NULL; char *source = NULL;
#ifdef WITH_FULL_PATHS #ifdef WITH_FULL_PATHS
vfs_path_t *source_with_vpath = NULL; vfs_path_t *source_with_vpath = NULL;
char *source_with_path_str = NULL;
#else #else
#define source_with_path source #define source_with_path source
#endif /* !WITH_FULL_PATHS */ #endif /* !WITH_FULL_PATHS */
@ -2740,9 +2714,9 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
if (force_single) if (force_single)
tmp_dest_dir = g_strdup (source); tmp_dest_dir = g_strdup (source);
else if (get_other_type () == view_listing) else if (get_other_type () == view_listing)
tmp_dest_dir = vfs_path_to_str (other_panel->cwd_vpath); tmp_dest_dir = g_strdup (vfs_path_as_str (other_panel->cwd_vpath));
else else
tmp_dest_dir = vfs_path_to_str (panel->cwd_vpath); tmp_dest_dir = g_strdup (vfs_path_as_str (panel->cwd_vpath));
/* /*
* Add trailing backslash only when do non-local ops. * Add trailing backslash only when do non-local ops.
* It saves user from occasional file renames (when destination * It saves user from occasional file renames (when destination
@ -2823,11 +2797,10 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
if (do_bg) if (do_bg)
{ {
int v; int v;
char *cwd_str;
cwd_str = vfs_path_to_str (panel->cwd_vpath); v = do_background (ctx,
v = do_background (ctx, g_strconcat (op_names[operation], ": ", cwd_str, (char *) NULL)); g_strconcat (op_names[operation], ": ",
g_free (cwd_str); vfs_path_as_str (panel->cwd_vpath), (char *) NULL));
if (v == -1) if (v == -1)
message (D_ERROR, MSG_ERROR, _("Sorry, I could not put the job in background")); message (D_ERROR, MSG_ERROR, _("Sorry, I could not put the job in background"));
@ -2868,7 +2841,7 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
if ((vfs_path_tokens_count (panel->cwd_vpath) != 0) if ((vfs_path_tokens_count (panel->cwd_vpath) != 0)
&& (mc_setctl (panel->cwd_vpath, VFS_SETCTL_STALE_DATA, GUINT_TO_POINTER (1)) != 0)) && (mc_setctl (panel->cwd_vpath, VFS_SETCTL_STALE_DATA, GUINT_TO_POINTER (1)) != 0))
save_cwd = vfs_path_to_str (panel->cwd_vpath); save_cwd = g_strdup (vfs_path_as_str (panel->cwd_vpath));
/* Now, let's do the job */ /* Now, let's do the job */
@ -2899,10 +2872,9 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
source_with_vpath = vfs_path_from_str (source); source_with_vpath = vfs_path_from_str (source);
else else
source_with_vpath = vfs_path_append_new (panel->cwd_vpath, source, (char *) NULL); source_with_vpath = vfs_path_append_new (panel->cwd_vpath, source, (char *) NULL);
source_with_path_str = vfs_path_to_str (source_with_vpath);
#endif /* WITH_FULL_PATHS */ #endif /* WITH_FULL_PATHS */
if (panel_operate_init_totals (operation, panel, source_with_path_str, ctx, dialog_type) == if (panel_operate_init_totals
FILE_CONT) (operation, panel, vfs_path_as_str (source_with_vpath), ctx, dialog_type) == FILE_CONT)
{ {
if (operation == OP_DELETE) if (operation == OP_DELETE)
{ {
@ -2913,7 +2885,7 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
} }
else else
{ {
temp = transform_source (ctx, source_with_path_str); temp = transform_source (ctx, vfs_path_as_str (source_with_vpath));
if (temp == NULL) if (temp == NULL)
value = transform_error; value = transform_error;
else else
@ -2943,17 +2915,23 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
ctx->stat_func (source_with_vpath, &src_stat); ctx->stat_func (source_with_vpath, &src_stat);
if (S_ISDIR (src_stat.st_mode)) if (S_ISDIR (src_stat.st_mode))
value = copy_dir_dir (tctx, ctx, source_with_path_str, dest, value =
TRUE, FALSE, FALSE, NULL); copy_dir_dir (tctx, ctx, vfs_path_as_str (source_with_vpath),
dest, TRUE, FALSE, FALSE, NULL);
else else
value = copy_file_file (tctx, ctx, source_with_path_str, dest); value =
copy_file_file (tctx, ctx, vfs_path_as_str (source_with_vpath),
dest);
break; break;
case OP_MOVE: case OP_MOVE:
if (S_ISDIR (src_stat.st_mode)) if (S_ISDIR (src_stat.st_mode))
value = move_dir_dir (tctx, ctx, source_with_path_str, dest); value =
move_dir_dir (tctx, ctx, vfs_path_as_str (source_with_vpath), dest);
else else
value = move_file_file (tctx, ctx, source_with_path_str, dest); value =
move_file_file (tctx, ctx, vfs_path_as_str (source_with_vpath),
dest);
break; break;
default: default:
@ -3001,14 +2979,12 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
src_stat = panel->dir.list[i].st; src_stat = panel->dir.list[i].st;
#ifdef WITH_FULL_PATHS #ifdef WITH_FULL_PATHS
g_free (source_with_path_str);
vfs_path_free (source_with_vpath); vfs_path_free (source_with_vpath);
if (g_path_is_absolute (source2)) if (g_path_is_absolute (source2))
source_with_vpath = vfs_path_from_str (source2); source_with_vpath = vfs_path_from_str (source2);
else else
source_with_vpath = source_with_vpath =
vfs_path_append_new (panel->cwd_vpath, source2, (char *) NULL); vfs_path_append_new (panel->cwd_vpath, source2, (char *) NULL);
source_with_path_str = vfs_path_to_str (source_with_vpath);
#endif /* WITH_FULL_PATHS */ #endif /* WITH_FULL_PATHS */
if (operation == OP_DELETE) if (operation == OP_DELETE)
@ -3020,12 +2996,12 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
} }
else else
{ {
temp = transform_source (ctx, source_with_path_str); temp = transform_source (ctx, vfs_path_as_str (source_with_vpath));
if (temp == NULL) if (temp == NULL)
value = transform_error; value = transform_error;
else else
{ {
char *temp2, *temp3, *repl_dest; char *temp2, *temp3, *repl_dest, *source_with_path_str;
repl_dest = mc_search_prepare_replace_str2 (ctx->search_handle, dest); repl_dest = mc_search_prepare_replace_str2 (ctx->search_handle, dest);
if (ctx->search_handle->error != MC_SEARCH_E_OK) if (ctx->search_handle->error != MC_SEARCH_E_OK)
@ -3038,9 +3014,8 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
temp2 = mc_build_filename (repl_dest, temp, NULL); temp2 = mc_build_filename (repl_dest, temp, NULL);
g_free (temp); g_free (temp);
g_free (repl_dest); g_free (repl_dest);
temp3 = source_with_path_str; source_with_path_str =
source_with_path_str = strutils_shell_unescape (source_with_path_str); strutils_shell_unescape (vfs_path_as_str (source_with_vpath));
g_free (temp3);
temp3 = temp2; temp3 = temp2;
temp2 = strutils_shell_unescape (temp2); temp2 = strutils_shell_unescape (temp2);
g_free (temp3); g_free (temp3);
@ -3124,7 +3099,6 @@ panel_operate (void *source_panel, FileOperation operation, gboolean force_singl
linklist = free_linklist (linklist); linklist = free_linklist (linklist);
dest_dirs = free_linklist (dest_dirs); dest_dirs = free_linklist (dest_dirs);
#ifdef WITH_FULL_PATHS #ifdef WITH_FULL_PATHS
g_free (source_with_path_str);
vfs_path_free (source_with_vpath); vfs_path_free (source_with_vpath);
#endif /* WITH_FULL_PATHS */ #endif /* WITH_FULL_PATHS */
g_free (dest); g_free (dest);

View File

@ -21,7 +21,7 @@
Jakub Jelinek, 1995, 1996 Jakub Jelinek, 1995, 1996
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Pavel Machek, 1998 Pavel Machek, 1998
Slava Zanko, 2009-2012 Slava Zanko, 2009, 2010, 2011, 2012, 2013
Andrew Borodin <aborodin@vmail.ru>, 2009, 2010, 2011, 2012, 2013 Andrew Borodin <aborodin@vmail.ru>, 2009, 2010, 2011, 2012, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -1031,12 +1031,9 @@ file_progress_show_target (FileOpContext * ctx, const vfs_path_t * s_vpath)
if (s_vpath != NULL) if (s_vpath != NULL)
{ {
char *s;
s = vfs_path_to_str (s_vpath);
label_set_text (ui->file_label[1], _("Target")); label_set_text (ui->file_label[1], _("Target"));
label_set_text (ui->file_string[1], truncFileStringSecure (ui->op_dlg, s)); label_set_text (ui->file_string[1],
g_free (s); truncFileStringSecure (ui->op_dlg, vfs_path_as_str (s_vpath)));
} }
else else
{ {

View File

@ -3,12 +3,13 @@
tree about the changes made to the directory tree about the changes made to the directory
structure. structure.
Copyright (C) 2011 Copyright (C) 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Author: Author:
Janne Kukonlehto Janne Kukonlehto
Miguel de Icaza Miguel de Icaza
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -110,7 +111,7 @@ my_mkdir_rec (char *s, mode_t mode)
vfs_path_t *vpath; vfs_path_t *vpath;
vpath = vfs_path_from_str (p); vpath = vfs_path_from_str (p);
q = vfs_path_to_str (vpath); q = g_strdup (vfs_path_as_str (vpath));
vfs_path_free (vpath); vfs_path_free (vpath);
} }
g_free (p); g_free (p);
@ -136,13 +137,8 @@ my_mkdir (const vfs_path_t * s_vpath, mode_t mode)
result = mc_mkdir (s_vpath, mode); result = mc_mkdir (s_vpath, mode);
if (result != 0) if (result != 0)
{ result = my_mkdir_rec (vfs_path_as_str (s_vpath), mode);
char *p;
p = vfs_path_to_str (s_vpath);
result = my_mkdir_rec (p, mode);
g_free (p);
}
if (result == 0) if (result == 0)
{ {
vfs_path_t *my_s; vfs_path_t *my_s;

View File

@ -2,11 +2,12 @@
Find file command for the Midnight Commander Find file command for the Midnight Commander
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2011 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Miguel de Icaza, 1995 Miguel de Icaza, 1995
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -716,7 +717,7 @@ find_parameters (char **start_dir, ssize_t * start_dir_len,
temp_dir = in_start->buffer; temp_dir = in_start->buffer;
if ((temp_dir[0] == '\0') || ((temp_dir[0] == '.') && (temp_dir[1] == '\0'))) if ((temp_dir[0] == '\0') || ((temp_dir[0] == '.') && (temp_dir[1] == '\0')))
temp_dir = vfs_path_to_str (current_panel->cwd_vpath); temp_dir = g_strdup (vfs_path_as_str (current_panel->cwd_vpath));
else else
temp_dir = g_strdup (temp_dir); temp_dir = g_strdup (temp_dir);
@ -768,7 +769,7 @@ find_parameters (char **start_dir, ssize_t * start_dir_len,
if (s[0] == '.' && s[1] == '\0') if (s[0] == '.' && s[1] == '\0')
{ {
*start_dir = vfs_path_to_str (current_panel->cwd_vpath); *start_dir = g_strdup (vfs_path_as_str (current_panel->cwd_vpath));
/* FIXME: is current_panel->cwd_vpath canonicalized? */ /* FIXME: is current_panel->cwd_vpath canonicalized? */
/* relative paths will be used in panelization */ /* relative paths will be used in panelization */
*start_dir_len = (ssize_t) strlen (*start_dir); *start_dir_len = (ssize_t) strlen (*start_dir);
@ -782,12 +783,10 @@ find_parameters (char **start_dir, ssize_t * start_dir_len,
else else
{ {
/* relative paths will be used in panelization */ /* relative paths will be used in panelization */
char *cwd_str; *start_dir =
mc_build_filename (vfs_path_as_str (current_panel->cwd_vpath), s,
cwd_str = vfs_path_to_str (current_panel->cwd_vpath); (char *) NULL);
*start_dir = mc_build_filename (cwd_str, s, (char *) NULL); *start_dir_len = (ssize_t) strlen (vfs_path_as_str (current_panel->cwd_vpath));
*start_dir_len = (ssize_t) strlen (cwd_str);
g_free (cwd_str);
g_free (s); g_free (s);
} }
@ -1268,12 +1267,9 @@ do_search (WDialog * h)
/* handle absolute ignore dirs here */ /* handle absolute ignore dirs here */
{ {
char *tmp;
gboolean ok; gboolean ok;
tmp = vfs_path_to_str (tmp_vpath); ok = find_ignore_dir_search (vfs_path_as_str (tmp_vpath));
ok = find_ignore_dir_search (tmp);
g_free (tmp);
if (!ok) if (!ok)
break; break;
} }
@ -1283,7 +1279,7 @@ do_search (WDialog * h)
} }
g_free (directory); g_free (directory);
directory = vfs_path_to_str (tmp_vpath); directory = g_strdup (vfs_path_as_str (tmp_vpath));
if (verbose) if (verbose)
{ {

View File

@ -2,9 +2,12 @@
Panel managing. Panel managing.
Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2007, 2011 2005, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -121,13 +124,7 @@ info_show_info (WInfo * info)
if (get_current_type () != view_listing) if (get_current_type () != view_listing)
return; return;
{ my_statfs (&myfs_stats, vfs_path_as_str (current_panel->cwd_vpath));
char *cwd_str;
cwd_str = vfs_path_to_str (current_panel->cwd_vpath);
my_statfs (&myfs_stats, cwd_str);
g_free (cwd_str);
}
st = current_panel->dir.list[current_panel->selected].st; st = current_panel->dir.list[current_panel->selected].st;

View File

@ -2,13 +2,14 @@
Panel layout module for the Midnight Commander Panel layout module for the Midnight Commander
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2009, 2011, 2012 2006, 2007, 2009, 2011, 2012, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Janne Kukonlehto, 1995 Janne Kukonlehto, 1995
Miguel de Icaza, 1995 Miguel de Icaza, 1995
Andrew Borodin <aborodin@vmail.ru>, 2011, 2012 Andrew Borodin <aborodin@vmail.ru>, 2011, 2012
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -1262,7 +1263,7 @@ save_panel_dir (int idx)
g_free (panels[idx].last_saved_dir); /* last path no needed */ g_free (panels[idx].last_saved_dir); /* last path no needed */
/* Because path can be nonlocal */ /* Because path can be nonlocal */
panels[idx].last_saved_dir = vfs_path_to_str (w->cwd_vpath); panels[idx].last_saved_dir = g_strdup (vfs_path_as_str (w->cwd_vpath));
} }
} }
@ -1283,7 +1284,12 @@ get_panel_dir_for (const WPanel * widget)
return g_strdup ("."); return g_strdup (".");
if (get_display_type (i) == view_listing) if (get_display_type (i) == view_listing)
return vfs_path_to_str (((WPanel *) get_panel_widget (i))->cwd_vpath); {
vfs_path_t *cwd_vpath;
cwd_vpath = ((WPanel *) get_panel_widget (i))->cwd_vpath;
return g_strdup (vfs_path_as_str (cwd_vpath));
}
return g_strdup (panels[i].last_saved_dir); return g_strdup (panels[i].last_saved_dir);
} }

View File

@ -2,7 +2,7 @@
Main dialog (file panels) of the Midnight Commander Main dialog (file panels) of the Midnight Commander
Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
@ -10,6 +10,7 @@
Janne Kukonlehto, 1994, 1995 Janne Kukonlehto, 1994, 1995
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Andrew Borodin <aborodin@vmail.ru>, 2009, 2010 Andrew Borodin <aborodin@vmail.ru>, 2009, 2010
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -684,28 +685,22 @@ create_panels (void)
static void static void
put_current_path (void) put_current_path (void)
{ {
char *cwd_path; vfs_path_t *cwd_vpath;
if (!command_prompt) if (!command_prompt)
return; return;
#ifdef HAVE_CHARSET #ifdef HAVE_CHARSET
{ cwd_vpath = remove_encoding_from_path (current_panel->cwd_vpath);
vfs_path_t *cwd_vpath;
cwd_vpath = remove_encoding_from_path (current_panel->cwd_vpath);
cwd_path = vfs_path_to_str (cwd_vpath);
vfs_path_free (cwd_vpath);
}
#else #else
cwd_path = vfs_path_to_str (current_panel->cwd_vpath); cwd_vpath = vfs_path_clone (current_panel->cwd_vpath);
#endif #endif
command_insert (cmdline, cwd_path, FALSE); command_insert (cmdline, vfs_path_as_str (cwd_vpath), FALSE);
if (cwd_path[strlen (cwd_path) - 1] != PATH_SEP) if (cwd_vpath->str[strlen (vfs_path_as_str (cwd_vpath)) - 1] != PATH_SEP)
command_insert (cmdline, PATH_SEP_STR, FALSE); command_insert (cmdline, PATH_SEP_STR, FALSE);
g_free (cwd_path); vfs_path_free (cwd_vpath);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -713,7 +708,7 @@ put_current_path (void)
static void static void
put_other_path (void) put_other_path (void)
{ {
char *cwd_path; vfs_path_t *cwd_vpath;
if (get_other_type () != view_listing) if (get_other_type () != view_listing)
return; return;
@ -722,22 +717,16 @@ put_other_path (void)
return; return;
#ifdef HAVE_CHARSET #ifdef HAVE_CHARSET
{ cwd_vpath = remove_encoding_from_path (other_panel->cwd_vpath);
vfs_path_t *cwd_vpath;
cwd_vpath = remove_encoding_from_path (other_panel->cwd_vpath);
cwd_path = vfs_path_to_str (cwd_vpath);
vfs_path_free (cwd_vpath);
}
#else #else
cwd_path = vfs_path_to_str (other_panel->cwd_vpath); cwd_vpath = vfs_path_clone (other_panel->cwd_vpath);
#endif #endif
command_insert (cmdline, cwd_path, FALSE); command_insert (cmdline, vfs_path_as_str (cwd_vpath), FALSE);
if (cwd_path[strlen (cwd_path) - 1] != PATH_SEP) if (cwd_vpath->str[strlen (vfs_path_as_str (cwd_vpath)) - 1] != PATH_SEP)
command_insert (cmdline, PATH_SEP_STR, FALSE); command_insert (cmdline, PATH_SEP_STR, FALSE);
g_free (cwd_path); vfs_path_free (cwd_vpath);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -794,9 +783,12 @@ put_prog_name (void)
if (get_current_type () == view_tree) if (get_current_type () == view_tree)
{ {
WTree *tree = (WTree *) get_panel_widget (get_current_index ()); WTree *tree;
vfs_path_t *selected_name;
tmp = vfs_path_to_str (tree_selected_name (tree)); tree = (WTree *) get_panel_widget (get_current_index ());
selected_name = tree_selected_name (tree);
tmp = g_strdup (vfs_path_as_str (selected_name));
} }
else else
tmp = g_strdup (selection (current_panel)->fname); tmp = g_strdup (selection (current_panel)->fname);
@ -922,22 +914,10 @@ done_mc (void)
g_free (curr_dir); g_free (curr_dir);
if ((current_panel != NULL) && (get_current_type () == view_listing)) if ((current_panel != NULL) && (get_current_type () == view_listing))
{ vfs_stamp_path (vfs_path_as_str (current_panel->cwd_vpath));
char *tmp_path;
tmp_path = vfs_path_to_str (current_panel->cwd_vpath);
vfs_stamp_path (tmp_path);
g_free (tmp_path);
}
if ((other_panel != NULL) && (get_other_type () == view_listing)) if ((other_panel != NULL) && (get_other_type () == view_listing))
{ vfs_stamp_path (vfs_path_as_str (other_panel->cwd_vpath));
char *tmp_path;
tmp_path = vfs_path_to_str (other_panel->cwd_vpath);
vfs_stamp_path (tmp_path);
g_free (tmp_path);
}
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -1782,7 +1762,7 @@ do_nc (void)
/* destroy_dlg destroys even current_panel->cwd_vpath, so we have to save a copy :) */ /* destroy_dlg destroys even current_panel->cwd_vpath, so we have to save a copy :) */
if (mc_args__last_wd_file != NULL && vfs_current_is_local ()) if (mc_args__last_wd_file != NULL && vfs_current_is_local ())
last_wd_string = vfs_path_to_str (current_panel->cwd_vpath); last_wd_string = g_strdup (vfs_path_as_str (current_panel->cwd_vpath));
/* don't handle VFS timestamps for dirs opened in panels */ /* don't handle VFS timestamps for dirs opened in panels */
mc_event_destroy (MCEVENT_GROUP_CORE, "vfs_timestamp"); mc_event_destroy (MCEVENT_GROUP_CORE, "vfs_timestamp");

View File

@ -2,12 +2,13 @@
Panel managing. Panel managing.
Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2009, 2011 2005, 2006, 2007, 2009, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Miguel de Icaza, 1995 Miguel de Icaza, 1995
Timur Bakeyev, 1997, 1999 Timur Bakeyev, 1997, 1999
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -1116,28 +1117,24 @@ show_free_space (WPanel * panel)
static struct my_statfs myfs_stats; static struct my_statfs myfs_stats;
/* Old current working directory for displaying free space */ /* Old current working directory for displaying free space */
static char *old_cwd = NULL; static char *old_cwd = NULL;
char *tmp_path;
/* Don't try to stat non-local fs */ /* Don't try to stat non-local fs */
if (!vfs_file_is_local (panel->cwd_vpath) || !free_space) if (!vfs_file_is_local (panel->cwd_vpath) || !free_space)
return; return;
tmp_path = vfs_path_to_str (panel->cwd_vpath); if (old_cwd == NULL || strcmp (old_cwd, vfs_path_as_str (panel->cwd_vpath)) != 0)
if (old_cwd == NULL || strcmp (old_cwd, tmp_path) != 0)
{ {
char rpath[PATH_MAX]; char rpath[PATH_MAX];
init_my_statfs (); init_my_statfs ();
g_free (old_cwd); g_free (old_cwd);
old_cwd = tmp_path; old_cwd = g_strdup (vfs_path_as_str (panel->cwd_vpath));
tmp_path = NULL;
if (mc_realpath (old_cwd, rpath) == NULL) if (mc_realpath (old_cwd, rpath) == NULL)
return; return;
my_statfs (&myfs_stats, rpath); my_statfs (&myfs_stats, rpath);
} }
g_free (tmp_path);
if (myfs_stats.avail != 0 || myfs_stats.total != 0) if (myfs_stats.avail != 0 || myfs_stats.total != 0)
{ {
@ -2162,13 +2159,9 @@ goto_parent_dir (WPanel * panel)
if (g_path_is_absolute (fname)) if (g_path_is_absolute (fname))
fname = g_strdup (fname); fname = g_strdup (fname);
else else
{ fname =
char *tmp_root; mc_build_filename (vfs_path_as_str (panelized_panel.root_vpath), fname,
(char *) NULL);
tmp_root = vfs_path_to_str (panelized_panel.root_vpath);
fname = mc_build_filename (tmp_root, fname, (char *) NULL);
g_free (tmp_root);
}
bname = x_basename (fname); bname = x_basename (fname);
@ -3038,10 +3031,7 @@ subshell_chdir (const vfs_path_t * vpath)
static gboolean static gboolean
_do_panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type) _do_panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_type)
{ {
char *olddir; vfs_path_t *olddir_vpath;
olddir = vfs_path_to_str (panel->cwd_vpath);
/* Convert *new_path to a suitable pathname, handle ~user */ /* Convert *new_path to a suitable pathname, handle ~user */
if (cd_type == cd_parse_command) if (cd_type == cd_parse_command)
{ {
@ -3054,43 +3044,39 @@ _do_panel_cd (WPanel * panel, const vfs_path_t * new_dir_vpath, enum cd_enum cd_
if (mc_chdir (new_dir_vpath) == -1) if (mc_chdir (new_dir_vpath) == -1)
{ {
panel_set_cwd (panel, olddir); panel_set_cwd (panel, vfs_path_as_str (panel->cwd_vpath));
g_free (olddir);
return FALSE; return FALSE;
} }
/* Success: save previous directory, shutdown status of previous dir */ /* Success: save previous directory, shutdown status of previous dir */
panel_set_lwd (panel, olddir); olddir_vpath = vfs_path_clone (panel->cwd_vpath);
panel_set_lwd (panel, vfs_path_as_str (panel->cwd_vpath));
input_free_completions (cmdline); input_free_completions (cmdline);
vfs_path_free (panel->cwd_vpath); vfs_path_free (panel->cwd_vpath);
vfs_setup_cwd (); vfs_setup_cwd ();
panel->cwd_vpath = vfs_path_clone (vfs_get_raw_current_dir ()); panel->cwd_vpath = vfs_path_clone (vfs_get_raw_current_dir ());
vfs_release_path (olddir); vfs_release_path (vfs_path_as_str (olddir_vpath));
subshell_chdir (panel->cwd_vpath); subshell_chdir (panel->cwd_vpath);
/* Reload current panel */ /* Reload current panel */
panel_clean_dir (panel); panel_clean_dir (panel);
{ panel->count =
char *tmp_path; do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_info.sort_field->sort_routine,
panel->sort_info.reverse, panel->sort_info.case_sensitive,
panel->count = panel->sort_info.exec_first, panel->filter);
do_load_dir (panel->cwd_vpath, &panel->dir, panel->sort_info.sort_field->sort_routine, try_to_select (panel,
panel->sort_info.reverse, panel->sort_info.case_sensitive, get_parent_dir_name (vfs_path_as_str (panel->cwd_vpath),
panel->sort_info.exec_first, panel->filter); vfs_path_as_str (olddir_vpath)));
tmp_path = vfs_path_to_str (panel->cwd_vpath);
try_to_select (panel, get_parent_dir_name (tmp_path, olddir));
g_free (tmp_path);
}
load_hint (0); load_hint (0);
panel->dirty = 1; panel->dirty = 1;
update_xterm_title_path (); update_xterm_title_path ();
g_free (olddir); vfs_path_free (olddir_vpath);
return TRUE; return TRUE;
} }
@ -4150,14 +4136,12 @@ void
panel_reload (WPanel * panel) panel_reload (WPanel * panel)
{ {
struct stat current_stat; struct stat current_stat;
char *tmp_path;
gboolean ok; gboolean ok;
tmp_path = vfs_path_to_str (panel->cwd_vpath); ok = (panels_options.fast_reload
ok = (panels_options.fast_reload && stat (tmp_path, &current_stat) == 0 && stat (vfs_path_as_str (panel->cwd_vpath), &current_stat) == 0
&& current_stat.st_ctime == panel->dir_stat.st_ctime && current_stat.st_ctime == panel->dir_stat.st_ctime
&& current_stat.st_mtime == panel->dir_stat.st_mtime); && current_stat.st_mtime == panel->dir_stat.st_mtime);
g_free (tmp_path);
if (ok) if (ok)
return; return;
@ -4165,28 +4149,28 @@ panel_reload (WPanel * panel)
do do
{ {
char *last_slash; char *last_slash;
const char *panel_cwd_path;
if (mc_chdir (panel->cwd_vpath) != -1) if (mc_chdir (panel->cwd_vpath) != -1)
break; break;
tmp_path = vfs_path_to_str (panel->cwd_vpath); panel_cwd_path = vfs_path_as_str (panel->cwd_vpath);
if (tmp_path[0] == PATH_SEP && tmp_path[1] == '\0')
if (panel_cwd_path[0] == PATH_SEP && panel_cwd_path[1] == '\0')
{ {
panel_clean_dir (panel); panel_clean_dir (panel);
panel->count = set_zero_dir (&panel->dir) ? 1 : 0; panel->count = set_zero_dir (&panel->dir) ? 1 : 0;
g_free (tmp_path);
return; return;
} }
last_slash = strrchr (tmp_path, PATH_SEP); last_slash = strrchr (panel_cwd_path, PATH_SEP);
vfs_path_free (panel->cwd_vpath); vfs_path_free (panel->cwd_vpath);
if (last_slash == NULL || last_slash == tmp_path) if (last_slash == NULL || last_slash == panel_cwd_path)
panel->cwd_vpath = vfs_path_from_str (PATH_SEP_STR); panel->cwd_vpath = vfs_path_from_str (PATH_SEP_STR);
else else
{ {
*last_slash = '\0'; *last_slash = '\0';
panel->cwd_vpath = vfs_path_from_str (tmp_path); panel->cwd_vpath = vfs_path_clone (panel->cwd_vpath);
} }
g_free (tmp_path);
memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat)); memset (&(panel->dir_stat), 0, sizeof (panel->dir_stat));
show_dir (panel); show_dir (panel);
} }
@ -4538,13 +4522,10 @@ panel_change_encoding (WPanel * panel)
encoding = get_codepage_id (panel->codepage); encoding = get_codepage_id (panel->codepage);
if (encoding != NULL) if (encoding != NULL)
{ {
char *cd_path;
vfs_change_encoding (panel->cwd_vpath, encoding); vfs_change_encoding (panel->cwd_vpath, encoding);
cd_path = vfs_path_to_str (panel->cwd_vpath);
if (!do_panel_cd (panel, panel->cwd_vpath, cd_parse_command)) if (!do_panel_cd (panel, panel->cwd_vpath, cd_parse_command))
message (D_ERROR, MSG_ERROR, _("Cannot chdir to \"%s\""), cd_path); message (D_ERROR, MSG_ERROR, _("Cannot chdir to \"%s\""), panel->cwd_vpath->str);
g_free (cd_path);
} }
} }

View File

@ -439,7 +439,7 @@ do_panelize_cd (struct WPanel *panel)
tmp_vpath = tmp_vpath =
vfs_path_append_new (panelized_panel.root_vpath, panelized_panel.list.list[i].fname, vfs_path_append_new (panelized_panel.root_vpath, panelized_panel.list.list[i].fname,
NULL); NULL);
list->list[i].fname = vfs_path_to_str (tmp_vpath); list->list[i].fname = g_strdup (vfs_path_as_str (tmp_vpath));
vfs_path_free (tmp_vpath); vfs_path_free (tmp_vpath);
list->list[i].fnamelen = strlen (list->list[i].fname); list->list[i].fnamelen = strlen (list->list[i].fname);
} }

View File

@ -7,13 +7,14 @@
it will be possible to have tree views over virtual file systems. it will be possible to have tree views over virtual file systems.
Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
2003, 2004, 2005, 2007, 2011 2003, 2004, 2005, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Janne Kukonlehto, 1994, 1996 Janne Kukonlehto, 1994, 1996
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Miguel de Icaza, 1996, 1999 Miguel de Icaza, 1996, 1999
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -251,14 +252,11 @@ tree_show_mini_info (WTree * tree, int tree_lines, int tree_cols)
{ {
/* Show full name of selected directory */ /* Show full name of selected directory */
WDialog *h = w->owner; WDialog *h = w->owner;
char *tmp_path;
tty_setcolor (tree->is_panel ? NORMAL_COLOR : TREE_NORMALC (h)); tty_setcolor (tree->is_panel ? NORMAL_COLOR : TREE_NORMALC (h));
tty_draw_hline (w->y + line, w->x + 1, ' ', tree_cols); tty_draw_hline (w->y + line, w->x + 1, ' ', tree_cols);
widget_move (w, line, 1); widget_move (w, line, 1);
tmp_path = vfs_path_to_str (tree->selected_ptr->name); tty_print_string (str_fit_to_term (tree->selected_ptr->name->str, tree_cols, J_LEFT_FIT));
tty_print_string (str_fit_to_term (tmp_path, tree_cols, J_LEFT_FIT));
g_free (tmp_path);
} }
} }
@ -307,10 +305,8 @@ show_tree (WTree * tree)
i = 0; i = 0;
while (current->prev && i < tree->topdiff) while (current->prev && i < tree->topdiff)
{ {
char *current_name;
current = current->prev; current = current->prev;
current_name = vfs_path_to_str (current->name);
if (current->sublevel < tree->selected_ptr->sublevel) if (current->sublevel < tree->selected_ptr->sublevel)
{ {
@ -319,7 +315,7 @@ show_tree (WTree * tree)
} }
else if (current->sublevel == tree->selected_ptr->sublevel) else if (current->sublevel == tree->selected_ptr->sublevel)
{ {
for (j = strlen (current_name) - 1; current_name[j] != PATH_SEP; j--); for (j = strlen (current->name->str) - 1; current->name->str[j] != PATH_SEP; j--);
if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j)) if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j))
i++; i++;
} }
@ -333,7 +329,6 @@ show_tree (WTree * tree)
i++; i++;
} }
} }
g_free (current_name);
} }
tree->topdiff = i; tree->topdiff = i;
} }
@ -357,15 +352,10 @@ show_tree (WTree * tree)
tree->tree_shown[i] = current; tree->tree_shown[i] = current;
if (current->sublevel == topsublevel) if (current->sublevel == topsublevel)
{
/* Show full name */ /* Show full name */
char *current_name;
current_name = vfs_path_to_str (current->name);
tty_print_string (str_fit_to_term tty_print_string (str_fit_to_term
(current_name, tree_cols + (tree->is_panel ? 0 : 1), J_LEFT_FIT)); (current->name->str, tree_cols + (tree->is_panel ? 0 : 1),
g_free (current_name); J_LEFT_FIT));
}
else else
{ {
/* Sub level directory */ /* Sub level directory */
@ -412,12 +402,9 @@ show_tree (WTree * tree)
} }
else if (current->sublevel == tree->selected_ptr->sublevel) else if (current->sublevel == tree->selected_ptr->sublevel)
{ {
char *current_name; for (j = strlen (current->name->str) - 1; current->name->str[j] != PATH_SEP;
j--)
current_name = vfs_path_to_str (current->name);
for (j = strlen (current_name) - 1; current_name[j] != PATH_SEP; j--)
; ;
g_free (current_name);
if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j)) if (vfs_path_equal_len (current->name, tree->selected_ptr->name, j))
break; break;
} }
@ -601,21 +588,17 @@ tree_mouse_click (WTree * tree, int y)
static void static void
tree_chdir_sel (WTree * tree) tree_chdir_sel (WTree * tree)
{ {
char *tmp_path;
if (!tree->is_panel) if (!tree->is_panel)
return; return;
change_panel (); change_panel ();
tmp_path = vfs_path_to_str (tree->selected_ptr->name);
if (do_cd (tree->selected_ptr->name, cd_exact)) if (do_cd (tree->selected_ptr->name, cd_exact))
select_item (current_panel); select_item (current_panel);
else else
message (D_ERROR, MSG_ERROR, _("Cannot chdir to \"%s\"\n%s"), message (D_ERROR, MSG_ERROR, _("Cannot chdir to \"%s\"\n%s"),
tmp_path, unix_error_string (errno)); tree->selected_ptr->name->str, unix_error_string (errno));
g_free (tmp_path);
change_panel (); change_panel ();
show_tree (tree); show_tree (tree);
} }
@ -775,15 +758,13 @@ static void
tree_copy (WTree * tree, const char *default_dest) tree_copy (WTree * tree, const char *default_dest)
{ {
char msg[BUF_MEDIUM]; char msg[BUF_MEDIUM];
char *dest, *selected_ptr_name; char *dest;
if (tree->selected_ptr == NULL) if (tree->selected_ptr == NULL)
return; return;
selected_ptr_name = vfs_path_to_str (tree->selected_ptr->name);
g_snprintf (msg, sizeof (msg), _("Copy \"%s\" directory to:"), g_snprintf (msg, sizeof (msg), _("Copy \"%s\" directory to:"),
str_trunc (selected_ptr_name, 50)); str_trunc (tree->selected_ptr->name->str, 50));
dest = input_expand_dialog (Q_ ("DialogTitle|Copy"), dest = input_expand_dialog (Q_ ("DialogTitle|Copy"),
msg, MC_HISTORY_FM_TREE_COPY, default_dest, msg, MC_HISTORY_FM_TREE_COPY, default_dest,
INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD); INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
@ -797,13 +778,12 @@ tree_copy (WTree * tree, const char *default_dest)
tctx = file_op_total_context_new (); tctx = file_op_total_context_new ();
file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_MULTI_ITEM); file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_MULTI_ITEM);
tctx->ask_overwrite = FALSE; tctx->ask_overwrite = FALSE;
copy_dir_dir (tctx, ctx, selected_ptr_name, dest, TRUE, FALSE, FALSE, NULL); copy_dir_dir (tctx, ctx, tree->selected_ptr->name->str, dest, TRUE, FALSE, FALSE, NULL);
file_op_total_context_destroy (tctx); file_op_total_context_destroy (tctx);
file_op_context_destroy (ctx); file_op_context_destroy (ctx);
} }
g_free (dest); g_free (dest);
g_free (selected_ptr_name);
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -812,7 +792,7 @@ static void
tree_move (WTree * tree, const char *default_dest) tree_move (WTree * tree, const char *default_dest)
{ {
char msg[BUF_MEDIUM]; char msg[BUF_MEDIUM];
char *dest, *selected_ptr_name; char *dest;
struct stat buf; struct stat buf;
FileOpContext *ctx; FileOpContext *ctx;
FileOpTotalContext *tctx; FileOpTotalContext *tctx;
@ -820,10 +800,8 @@ tree_move (WTree * tree, const char *default_dest)
if (tree->selected_ptr == NULL) if (tree->selected_ptr == NULL)
return; return;
selected_ptr_name = vfs_path_to_str (tree->selected_ptr->name);
g_snprintf (msg, sizeof (msg), _("Move \"%s\" directory to:"), g_snprintf (msg, sizeof (msg), _("Move \"%s\" directory to:"),
str_trunc (selected_ptr_name, 50)); str_trunc (tree->selected_ptr->name->str, 50));
dest = dest =
input_expand_dialog (Q_ ("DialogTitle|Move"), msg, MC_HISTORY_FM_TREE_MOVE, default_dest, input_expand_dialog (Q_ ("DialogTitle|Move"), msg, MC_HISTORY_FM_TREE_MOVE, default_dest,
INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD); INPUT_COMPLETE_FILENAMES | INPUT_COMPLETE_CD);
@ -847,12 +825,11 @@ tree_move (WTree * tree, const char *default_dest)
ctx = file_op_context_new (OP_MOVE); ctx = file_op_context_new (OP_MOVE);
tctx = file_op_total_context_new (); tctx = file_op_total_context_new ();
file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_ONE_ITEM); file_op_context_create_ui (ctx, FALSE, FILEGUI_DIALOG_ONE_ITEM);
move_dir_dir (tctx, ctx, selected_ptr_name, dest); move_dir_dir (tctx, ctx, tree->selected_ptr->name->str, dest);
file_op_total_context_destroy (tctx); file_op_total_context_destroy (tctx);
file_op_context_destroy (ctx); file_op_context_destroy (ctx);
ret: ret:
g_free (selected_ptr_name);
g_free (dest); g_free (dest);
} }
@ -892,11 +869,8 @@ tree_rmdir (void *data)
{ {
char *buf; char *buf;
int result; int result;
char *selected_ptr_name;
selected_ptr_name = vfs_path_to_str (tree->selected_ptr->name); buf = g_strdup_printf (_("Delete %s?"), tree->selected_ptr->name->str);
buf = g_strdup_printf (_("Delete %s?"), selected_ptr_name);
g_free (selected_ptr_name);
result = query_dialog (Q_ ("DialogTitle|Delete"), buf, D_ERROR, 2, _("&Yes"), _("&No")); result = query_dialog (Q_ ("DialogTitle|Delete"), buf, D_ERROR, 2, _("&Yes"), _("&No"));
g_free (buf); g_free (buf);

View File

@ -9,13 +9,14 @@
it will be possible to have tree views over virtual file systems. it will be possible to have tree views over virtual file systems.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009,
2011 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Janne Kukonlehto, 1994, 1996 Janne Kukonlehto, 1994, 1996
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Miguel de Icaza, 1996, 1999 Miguel de Icaza, 1996, 1999
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -98,18 +99,15 @@ static size_t
str_common (const vfs_path_t * s1_vpath, const vfs_path_t * s2_vpath) str_common (const vfs_path_t * s1_vpath, const vfs_path_t * s2_vpath)
{ {
size_t result = 0; size_t result = 0;
char *s1, *fs1; char *s1;
char *s2, *fs2; char *s2;
s1 = fs1 = vfs_path_to_str (s1_vpath); s1 = vfs_path_as_str (s1_vpath);
s2 = fs2 = vfs_path_to_str (s2_vpath); s2 = vfs_path_as_str (s2_vpath);
while (*s1 != '\0' && *s2 != '\0' && *s1++ == *s2++) while (*s1 != '\0' && *s2 != '\0' && *s1++ == *s2++)
result++; result++;
g_free (fs1);
g_free (fs2);
return result; return result;
} }
@ -140,19 +138,15 @@ static int
pathcmp (const vfs_path_t * p1_vpath, const vfs_path_t * p2_vpath) pathcmp (const vfs_path_t * p1_vpath, const vfs_path_t * p2_vpath)
{ {
int ret_val; int ret_val;
char *p1, *fp1; char *p1;
char *p2, *fp2; char *p2;
p1 = fp1 = vfs_path_to_str (p1_vpath); p1 = vfs_path_as_str (p1_vpath);
p2 = fp2 = vfs_path_to_str (p2_vpath); p2 = vfs_path_as_str (p2_vpath);
for (; *p1 == *p2; p1++, p2++) for (; *p1 == *p2; p1++, p2++)
if (*p1 == '\0') if (*p1 == '\0')
{
g_free (fp1);
g_free (fp2);
return 0; return 0;
}
if (*p1 == '\0') if (*p1 == '\0')
ret_val = -1; ret_val = -1;
@ -165,8 +159,6 @@ pathcmp (const vfs_path_t * p1_vpath, const vfs_path_t * p2_vpath)
else else
ret_val = (*p1 - *p2); ret_val = (*p1 - *p2);
g_free (fp1);
g_free (fp2);
return ret_val; return ret_val;
} }
@ -332,12 +324,7 @@ tree_store_load_from (char *name)
static char * static char *
encode (const vfs_path_t * vpath, size_t offset) encode (const vfs_path_t * vpath, size_t offset)
{ {
char *string, *ret_val; return strutils_escape (vfs_path_as_str (vpath) + offset, -1, "\n\\", FALSE);
string = vfs_path_to_str (vpath);
ret_val = strutils_escape (string + offset, -1, "\n\\", FALSE);
g_free (string);
return ret_val;
} }
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
@ -581,7 +568,6 @@ should_skip_directory (const vfs_path_t * vpath)
static GList *special_dirs = NULL; static GList *special_dirs = NULL;
GList *l; GList *l;
static gboolean loaded = FALSE; static gboolean loaded = FALSE;
char *dir;
gboolean ret = FALSE; gboolean ret = FALSE;
if (!loaded) if (!loaded)
@ -592,15 +578,13 @@ should_skip_directory (const vfs_path_t * vpath)
process_special_dirs (&special_dirs, global_profile_name); process_special_dirs (&special_dirs, global_profile_name);
} }
dir = vfs_path_to_str (vpath);
for (l = special_dirs; l != NULL; l = g_list_next (l)) for (l = special_dirs; l != NULL; l = g_list_next (l))
if (strncmp (dir, l->data, strlen (l->data)) == 0) if (strncmp (vfs_path_as_str (vpath), l->data, strlen (l->data)) == 0)
{ {
ret = TRUE; ret = TRUE;
break; break;
} }
g_free (dir);
return ret; return ret;
} }
@ -710,12 +694,11 @@ tree_store_remove_entry (const vfs_path_t * name_vpath)
/* Miguel Ugly hack */ /* Miguel Ugly hack */
{ {
char *name;
gboolean is_root; gboolean is_root;
const char *name_vpath_str;
name = vfs_path_to_str (name_vpath); name_vpath_str = vfs_path_as_str (name_vpath);
is_root = (name[0] == PATH_SEP && name[1] == '\0'); is_root = (name_vpath_str[0] == PATH_SEP && name_vpath_str[1] == '\0');
g_free (name);
if (is_root) if (is_root)
return; return;
} }
@ -729,12 +712,9 @@ tree_store_remove_entry (const vfs_path_t * name_vpath)
current = base->next; current = base->next;
while (current != NULL && vfs_path_equal_len (current->name, base->name, len)) while (current != NULL && vfs_path_equal_len (current->name, base->name, len))
{ {
char *current_name;
gboolean ok; gboolean ok;
current_name = vfs_path_to_str (current->name); ok = (current->name->str[len] == '\0' || current->name->str[len] == PATH_SEP);
ok = (current_name[len] == '\0' || current_name[len] == PATH_SEP);
g_free (current_name);
if (!ok) if (!ok)
break; break;
old = current; old = current;
@ -752,7 +732,6 @@ void
tree_store_mark_checked (const char *subname) tree_store_mark_checked (const char *subname)
{ {
vfs_path_t *name; vfs_path_t *name;
char *check_name;
tree_entry *current, *base; tree_entry *current, *base;
int flag = 1; int flag = 1;
if (!ts.loaded) if (!ts.loaded)
@ -765,12 +744,10 @@ tree_store_mark_checked (const char *subname)
if (subname[0] == '.' && (subname[1] == 0 || (subname[1] == '.' && subname[2] == 0))) if (subname[0] == '.' && (subname[1] == 0 || (subname[1] == '.' && subname[2] == 0)))
return; return;
check_name = vfs_path_to_str (ts.check_name); if (ts.check_name->str[0] == PATH_SEP && ts.check_name->str[1] == 0)
if (check_name[0] == PATH_SEP && check_name[1] == 0)
name = vfs_path_build_filename (PATH_SEP_STR, subname, NULL); name = vfs_path_build_filename (PATH_SEP_STR, subname, NULL);
else else
name = vfs_path_append_new (ts.check_name, subname, NULL); name = vfs_path_append_new (ts.check_name, subname, NULL);
g_free (check_name);
/* Search for the subdirectory */ /* Search for the subdirectory */
current = ts.check_start; current = ts.check_start;
@ -798,9 +775,8 @@ tree_store_mark_checked (const char *subname)
{ {
gboolean ok; gboolean ok;
check_name = vfs_path_to_str (current->name); ok = (current->name->str[len] == '\0' || current->name->str[len] == PATH_SEP
ok = (check_name[len] == '\0' || check_name[len] == PATH_SEP || len == 1); || len == 1);
g_free (check_name);
if (!ok) if (!ok)
break; break;
current->mark = 0; current->mark = 0;
@ -853,12 +829,9 @@ tree_store_start_check (const vfs_path_t * vpath)
current = ts.check_start; current = ts.check_start;
while (current != NULL && vfs_path_equal_len (current->name, ts.check_name, len)) while (current != NULL && vfs_path_equal_len (current->name, ts.check_name, len))
{ {
char *current_name;
gboolean ok; gboolean ok;
current_name = vfs_path_to_str (current->name); ok = (current->name->str[len] == '\0' || current->name->str[len] == PATH_SEP || len == 1);
ok = (current_name[len] == '\0' || current_name[len] == PATH_SEP || len == 1);
g_free (current_name);
if (!ok) if (!ok)
break; break;
current->mark = 1; current->mark = 1;
@ -889,12 +862,9 @@ tree_store_end_check (void)
current = ts.check_start; current = ts.check_start;
while (current != NULL && vfs_path_equal_len (current->name, ts.check_name, len)) while (current != NULL && vfs_path_equal_len (current->name, ts.check_name, len))
{ {
char *current_name;
gboolean ok; gboolean ok;
current_name = vfs_path_to_str (current->name); ok = (current->name->str[len] == '\0' || current->name->str[len] == PATH_SEP || len == 1);
ok = (current_name[len] == '\0' || current_name[len] == PATH_SEP || len == 1);
g_free (current_name);
if (!ok) if (!ok)
break; break;

View File

@ -2,9 +2,12 @@
User Menu implementation User Menu implementation
Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1994, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2011 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -266,13 +269,8 @@ test_condition (WEdit * edit_widget, char *p, int *condition)
break; break;
case 'd': case 'd':
p = extract_arg (p, arg, sizeof (arg)); p = extract_arg (p, arg, sizeof (arg));
{ *condition = panel != NULL
char *cwd_str; && mc_search (arg, vfs_path_as_str (panel->cwd_vpath), search_type) ? 1 : 0;
cwd_str = vfs_path_to_str (panel->cwd_vpath);
*condition = panel != NULL && mc_search (arg, cwd_str, search_type) ? 1 : 0;
g_free (cwd_str);
}
break; break;
case 't': case 't':
p = extract_arg (p, arg, sizeof (arg)); p = extract_arg (p, arg, sizeof (arg));
@ -547,22 +545,16 @@ execute_menu_command (WEdit * edit_widget, const char *commands, gboolean show_p
mc_chmod (file_name_vpath, S_IRWXU); mc_chmod (file_name_vpath, S_IRWXU);
if (run_view) if (run_view)
{ {
char *file_name; mcview_viewer (vfs_path_as_str (file_name_vpath), NULL, 0);
file_name = vfs_path_to_str (file_name_vpath);
mcview_viewer (file_name, NULL, 0);
g_free (file_name);
dialog_switch_process_pending (); dialog_switch_process_pending ();
} }
else else
{ {
/* execute the command indirectly to allow execution even /* execute the command indirectly to allow execution even
* on no-exec filesystems. */ * on no-exec filesystems. */
char *file_name, *cmd; char *cmd;
file_name = vfs_path_to_str (file_name_vpath); cmd = g_strconcat ("/bin/sh ", vfs_path_as_str (file_name_vpath), (char *) NULL);
cmd = g_strconcat ("/bin/sh ", file_name, (char *) NULL);
g_free (file_name);
if (!show_prompt) if (!show_prompt)
{ {
if (system (cmd) == -1) if (system (cmd) == -1)
@ -798,7 +790,7 @@ expand_format (struct WEdit *edit_widget, char c, gboolean do_quote)
char *qstr; char *qstr;
if (panel) if (panel)
cwd = vfs_path_to_str (panel->cwd_vpath); cwd = g_strdup (vfs_path_as_str (panel->cwd_vpath));
else else
cwd = vfs_get_current_dir (); cwd = vfs_get_current_dir ();

View File

@ -2,9 +2,12 @@
Concurrent shell support for the Midnight Commander Concurrent shell support for the Midnight Commander
Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, Copyright (C) 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2011 2005, 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -958,13 +961,7 @@ invoke_subshell (const char *command, int how, vfs_path_t ** new_dir_vpath)
feed_subshell (how, FALSE); feed_subshell (how, FALSE);
{ pcwd = vfs_translate_path_n (vfs_path_as_str (current_panel->cwd_vpath));
char *cwd_str;
cwd_str = vfs_path_to_str (current_panel->cwd_vpath);
pcwd = vfs_translate_path_n (cwd_str);
g_free (cwd_str);
}
if (new_dir_vpath != NULL && subshell_alive && strcmp (subshell_cwd, pcwd)) if (new_dir_vpath != NULL && subshell_alive && strcmp (subshell_cwd, pcwd))
*new_dir_vpath = vfs_path_from_str (subshell_cwd); /* Make MC change to the subshell's CWD */ *new_dir_vpath = vfs_path_from_str (subshell_cwd); /* Make MC change to the subshell's CWD */
@ -1152,7 +1149,6 @@ void
do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt, gboolean reset_prompt) do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt, gboolean reset_prompt)
{ {
char *pcwd; char *pcwd;
char *directory;
pcwd = vfs_path_to_str_flags (current_panel->cwd_vpath, 0, VPF_RECODE); pcwd = vfs_path_to_str_flags (current_panel->cwd_vpath, 0, VPF_RECODE);
@ -1172,12 +1168,11 @@ do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt, gboolean re
because we set "HISTCONTROL=ignorespace") */ because we set "HISTCONTROL=ignorespace") */
write_all (mc_global.tty.subshell_pty, " cd ", 4); write_all (mc_global.tty.subshell_pty, " cd ", 4);
directory = vfs_path_to_str (vpath); if (vpath != NULL)
if (directory != NULL)
{ {
char *translate; char *translate;
translate = vfs_translate_path_n (directory); translate = vfs_translate_path_n (vfs_path_as_str (vpath));
if (translate != NULL) if (translate != NULL)
{ {
GString *temp; GString *temp;
@ -1197,7 +1192,6 @@ do_subshell_chdir (const vfs_path_t * vpath, gboolean update_prompt, gboolean re
{ {
write_all (mc_global.tty.subshell_pty, "/", 1); write_all (mc_global.tty.subshell_pty, "/", 1);
} }
g_free (directory);
write_all (mc_global.tty.subshell_pty, "\n", 1); write_all (mc_global.tty.subshell_pty, "\n", 1);
subshell_state = RUNNING_COMMAND; subshell_state = RUNNING_COMMAND;

View File

@ -1,11 +1,12 @@
/* /*
Various non-library utilities Various non-library utilities
Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Adam Byrtek, 2003 Adam Byrtek, 2003
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -51,35 +52,23 @@
gboolean gboolean
check_for_default (const vfs_path_t * default_file_vpath, const vfs_path_t * file_vpath) check_for_default (const vfs_path_t * default_file_vpath, const vfs_path_t * file_vpath)
{ {
char *file; if (!exist_file (vfs_path_as_str (file_vpath)))
file = vfs_path_to_str (file_vpath);
if (!exist_file (file))
{ {
char *default_file;
FileOpContext *ctx; FileOpContext *ctx;
FileOpTotalContext *tctx; FileOpTotalContext *tctx;
default_file = vfs_path_to_str (default_file_vpath); if (!exist_file (vfs_path_as_str (default_file_vpath)))
if (!exist_file (default_file))
{
g_free (file);
g_free (default_file);
return FALSE; return FALSE;
}
ctx = file_op_context_new (OP_COPY); ctx = file_op_context_new (OP_COPY);
tctx = file_op_total_context_new (); tctx = file_op_total_context_new ();
file_op_context_create_ui (ctx, 0, FALSE); file_op_context_create_ui (ctx, 0, FALSE);
copy_file_file (tctx, ctx, default_file, file); copy_file_file (tctx, ctx, vfs_path_as_str (default_file_vpath),
vfs_path_as_str (file_vpath));
file_op_total_context_destroy (tctx); file_op_total_context_destroy (tctx);
file_op_context_destroy (ctx); file_op_context_destroy (ctx);
g_free (default_file);
} }
g_free (file);
return TRUE; return TRUE;
} }

View File

@ -1,11 +1,12 @@
/* /*
Virtual File System: GNU Tar file system. Virtual File System: GNU Tar file system.
Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2011 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Jan Hudec, 2000 Jan Hudec, 2000
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -224,15 +225,11 @@ cpio_open_cpio_file (struct vfs_class *me, struct vfs_s_super *super, const vfs_
fd = mc_open (vpath, O_RDONLY); fd = mc_open (vpath, O_RDONLY);
if (fd == -1) if (fd == -1)
{ {
char *name; message (D_ERROR, MSG_ERROR, _("Cannot open cpio archive\n%s"), vfs_path_as_str (vpath));
name = vfs_path_to_str (vpath);
message (D_ERROR, MSG_ERROR, _("Cannot open cpio archive\n%s"), name);
g_free (name);
return -1; return -1;
} }
super->name = vfs_path_to_str (vpath); super->name = g_strdup (vfs_path_as_str (vpath));
super->data = g_new (cpio_super_data_t, 1); super->data = g_new (cpio_super_data_t, 1);
arch = (cpio_super_data_t *) super->data; arch = (cpio_super_data_t *) super->data;
arch->fd = -1; /* for now */ arch->fd = -1; /* for now */
@ -745,11 +742,8 @@ cpio_open_archive (struct vfs_s_super *super, const vfs_path_t * vpath,
{ {
case STATUS_EOF: case STATUS_EOF:
{ {
char *archive_name; message (D_ERROR, MSG_ERROR, _("Unexpected end of file\n%s"),
vfs_path_as_str (vpath));
archive_name = vfs_path_to_str (vpath);
message (D_ERROR, MSG_ERROR, _("Unexpected end of file\n%s"), archive_name);
g_free (archive_name);
return 0; return 0;
} }
case STATUS_OK: case STATUS_OK:
@ -783,16 +777,11 @@ cpio_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *p
const vfs_path_t * vpath, void *cookie) const vfs_path_t * vpath, void *cookie)
{ {
struct stat *archive_stat = cookie; /* stat of main archive */ struct stat *archive_stat = cookie; /* stat of main archive */
char *archive_name = vfs_path_to_str (vpath);
(void) vpath_element; (void) vpath_element;
if (strcmp (parc->name, archive_name)) if (strcmp (parc->name, vfs_path_as_str (vpath)))
{
g_free (archive_name);
return 0; return 0;
}
g_free (archive_name);
/* Has the cached archive been changed on the disk? */ /* Has the cached archive been changed on the disk? */
if (((cpio_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime) if (((cpio_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime)

View File

@ -2,13 +2,14 @@
Virtual File System: External file system. Virtual File System: External file system.
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2009, 2011 2006, 2007, 2009, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Jakub Jelinek, 1995 Jakub Jelinek, 1995
Pavel Machek, 1998 Pavel Machek, 1998
Andrew T. Veliath, 1999 Andrew T. Veliath, 1999
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -665,7 +666,6 @@ extfs_which (struct vfs_class *me, const char *path)
static const char * static const char *
extfs_get_path_int (const vfs_path_t * vpath, struct archive **archive, gboolean do_not_open) extfs_get_path_int (const vfs_path_t * vpath, struct archive **archive, gboolean do_not_open)
{ {
char *archive_name;
int result = -1; int result = -1;
struct archive *parc; struct archive *parc;
int fstype; int fstype;
@ -677,8 +677,6 @@ extfs_get_path_int (const vfs_path_t * vpath, struct archive **archive, gboolean
if (fstype == -1) if (fstype == -1)
return NULL; return NULL;
archive_name = vfs_path_to_str_elements_count (vpath, -1);
/* /*
* All filesystems should have some local archive, at least * All filesystems should have some local archive, at least
* it can be PATH_SEP ('/'). * it can be PATH_SEP ('/').
@ -686,24 +684,22 @@ extfs_get_path_int (const vfs_path_t * vpath, struct archive **archive, gboolean
for (parc = first_archive; parc != NULL; parc = parc->next) for (parc = first_archive; parc != NULL; parc = parc->next)
if (parc->name != NULL) if (parc->name != NULL)
{ {
if (strcmp (parc->name, archive_name) == 0) if (strcmp (parc->name, vfs_path_as_str (vpath)) == 0)
{ {
vfs_stamp (&vfs_extfs_ops, (vfsid) parc); vfs_stamp (&vfs_extfs_ops, (vfsid) parc);
goto return_success; goto return_success;
} }
} }
result = do_not_open ? -1 : extfs_read_archive (fstype, archive_name, &parc); result = do_not_open ? -1 : extfs_read_archive (fstype, vfs_path_as_str (vpath), &parc);
if (result == -1) if (result == -1)
{ {
path_element->class->verrno = EIO; path_element->class->verrno = EIO;
g_free (archive_name);
return NULL; return NULL;
} }
return_success: return_success:
*archive = parc; *archive = parc;
g_free (archive_name);
return path_element->path; return path_element->path;
} }

View File

@ -3,14 +3,14 @@
shell connections. shell connections.
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
2007, 2008, 2009, 2010, 2011 2007, 2008, 2009, 2010, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Pavel Machek, 1998 Pavel Machek, 1998
Michal Svec, 2000 Michal Svec, 2000
Andrew Borodin <aborodin@vmail.ru>, 2010 Andrew Borodin <aborodin@vmail.ru>, 2010
Slava Zanko <slavazanko@gmail.com>, 2010 Slava Zanko <slavazanko@gmail.com>, 2010, 2013
Ilia Maslakov <il.smind@gmail.com>, 2010 Ilia Maslakov <il.smind@gmail.com>, 2010
Derived from ftpfs.c. Derived from ftpfs.c.
@ -1521,7 +1521,7 @@ fish_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t m
vfs_path_free (vpath); vfs_path_free (vpath);
goto fail; goto fail;
} }
fh->ino->localname = vfs_path_to_str (vpath); fh->ino->localname = g_strdup (vfs_path_as_str (vpath));
vfs_path_free (vpath); vfs_path_free (vpath);
close (tmp_handle); close (tmp_handle);
} }

View File

@ -2,7 +2,7 @@
Virtual File System: FTP file system. Virtual File System: FTP file system.
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011 2006, 2007, 2008, 2009, 2010, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
@ -12,7 +12,7 @@
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Pavel Machek, 1998 Pavel Machek, 1998
Yury V. Zaytsev, 2010 Yury V. Zaytsev, 2010
Slava Zanko <slavazanko@gmail.com>, 2010 Slava Zanko <slavazanko@gmail.com>, 2010, 2013
Andrew Borodin <aborodin@vmail.ru>, 2010 Andrew Borodin <aborodin@vmail.ru>, 2010
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -2156,7 +2156,7 @@ ftpfs_fh_open (struct vfs_class *me, vfs_file_handler_t * fh, int flags, mode_t
goto fail; goto fail;
} }
close (handle); close (handle);
fh->ino->localname = vfs_path_to_str (vpath); fh->ino->localname = g_strdup (vfs_path_as_str (vpath));
vfs_path_free (vpath); vfs_path_free (vpath);
ftp->append = flags & O_APPEND; ftp->append = flags & O_APPEND;
} }

View File

@ -2,9 +2,12 @@
Single File fileSystem Single File fileSystem
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2011 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by:
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
The Midnight Commander is free software: you can redistribute it The Midnight Commander is free software: you can redistribute it
@ -157,13 +160,8 @@ sfs_vfmake (const vfs_path_t * vpath, vfs_path_t * cache_vpath)
vfs_path_free (s); vfs_path_free (s);
} }
else else
{ pqname = name_quote (vfs_path_as_str (pname), 0);
char *pname_str;
pname_str = vfs_path_to_str (pname);
pqname = name_quote (pname_str, 0);
g_free (pname_str);
}
vfs_path_free (pname); vfs_path_free (pname);
@ -226,12 +224,9 @@ sfs_redirect (const vfs_path_t * vpath)
vfs_path_t *cache_vpath; vfs_path_t *cache_vpath;
int handle; int handle;
const vfs_path_element_t *path_element; const vfs_path_element_t *path_element;
char *path;
path = vfs_path_to_str (vpath);
path_element = vfs_path_get_by_index (vpath, -1); path_element = vfs_path_get_by_index (vpath, -1);
cur = g_slist_find_custom (head, path, cachedfile_compare); cur = g_slist_find_custom (head, vfs_path_as_str (vpath), cachedfile_compare);
g_free (path);
if (cur != NULL) if (cur != NULL)
{ {
@ -250,8 +245,8 @@ sfs_redirect (const vfs_path_t * vpath)
if (sfs_vfmake (vpath, cache_vpath) == 0) if (sfs_vfmake (vpath, cache_vpath) == 0)
{ {
cf = g_new (cachedfile, 1); cf = g_new (cachedfile, 1);
cf->name = vfs_path_to_str (vpath); cf->name = g_strdup (vfs_path_as_str (vpath));
cf->cache = vfs_path_to_str (cache_vpath); cf->cache = g_strdup (vfs_path_as_str (cache_vpath));
head = g_slist_prepend (head, cf); head = g_slist_prepend (head, cf);
vfs_path_free (cache_vpath); vfs_path_free (cache_vpath);
@ -341,10 +336,8 @@ static vfsid
sfs_getid (const vfs_path_t * vpath) sfs_getid (const vfs_path_t * vpath)
{ {
GSList *cur; GSList *cur;
char *path = vfs_path_to_str (vpath);
cur = g_slist_find_custom (head, path, cachedfile_compare); cur = g_slist_find_custom (head, vfs_path_as_str (vpath), cachedfile_compare);
g_free (path);
return (vfsid) (cur != NULL ? cur->data : NULL); return (vfsid) (cur != NULL ? cur->data : NULL);
} }

View File

@ -1,12 +1,12 @@
/* Virtual File System: SFTP file system. /* Virtual File System: SFTP file system.
The SSH config parser The SSH config parser
Copyright (C) 2011 Copyright (C) 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Ilia Maslakov <il.smind@gmail.com>, 2011 Ilia Maslakov <il.smind@gmail.com>, 2011
Slava Zanko <slavazanko@gmail.com>, 2011, 2012 Slava Zanko <slavazanko@gmail.com>, 2011, 2012, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -121,7 +121,7 @@ sftpfs_correct_file_name (const char *filename)
char *ret_value; char *ret_value;
vpath = vfs_path_from_str (filename); vpath = vfs_path_from_str (filename);
ret_value = vfs_path_to_str (vpath); ret_value = g_strdup (vfs_path_as_str (vpath));
vfs_path_free (vpath); vfs_path_free (vpath);
return ret_value; return ret_value;
} }

View File

@ -2,12 +2,13 @@
Virtual File System: GNU Tar file system. Virtual File System: GNU Tar file system.
Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, Copyright (C) 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2011 2006, 2007, 2011, 2013
The Free Software Foundation, Inc. The Free Software Foundation, Inc.
Written by: Written by:
Jakub Jelinek, 1995 Jakub Jelinek, 1995
Pavel Machek, 1998 Pavel Machek, 1998
Slava Zanko <slavazanko@gmail.com>, 2013
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -291,15 +292,11 @@ tar_open_archive_int (struct vfs_class *me, const vfs_path_t * vpath, struct vfs
result = mc_open (vpath, O_RDONLY); result = mc_open (vpath, O_RDONLY);
if (result == -1) if (result == -1)
{ {
char *name; message (D_ERROR, MSG_ERROR, _("Cannot open tar archive\n%s"), vfs_path_as_str (vpath));
name = vfs_path_to_str (vpath);
message (D_ERROR, MSG_ERROR, _("Cannot open tar archive\n%s"), name);
g_free (name);
ERRNOR (ENOENT, -1); ERRNOR (ENOENT, -1);
} }
archive->name = vfs_path_to_str (vpath); archive->name = g_strdup (vfs_path_as_str (vpath));
archive->data = g_new (tar_super_data_t, 1); archive->data = g_new (tar_super_data_t, 1);
arch = (tar_super_data_t *) archive->data; arch = (tar_super_data_t *) archive->data;
mc_stat (vpath, &arch->st); mc_stat (vpath, &arch->st);
@ -791,10 +788,8 @@ tar_open_archive (struct vfs_s_super *archive, const vfs_path_t * vpath,
/* Error on first record */ /* Error on first record */
case STATUS_EOFMARK: case STATUS_EOFMARK:
{ {
char *archive_name = vfs_path_to_str (vpath);
message (D_ERROR, MSG_ERROR, _("%s\ndoesn't look like a tar archive."), message (D_ERROR, MSG_ERROR, _("%s\ndoesn't look like a tar archive."),
archive_name); vfs_path_as_str (vpath));
g_free (archive_name);
/* FALL THRU */ /* FALL THRU */
/* Error after header rec */ /* Error after header rec */
@ -841,16 +836,11 @@ tar_super_same (const vfs_path_element_t * vpath_element, struct vfs_s_super *pa
const vfs_path_t * vpath, void *cookie) const vfs_path_t * vpath, void *cookie)
{ {
struct stat *archive_stat = cookie; /* stat of main archive */ struct stat *archive_stat = cookie; /* stat of main archive */
char *archive_name = vfs_path_to_str (vpath);
(void) vpath_element; (void) vpath_element;
if (strcmp (parc->name, archive_name) != 0) if (strcmp (parc->name, vfs_path_as_str (vpath)) != 0)
{
g_free (archive_name);
return 0; return 0;
}
g_free (archive_name);
/* Has the cached archive been changed on the disk? */ /* Has the cached archive been changed on the disk? */
if (((tar_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime) if (((tar_super_data_t *) parc->data)->st.st_mtime < archive_stat->st_mtime)

View File

@ -14,7 +14,7 @@
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Pavel Machek, 1998 Pavel Machek, 1998
Roland Illig <roland.illig@gmx.de>, 2004, 2005 Roland Illig <roland.illig@gmx.de>, 2004, 2005
Slava Zanko <slavazanko@google.com>, 2009 Slava Zanko <slavazanko@google.com>, 2009, 2013
Andrew Borodin <aborodin@vmail.ru>, 2009, 2013 Andrew Borodin <aborodin@vmail.ru>, 2009, 2013
Ilia Maslakov <il.smind@gmail.com>, 2009 Ilia Maslakov <il.smind@gmail.com>, 2009
@ -275,7 +275,6 @@ mcview_load_next_prev_init (mcview_t * view)
/* TODO: check mtime of directory to reload it */ /* TODO: check mtime of directory to reload it */
char *full_fname;
const char *fname; const char *fname;
size_t fname_len; size_t fname_len;
int i; int i;
@ -288,8 +287,7 @@ mcview_load_next_prev_init (mcview_t * view)
*view->dir_count = do_load_dir (view->workdir_vpath, view->dir, (sortfn *) sort_name, FALSE, *view->dir_count = do_load_dir (view->workdir_vpath, view->dir, (sortfn *) sort_name, FALSE,
TRUE, FALSE, NULL); TRUE, FALSE, NULL);
full_fname = vfs_path_to_str (view->filename_vpath); fname = x_basename (vfs_path_as_str (view->filename_vpath));
fname = x_basename (full_fname);
fname_len = strlen (fname); fname_len = strlen (fname);
/* search current file in the list */ /* search current file in the list */
@ -301,8 +299,6 @@ mcview_load_next_prev_init (mcview_t * view)
break; break;
} }
g_free (full_fname);
*view->dir_idx = i; *view->dir_idx = i;
} }
} }
@ -352,13 +348,7 @@ mcview_load_next_prev (mcview_t * view, int direction)
mcview_remove_ext_script (view); mcview_remove_ext_script (view);
mcview_init (view); mcview_init (view);
if (regex_command_for (view, vfile, "View", &ext_script) == 0) if (regex_command_for (view, vfile, "View", &ext_script) == 0)
{ mcview_load (view, NULL, vfs_path_as_str (vfile), 0);
char *file;
file = vfs_path_to_str (vfile);
mcview_load (view, NULL, file, 0);
g_free (file);
}
vfs_path_free (vfile); vfs_path_free (vfile);
view->dir = dir; view->dir = dir;
view->dir_count = dir_count; view->dir_count = dir_count;

View File

@ -14,7 +14,7 @@
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Pavel Machek, 1998 Pavel Machek, 1998
Roland Illig <roland.illig@gmx.de>, 2004, 2005 Roland Illig <roland.illig@gmx.de>, 2004, 2005
Slava Zanko <slavazanko@google.com>, 2009 Slava Zanko <slavazanko@google.com>, 2009, 2013
Andrew Borodin <aborodin@vmail.ru>, 2009, 2013 Andrew Borodin <aborodin@vmail.ru>, 2009, 2013
Ilia Maslakov <il.smind@gmail.com>, 2009 Ilia Maslakov <il.smind@gmail.com>, 2009
@ -76,7 +76,7 @@ const off_t OFFSETTYPE_MAX = ((off_t) 1 << (OFF_T_BITWIDTH - 1)) - 1;
void void
mcview_toggle_magic_mode (mcview_t * view) mcview_toggle_magic_mode (mcview_t * view)
{ {
char *filename, *command; char *command;
dir_list *dir; dir_list *dir;
int *dir_count, *dir_idx; int *dir_count, *dir_idx;
@ -84,7 +84,6 @@ mcview_toggle_magic_mode (mcview_t * view)
view->magic_mode = !view->magic_mode; view->magic_mode = !view->magic_mode;
/* reinit view */ /* reinit view */
filename = vfs_path_to_str (view->filename_vpath);
command = g_strdup (view->command); command = g_strdup (view->command);
dir = view->dir; dir = view->dir;
dir_count = view->dir_count; dir_count = view->dir_count;
@ -94,11 +93,10 @@ mcview_toggle_magic_mode (mcview_t * view)
view->dir_idx = NULL; view->dir_idx = NULL;
mcview_done (view); mcview_done (view);
mcview_init (view); mcview_init (view);
mcview_load (view, command, filename, 0); mcview_load (view, command, vfs_path_as_str (view->filename_vpath), 0);
view->dir = dir; view->dir = dir;
view->dir_count = dir_count; view->dir_count = dir_count;
view->dir_idx = dir_idx; view->dir_idx = dir_idx;
g_free (filename);
g_free (command); g_free (command);
view->dpy_bbar_dirty = TRUE; view->dpy_bbar_dirty = TRUE;
@ -437,10 +435,10 @@ mcview_get_title (const WDialog * h, size_t len)
const mcview_t *view = (const mcview_t *) find_widget_type (h, mcview_callback); const mcview_t *view = (const mcview_t *) find_widget_type (h, mcview_callback);
const char *modified = view->hexedit_mode && (view->change_list != NULL) ? "(*) " : " "; const char *modified = view->hexedit_mode && (view->change_list != NULL) ? "(*) " : " ";
const char *file_label; const char *file_label;
char *view_filename; const char *view_filename;
char *ret_str; char *ret_str;
view_filename = view->filename_vpath != NULL ? vfs_path_to_str (view->filename_vpath) : NULL; view_filename = vfs_path_as_str (view->filename_vpath);
len -= 4; len -= 4;
@ -448,7 +446,6 @@ mcview_get_title (const WDialog * h, size_t len)
file_label = str_term_trim (file_label, len - str_term_width1 (_("View: "))); file_label = str_term_trim (file_label, len - str_term_width1 (_("View: ")));
ret_str = g_strconcat (_("View: "), modified, file_label, (char *) NULL); ret_str = g_strconcat (_("View: "), modified, file_label, (char *) NULL);
g_free (view_filename);
return ret_str; return ret_str;
} }

View File

@ -14,7 +14,7 @@
Norbert Warmuth, 1997 Norbert Warmuth, 1997
Pavel Machek, 1998 Pavel Machek, 1998
Roland Illig <roland.illig@gmx.de>, 2004, 2005 Roland Illig <roland.illig@gmx.de>, 2004, 2005
Slava Zanko <slavazanko@google.com>, 2009 Slava Zanko <slavazanko@google.com>, 2009, 2013
Andrew Borodin <aborodin@vmail.ru>, 2009, 2013 Andrew Borodin <aborodin@vmail.ru>, 2009, 2013
Ilia Maslakov <il.smind@gmail.com>, 2009 Ilia Maslakov <il.smind@gmail.com>, 2009
@ -246,13 +246,7 @@ mcview_viewer (const char *command, const vfs_path_t * file_vpath, int start_lin
view_dlg->get_title = mcview_get_title; view_dlg->get_title = mcview_get_title;
{ succeeded = mcview_load (lc_mcview, command, vfs_path_as_str (file_vpath), start_line);
char *file;
file = vfs_path_to_str (file_vpath);
succeeded = mcview_load (lc_mcview, command, file, start_line);
g_free (file);
}
if (succeeded) if (succeeded)
run_dlg (view_dlg); run_dlg (view_dlg);

View File

@ -354,13 +354,8 @@ START_PARAMETRIZED_TEST (test_vfs_path_append_vpath, test_vfs_path_append_vpath_
vpath3 = vfs_path_append_vpath_new (vpath1, vpath2, NULL); vpath3 = vfs_path_append_vpath_new (vpath1, vpath2, NULL);
/* then */ /* then */
{ mctest_assert_int_eq (vfs_path_elements_count (vpath3), data->expected_element_count);
char *path; mctest_assert_str_eq (vfs_path_as_str (vpath3), data->expected_path);
mctest_assert_int_eq (vfs_path_elements_count (vpath3), data->expected_element_count);
path = vfs_path_to_str (vpath3);
mctest_assert_str_eq (path, data->expected_path);
g_free (path);
}
vfs_path_free (vpath1); vfs_path_free (vpath1);
vfs_path_free (vpath2); vfs_path_free (vpath2);
@ -409,14 +404,8 @@ START_PARAMETRIZED_TEST (test_vfs_path_relative, test_vfs_path_relative_ds)
/* then */ /* then */
mctest_assert_int_eq (vpath->relative, TRUE); mctest_assert_int_eq (vpath->relative, TRUE);
mctest_assert_str_eq (vfs_path_get_last_path_str (vpath), data->expected_last_path_in_element); mctest_assert_str_eq (vfs_path_get_last_path_str (vpath), data->expected_last_path_in_element);
mctest_assert_str_eq (vfs_path_as_str (vpath), data->expected_path);
{
char *path_str;
path_str = vfs_path_to_str (vpath);
mctest_assert_str_eq (path_str, data->expected_path);
g_free (path_str);
}
vfs_path_free (vpath); vfs_path_free (vpath);
} }
/* *INDENT-OFF* */ /* *INDENT-OFF* */
@ -443,14 +432,8 @@ START_PARAMETRIZED_TEST (test_vfs_path_relative_clone, test_vfs_path_relative_ds
mctest_assert_int_eq (cloned_vpath->relative, TRUE); mctest_assert_int_eq (cloned_vpath->relative, TRUE);
mctest_assert_str_eq (vfs_path_get_last_path_str (cloned_vpath), mctest_assert_str_eq (vfs_path_get_last_path_str (cloned_vpath),
data->expected_last_path_in_element); data->expected_last_path_in_element);
mctest_assert_str_eq (vfs_path_as_str (cloned_vpath), data->expected_path);
{
char *path_str;
path_str = vfs_path_to_str (cloned_vpath);
mctest_assert_str_eq (path_str, data->expected_path);
g_free (path_str);
}
vfs_path_free (vpath); vfs_path_free (vpath);
vfs_path_free (cloned_vpath); vfs_path_free (cloned_vpath);
} }

View File

@ -141,21 +141,21 @@ START_PARAMETRIZED_TEST (test_path_recode, test_path_recode_ds)
{ {
/* given */ /* given */
vfs_path_t *vpath; vfs_path_t *vpath;
char *result;
const vfs_path_element_t *element; const vfs_path_element_t *element;
const char *vpath_str;
test_init_vfs (data->input_codepage); test_init_vfs (data->input_codepage);
/* when */ /* when */
vpath = vfs_path_from_str (data->input_path); vpath = vfs_path_from_str (data->input_path);
element = vfs_path_get_by_index (vpath, -1); element = vfs_path_get_by_index (vpath, -1);
result = vfs_path_to_str (vpath);
/* then */ /* then */
vpath_str = vfs_path_as_str (vpath);
mctest_assert_ptr_ne (vpath, NULL);
mctest_assert_str_eq (element->path, data->expected_element_path); mctest_assert_str_eq (element->path, data->expected_element_path);
mctest_assert_str_eq (result, data->expected_recoded_path); mctest_assert_str_eq (vpath_str, data->expected_recoded_path);
g_free (result);
vfs_path_free (vpath); vfs_path_free (vpath);
test_deinit_vfs (); test_deinit_vfs ();
} }

View File

@ -173,19 +173,16 @@ START_TEST (test_path_deserialize)
{ {
/* given */ /* given */
vfs_path_t *vpath; vfs_path_t *vpath;
char *path;
GError *error = NULL; GError *error = NULL;
/* when */ /* when */
vpath = vfs_path_deserialize (ETALON_SERIALIZED_PATH, &error); vpath = vfs_path_deserialize (ETALON_SERIALIZED_PATH, &error);
path = vfs_path_to_str (vpath);
/* then */ /* then */
mctest_assert_ptr_ne (vpath, NULL); mctest_assert_ptr_ne (vpath, NULL);
mctest_assert_str_eq (path, ETALON_PATH_URL_STR); mctest_assert_str_eq (vfs_path_as_str (vpath), ETALON_PATH_URL_STR);
vfs_path_free (vpath); vfs_path_free (vpath);
g_free (path);
} }
/* *INDENT-OFF* */ /* *INDENT-OFF* */

View File

@ -99,26 +99,24 @@ START_TEST (test_mc_mkstemps)
{ {
/* given */ /* given */
vfs_path_t *pname_vpath = NULL; vfs_path_t *pname_vpath = NULL;
char *pname = NULL;
char *begin_pname; char *begin_pname;
int fd; int fd;
/* when */ /* when */
fd = mc_mkstemps (&pname_vpath, "mctest-", NULL); fd = mc_mkstemps (&pname_vpath, "mctest-", NULL);
if (fd != -1)
pname = vfs_path_to_str (pname_vpath);
begin_pname = g_build_filename (mc_tmpdir (), "mctest-", NULL); begin_pname = g_build_filename (mc_tmpdir (), "mctest-", NULL);
/* then */ /* then */
vfs_path_free (pname_vpath);
close (fd); close (fd);
mctest_assert_int_ne (fd, -1); mctest_assert_int_ne (fd, -1);
fail_unless (g_file_test (pname, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR), fail_unless (g_file_test
"\nNo such file: %s\n", pname); (vfs_path_as_str (pname_vpath), G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR),
unlink (pname); "\nNo such file: %s\n", vfs_path_as_str (pname_vpath));
fail_unless (strncmp (pname, begin_pname, strlen (begin_pname)) == 0, unlink (vfs_path_as_str (pname_vpath));
"\nstart of %s should be equal to %s\n", pname, begin_pname); fail_unless (strncmp (vfs_path_as_str (pname_vpath), begin_pname, strlen (begin_pname)) == 0,
g_free (pname); "\nstart of %s should be equal to %s\n", vfs_path_as_str (pname_vpath),
begin_pname);
vfs_path_free (pname_vpath);
} }
/* *INDENT-OFF* */ /* *INDENT-OFF* */
END_TEST END_TEST

View File

@ -188,7 +188,7 @@ START_PARAMETRIZED_TEST (test_from_to_string, test_from_to_string_ds)
/* when */ /* when */
vpath_len = vfs_path_elements_count (vpath); vpath_len = vfs_path_elements_count (vpath);
actual_result = vfs_path_to_str (vpath); actual_result = vfs_path_as_str (vpath);
path_element = vfs_path_get_by_index (vpath, -1); path_element = vfs_path_get_by_index (vpath, -1);
/* then */ /* then */
@ -197,7 +197,6 @@ START_PARAMETRIZED_TEST (test_from_to_string, test_from_to_string_ds)
mctest_assert_ptr_eq (path_element->class, data->expected_vfs_class); mctest_assert_ptr_eq (path_element->class, data->expected_vfs_class);
mctest_assert_str_eq (path_element->path, data->expected_element_path); mctest_assert_str_eq (path_element->path, data->expected_element_path);
g_free (actual_result);
vfs_path_free (vpath); vfs_path_free (vpath);
} }
/* *INDENT-OFF* */ /* *INDENT-OFF* */
@ -298,14 +297,14 @@ START_TEST (test_vfs_path_encoding_at_end)
{ {
/* given */ /* given */
vfs_path_t *vpath; vfs_path_t *vpath;
char *result; const char *result;
const vfs_path_element_t *element; const vfs_path_element_t *element;
vpath = vpath =
vfs_path_from_str_flags ("/path/to/file.ext#test1:/#enc:KOI8-R", VPF_USE_DEPRECATED_PARSER); vfs_path_from_str_flags ("/path/to/file.ext#test1:/#enc:KOI8-R", VPF_USE_DEPRECATED_PARSER);
/* when */ /* when */
result = vfs_path_to_str (vpath); result = vfs_path_as_str (vpath);
element = vfs_path_get_by_index (vpath, -1); element = vfs_path_get_by_index (vpath, -1);
/* then */ /* then */
@ -313,7 +312,6 @@ START_TEST (test_vfs_path_encoding_at_end)
mctest_assert_not_null (element->encoding); mctest_assert_not_null (element->encoding);
mctest_assert_str_eq (result, ETALON_STR); mctest_assert_str_eq (result, ETALON_STR);
g_free (result);
vfs_path_free (vpath); vfs_path_free (vpath);
} }

View File

@ -47,15 +47,13 @@ test1_mock_open_archive (struct vfs_s_super *super, const vfs_path_t * vpath,
const vfs_path_element_t * vpath_element) const vfs_path_element_t * vpath_element)
{ {
struct vfs_s_inode *root; struct vfs_s_inode *root;
char *spath = vfs_path_to_str (vpath);
mctest_assert_str_eq (spath, "/" ETALON_VFS_URL_NAME ARCH_NAME); mctest_assert_str_eq (vfs_path_as_str (vpath), "/" ETALON_VFS_URL_NAME ARCH_NAME);
super->name = g_strdup (spath); super->name = g_strdup (vfs_path_as_str (vpath));
super->data = g_new (char *, 1); super->data = g_new (char *, 1);
root = vfs_s_new_inode (vpath_element->class, super, NULL); root = vfs_s_new_inode (vpath_element->class, super, NULL);
super->root = root; super->root = root;
g_free (spath);
return 0; return 0;
} }

View File

@ -142,13 +142,8 @@ START_PARAMETRIZED_TEST (test_empty_mean_home, test_empty_mean_home_ds)
g_free (input_command); g_free (input_command);
} }
/* then */ /* then */
{ mctest_assert_str_eq (mc_config_get_home_dir__return_value,
char *actual_path; vfs_path_as_str (do_cd__new_dir_vpath__captured));
actual_path = vfs_path_to_str (do_cd__new_dir_vpath__captured);
mctest_assert_str_eq (mc_config_get_home_dir__return_value, actual_path);
g_free (actual_path);
}
mctest_assert_int_eq (do_cd__cd_type__captured, cd_parse_command); mctest_assert_int_eq (do_cd__cd_type__captured, cd_parse_command);
} }
/* *INDENT-OFF* */ /* *INDENT-OFF* */