Mercurial > emacs
changeset 21380:28b9e0d48deb
(Fdirectory_files): GCPRO encoded_directory and list.
Compute needsep only once. Pass correct arg to chars_in_text.
author | Andreas Schwab <schwab@suse.de> |
---|---|
date | Mon, 06 Apr 1998 09:11:05 +0000 |
parents | 1701bf5b9dec |
children | 215a47a9f02b |
files | src/dired.c |
diffstat | 1 files changed, 20 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dired.c Mon Apr 06 09:04:23 1998 +0000 +++ b/src/dired.c Mon Apr 06 09:11:05 1998 +0000 @@ -122,6 +122,8 @@ Lisp_Object encoded_directory; Lisp_Object handler; struct re_pattern_buffer *bufp; + int needsep = 0; + struct gcpro gcpro1, gcpro2; /* If the file name has special constructs in it, call the corresponding file handler. */ @@ -139,18 +141,14 @@ return Ffuncall (6, args); } - { - struct gcpro gcpro1, gcpro2; - - /* Because of file name handlers, these functions might call + /* Because of file name handlers, these functions might call Ffuncall, and cause a GC. */ - GCPRO1 (match); - directory = Fexpand_file_name (directory, Qnil); - UNGCPRO; - GCPRO2 (match, directory); - dirfilename = Fdirectory_file_name (directory); - UNGCPRO; - } + GCPRO1 (match); + directory = Fexpand_file_name (directory, Qnil); + UNGCPRO; + GCPRO2 (match, directory); + dirfilename = Fdirectory_file_name (directory); + UNGCPRO; if (!NILP (match)) { @@ -188,6 +186,15 @@ dirnamelen = XSTRING (encoded_directory)->size; re_match_object = Qt; + /* Decide whether we need to add a directory separator. */ +#ifndef VMS + if (dirnamelen == 0 + || !IS_ANY_SEP (XSTRING (encoded_directory)->data[dirnamelen - 1])) + needsep = 1; +#endif /* VMS */ + + GCPRO2 (encoded_directory, list); + /* Loop reading blocks */ while (1) { @@ -205,16 +212,8 @@ { int afterdirindex = dirnamelen; int total = len + dirnamelen; - int needsep = 0; int nchars; - /* Decide whether we need to add a directory separator. */ -#ifndef VMS - if (dirnamelen == 0 - || !IS_ANY_SEP (XSTRING (encoded_directory)->data[dirnamelen - 1])) - needsep = 1; -#endif /* VMS */ - name = make_uninit_string (total + needsep); bcopy (XSTRING (encoded_directory)->data, XSTRING (name)->data, dirnamelen); @@ -222,7 +221,7 @@ XSTRING (name)->data[afterdirindex++] = DIRECTORY_SEP; bcopy (dp->d_name, XSTRING (name)->data + afterdirindex, len); - nchars = chars_in_text (dp->d_name, + nchars = chars_in_text (XSTRING (name)->data, afterdirindex + len); XSTRING (name)->size = nchars; if (nchars == STRING_BYTES (XSTRING (name))) @@ -236,6 +235,7 @@ } } closedir (d); + UNGCPRO; if (!NILP (nosort)) return list; return Fsort (Fnreverse (list), Qstring_lessp);