1
1

* dir.c (do_load_dir): Add an error message if mc_opendir()

fails.
(do_reload_dir): Likewise.
* screen.c (do_enter_on_file_entry): Add an error message if
do_cd() fails.
Этот коммит содержится в:
Pavel Roskin 2002-12-16 06:42:15 +00:00
родитель 1b2f7e7d13
Коммит 0e1af8e457
4 изменённых файлов: 33 добавлений и 22 удалений

Просмотреть файл

@ -1,3 +1,11 @@
2002-12-16 Pavel Roskin <proski@gnu.org>
* dir.c (do_load_dir): Add an error message if mc_opendir()
fails.
(do_reload_dir): Likewise.
* screen.c (do_enter_on_file_entry): Add an error message if
do_cd() fails.
2002-12-15 Pavel Roskin <proski@gnu.org> 2002-12-15 Pavel Roskin <proski@gnu.org>
* view.c (do_view_init): Use non-blocking open() followed by * view.c (do_view_init): Use non-blocking open() followed by

Просмотреть файл

@ -8,8 +8,6 @@ ftp and fish with home != '/' - readjust directory to the home.
Allow modifiers for keys in mc.lib, like "shift-up". Allow modifiers for keys in mc.lib, like "shift-up".
Check and report errors from opendir().
Before 4.6.0 Before 4.6.0
============ ============

Просмотреть файл

@ -457,40 +457,43 @@ handle_path (dir_list *list, char *path,
} }
int int
do_load_dir (dir_list *list, sortfn *sort, int reverse, int case_sensitive, char *filter) do_load_dir (dir_list *list, sortfn *sort, int reverse, int case_sensitive,
char *filter)
{ {
DIR *dirp; DIR *dirp;
struct dirent *dp; struct dirent *dp;
int status, link_to_dir, stale_link; int status, link_to_dir, stale_link;
int next_free = 0; int next_free = 0;
struct stat buf; struct stat buf;
int dotdot_found = 0; int dotdot_found = 0;
tree_store_start_check_cwd (); tree_store_start_check_cwd ();
dirp = mc_opendir ("."); dirp = mc_opendir (".");
if (!dirp){ if (!dirp) {
message (1, MSG_ERROR, _("Cannot read directory contents"));
tree_store_end_check (); tree_store_end_check ();
return set_zero_dir (list); return set_zero_dir (list);
} }
for (dp = mc_readdir (dirp); dp; dp = mc_readdir (dirp)){ for (dp = mc_readdir (dirp); dp; dp = mc_readdir (dirp)) {
status = handle_dirent (list, filter, dp, &buf, next_free, &link_to_dir, status =
&stale_link); handle_dirent (list, filter, dp, &buf, next_free, &link_to_dir,
&stale_link);
if (status == 0) if (status == 0)
continue; continue;
if (status == -1){ if (status == -1) {
tree_store_end_check (); tree_store_end_check ();
mc_closedir (dirp); mc_closedir (dirp);
return next_free; return next_free;
} }
list->list [next_free].fnamelen = NLENGTH (dp); list->list[next_free].fnamelen = NLENGTH (dp);
list->list [next_free].fname = g_strdup (dp->d_name); list->list[next_free].fname = g_strdup (dp->d_name);
list->list [next_free].f.marked = 0; list->list[next_free].f.marked = 0;
list->list [next_free].f.link_to_dir = link_to_dir; list->list[next_free].f.link_to_dir = link_to_dir;
list->list [next_free].f.stale_link = stale_link; list->list[next_free].f.stale_link = stale_link;
list->list [next_free].f.dir_size_computed = 0; list->list[next_free].f.dir_size_computed = 0;
list->list [next_free].buf = buf; list->list[next_free].buf = buf;
if (strcmp (dp->d_name, ".." ) == 0) if (strcmp (dp->d_name, "..") == 0)
dotdot_found = 1; dotdot_found = 1;
next_free++; next_free++;
if (!(next_free % 32)) if (!(next_free % 32))
@ -500,7 +503,7 @@ do_load_dir (dir_list *list, sortfn *sort, int reverse, int case_sensitive, char
if (next_free) { if (next_free) {
if (!dotdot_found) if (!dotdot_found)
add_dotdot_to_list (list, next_free++); add_dotdot_to_list (list, next_free++);
do_sort (list, sort, next_free-1, reverse, case_sensitive); do_sort (list, sort, next_free - 1, reverse, case_sensitive);
} else { } else {
tree_store_end_check (); tree_store_end_check ();
mc_closedir (dirp); mc_closedir (dirp);
@ -576,6 +579,7 @@ do_reload_dir (dir_list * list, sortfn * sort, int count, int rev,
tree_store_start_check_cwd (); tree_store_start_check_cwd ();
dirp = mc_opendir ("."); dirp = mc_opendir (".");
if (!dirp) { if (!dirp) {
message (1, MSG_ERROR, _("Cannot read directory contents"));
clean_dir (list, count); clean_dir (list, count);
tree_store_end_check (); tree_store_end_check ();
return set_zero_dir (list); return set_zero_dir (list);

Просмотреть файл

@ -1926,7 +1926,8 @@ do_enter_on_file_entry (file_entry *fe)
/* Directory or link to directory - change directory */ /* Directory or link to directory - change directory */
if (S_ISDIR (fe->buf.st_mode) || link_isdir (fe)) { if (S_ISDIR (fe->buf.st_mode) || link_isdir (fe)) {
do_cd (fe->fname, cd_exact); if (!do_cd (fe->fname, cd_exact))
message (1, MSG_ERROR, _("Cannot change directory"));
return 1; return 1;
} }