mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-20 04:50:55 -07:00
(directory_files_internal): Handle EAGAIN more
efficiently.
This commit is contained in:
parent
129004d3cb
commit
f69f9da11e
1 changed files with 13 additions and 5 deletions
18
src/dired.c
18
src/dired.c
|
|
@ -133,6 +133,7 @@ directory_files_internal_unwind (dh)
|
|||
/* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
|
||||
When ATTRS is zero, return a list of directory filenames; when
|
||||
non-zero, return a list of directory filenames and their attributes. */
|
||||
|
||||
Lisp_Object
|
||||
directory_files_internal (directory, full, match, nosort, attrs)
|
||||
Lisp_Object directory, full, match, nosort;
|
||||
|
|
@ -209,9 +210,19 @@ directory_files_internal (directory, full, match, nosort, attrs)
|
|||
#endif /* not VMS */
|
||||
|
||||
/* Loop reading blocks until EOF or error. */
|
||||
errno = 0;
|
||||
while ((dp = readdir (d)) != NULL)
|
||||
for (;;)
|
||||
{
|
||||
errno = 0;
|
||||
dp = readdir (d);
|
||||
|
||||
#ifdef EAGAIN
|
||||
if (dp == NULL && errno == EAGAIN)
|
||||
continue;
|
||||
#endif
|
||||
|
||||
if (dp == NULL)
|
||||
break;
|
||||
|
||||
if (DIRENTRY_NONEMPTY (dp))
|
||||
{
|
||||
int len;
|
||||
|
|
@ -299,9 +310,6 @@ directory_files_internal (directory, full, match, nosort, attrs)
|
|||
}
|
||||
|
||||
retry_p = 0;
|
||||
#ifdef EAGAIN
|
||||
retry_p |= errno == EAGAIN;
|
||||
#endif
|
||||
#ifdef EINTR
|
||||
retry_p |= errno == EINTR;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue