int findex, len;
char win32pattern[MAXNAMLEN+3];
HANDLE fh;
- int errm;
/*
* Much of the following code and comments were taken from dired.c.
*/
findex = 0;
fh = INVALID_HANDLE_VALUE;
- errm = SetErrorMode (SEM_FAILCRITICALERRORS
- | SEM_NOOPENFILEERRORBOX);
while (1)
{
fh = FindFirstFile(win32pattern, &files[findex]);
if (fh == INVALID_HANDLE_VALUE)
{
- SetErrorMode (errm);
report_file_error ("Opening directory",
list1(build_string(dirfile)));
}
break;
}
FindClose(fh);
- SetErrorMode (errm);
report_file_error ("Reading directory",
list1(build_string(dirfile)));
}
*nfiles = findex;
break;
}
-
- SetErrorMode (errm);
return (files);
}
(file, switches, wildcard, full_directory_p))
{
Lisp_Object result, handler, wildpat, fns, basename;
+ char *filename;
char *switchstr;
- int nfiles, i;
+ int len, nfiles, i;
int hide_system, hide_dot, reverse, display_size;
WIN32_FIND_DATA *files, **sorted_files;
enum mswindows_sortby sort_by;
}
}
+ /*
+ * Sometimes we get ".../foo* /" as FILE (without the space).
+ * While the shell and `ls' don't mind, we certainly do,
+ * because it makes us think there is no wildcard, only a
+ * directory name.
+ */
+ if (!NILP(Fstring_match(build_string("[[?*]"), file, Qnil, Qnil)))
+ {
+ wildcard = Qt;
+ filename = XSTRING_DATA(file);
+ len = strlen(filename);
+ if (len > 0 && (filename[len - 1] == '\\' ||
+ filename[len - 1] == '/'))
+ {
+ filename[len - 1] = '\0';
+ }
+ file = build_string(filename);
+ }
if (!NILP(wildcard))
{
Lisp_Object newfile;
- file = Fdirectory_file_name (file);
basename = Ffile_name_nondirectory(file);
fns = intern("wildcard-to-regexp");
wildpat = call1(fns, basename);