From 34d0859c4b092b6a1daed3c674f1f4e3f05d5189 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 29 Jan 2015 19:01:28 -0800 Subject: [PATCH] Refactor calls to opendir for simplicity * dired.c (open_directory): Accept Lisp_Object, not char *, for dirname. Signal an error if the open fails. All callers changed. --- src/ChangeLog | 6 ++++++ src/dired.c | 23 ++++++++--------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 029ac88a28f..67b6fa01b59 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-01-30 Paul Eggert + + Refactor calls to opendir for simplicity + * dired.c (open_directory): Accept Lisp_Object, not char *, for + dirname. Signal an error if the open fails. All callers changed. + 2015-01-29 Paul Eggert Report readdir failures diff --git a/src/dired.c b/src/dired.c index 23a867463f4..7982c1fb8eb 100644 --- a/src/dired.c +++ b/src/dired.c @@ -66,8 +66,9 @@ dirent_namelen (struct dirent *dp) } static DIR * -open_directory (char const *name, int *fdp) +open_directory (Lisp_Object dirname, int *fdp) { + char *name = SSDATA (dirname); DIR *d; int fd, opendir_errno; @@ -98,8 +99,9 @@ open_directory (char const *name, int *fdp) unblock_input (); + if (!d) + report_file_errno ("Opening directory", dirname, opendir_errno); *fdp = fd; - errno = opendir_errno; return d; } @@ -149,8 +151,6 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, Lisp_Object match, Lisp_Object nosort, bool attrs, Lisp_Object id_format) { - DIR *d; - int fd; ptrdiff_t directory_nbytes; Lisp_Object list, dirfilename, encoded_directory; struct re_pattern_buffer *bufp = NULL; @@ -200,9 +200,8 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full, /* Now *bufp is the compiled form of MATCH; don't call anything which might compile a new regexp until we're done with the loop! */ - d = open_directory (SSDATA (dirfilename), &fd); - if (d == NULL) - report_file_error ("Opening directory", directory); + int fd; + DIR *d = open_directory (dirfilename, &fd); /* Unfortunately, we can now invoke expand-file-name and file-attributes on filenames, both of which can throw, so we must @@ -448,8 +447,6 @@ static Lisp_Object file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, Lisp_Object predicate) { - DIR *d; - int fd; ptrdiff_t bestmatchsize = 0; int matchcount = 0; /* If ALL_FLAG is 1, BESTMATCH is the list of all matches, decoded. @@ -483,13 +480,9 @@ file_name_completion (Lisp_Object file, Lisp_Object dirname, bool all_flag, work with decoded file names, but we still do some filtering based on the encoded file name. */ encoded_file = ENCODE_FILE (file); - encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname)); - - d = open_directory (SSDATA (encoded_dir), &fd); - if (!d) - report_file_error ("Opening directory", dirname); - + int fd; + DIR *d = open_directory (encoded_dir, &fd); record_unwind_protect_ptr (directory_files_internal_unwind, d); /* Loop reading directory entries. */ -- 2.39.2