From: Nelson Ferreira Date: Fri, 3 Apr 2020 12:23:53 +0000 (-0400) Subject: Add to directory-files SYMLINK_IS_FILE and BLOOM_FILTER args X-Git-Tag: v22.1.17~7^2~2 X-Git-Url: http://cgit.sxemacs.org/?p=sxemacs;a=commitdiff_plain;h=e794190ea12bf6484c1133d0ba2ef29428bd9c72 Add to directory-files SYMLINK_IS_FILE and BLOOM_FILTER args * src/dired.c(Fdirectory_files): There is no good reason to exclude these options existing in directory-files-recur from directory-files Signed-off-by: Nelson Ferreira --- diff --git a/src/dired.c b/src/dired.c index 9f78b0e..70df19f 100644 --- a/src/dired.c +++ b/src/dired.c @@ -607,9 +607,9 @@ call9(Lisp_Object fn, EXFUN(Fdirectory_files_recur, 8); -DEFUN("directory-files", Fdirectory_files, 1, 5, 0, /* +DEFUN("directory-files", Fdirectory_files, 1, 7, 0, /* Return a list of names of files in DIRECTORY. -Args are DIRECTORY &optional FULL MATCH RESULT-TYPE FILES_ONLY. +Args are DIRECTORY &optional FULL MATCH RESULT-TYPE FILES_ONLY SYMLINK_IS_FILE BLOOM_FILTER There are four optional arguments: If FULL is non-nil, absolute pathnames of the files are returned. @@ -641,22 +641,37 @@ Optional argument FILES-ONLY can be one of: subdirectories) in DIRECTORY - subdir to return only subdirectories -- but *NOT* symlinks to directories -- in DIRECTORY + +Optional argument SYMLINK-IS-FILE specifies whether symlinks +should be resolved \(which is the default behaviour\) or whether +they are treated as ordinary files \(non-nil\), in the latter +case symlinks to directories are not recurred. + +Optional argument BLOOM-FILTER specifies a bloom filter where +to put results in addition to the ordinary result list. */ - (directory, full, match, result_type, files_only)) + (directory, full, match, result_type, files_only, + symlink_is_file, bloom_filter)) { - Lisp_Object handler; + Lisp_Object handler = Qnil; Lisp_Object result = Qnil; - struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6; +#if !defined HAVE_BDWGC || !defined EF_USE_BDWGC + /* just a convenience array for gc pro'ing */ + Lisp_Object args[8] = { + directory, match, result_type, files_only, + symlink_is_file, bloom_filter, handler, result}; +#endif /* !BDWGC */ struct dfr_options_s opts = { .maxdepth = 0, .fullp = !NILP(full), - .symlink_file_p = 0, + .symlink_file_p = !NILP(symlink_is_file), }; + struct gcpro gcpro1; /* argument checks */ CHECK_STRING(directory); - GCPRO6(directory, full, match, result_type, files_only, result); + GCPROn(args, countof(args)); directory = directory_files_canonicalise_dn(directory); @@ -665,12 +680,13 @@ Optional argument FILES-ONLY can be one of: handler = Ffind_file_name_handler(directory, Qdirectory_files); if (!NILP(handler)) { UNGCPRO; - return call6(handler, Qdirectory_files, - directory, full, match, result_type, files_only); + return call8(handler, Qdirectory_files, + directory, full, match, result_type, files_only, + symlink_is_file, bloom_filter); } result = directory_files_magic(directory, match, - files_only, /* bloom filter */Qnil, + files_only, bloom_filter, &opts); UNGCPRO;