]> code.delx.au - gnu-emacs/commitdiff
Refactor calls to opendir for simplicity
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 30 Jan 2015 03:01:28 +0000 (19:01 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 30 Jan 2015 03:02:01 +0000 (19:02 -0800)
* dired.c (open_directory): Accept Lisp_Object, not char *, for
dirname.  Signal an error if the open fails.  All callers changed.

src/ChangeLog
src/dired.c

index 029ac88a28f035977379382cb259ea78010526fa..67b6fa01b592ce8349c5df22ef3c6c4e32e46b89 100644 (file)
@@ -1,3 +1,9 @@
+2015-01-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       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  <eggert@cs.ucla.edu>
 
        Report readdir failures
index 23a867463f4c265ca527265683d51963e86f8496..7982c1fb8eb62c1ce1fc0edf2bf1da2b3f3a4a62 100644 (file)
@@ -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.  */