Все чудесатее и чудесатее...
Это долбаное сообщение выдается следующим кодом:
if (bPathNotEq && mc_global.shell->type == SHELL_TCSH)
{
char rp_subshell_cwd[PATH_MAX];
char rp_current_panel_cwd[PATH_MAX];
char *p_subshell_cwd, *p_current_panel_cwd;
p_subshell_cwd = mc_realpath (subshell_cwd, rp_subshell_cwd);
p_current_panel_cwd = mc_realpath (pcwd, rp_current_panel_cwd);
if (p_subshell_cwd == NULL)
p_subshell_cwd = subshell_cwd;
if (p_current_panel_cwd == NULL)
p_current_panel_cwd = pcwd;
bPathNotEq = strcmp (p_subshell_cwd, p_current_panel_cwd) != 0;
}
if (bPathNotEq && !DIR_IS_DOT (pcwd))
{
char *cwd;
cwd =
vfs_path_to_str_flags (subshell_get_cwd_from_current_panel (), 0,
VPF_STRIP_PASSWORD);
vfs_print_message (_("Warning: Cannot change to %s.\n"), cwd);
g_free (cwd);
}
Здесь subshell_cwd заполняется вызовом feed_subshell(), а pcwd - вызовом subshell_get_cwd_from_current_panel(). Первая содержит неправильное значение, вторая правильное. Естественно, условие срабатывает и бэмц. subshell_cwd в feed_subshell() заполняется через стандартный read():
bytes = read (subshell_pipe[READ], subshell_cwd, sizeof (subshell_cwd));
И вот тут я пока затупил - если mc запускается из tcsh, то read, найдя имя каталога с пробелом - читает
до ближайшего слэша!. Если из bash - читает ровно столько, сколько надо. WTF?