X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fdired-msw.c;h=791ed06a91c5c192dc4253eceb6a0068216c422f;hb=8b6b965da075da197b3d654db3405aa6846bd3d8;hp=1b20fc624d8611467b43fed7c2e41e41c9e94b83;hpb=762383636a99307282c2d93d26c35c046ec24da1;p=chise%2Fxemacs-chise.git.1 diff --git a/src/dired-msw.c b/src/dired-msw.c index 1b20fc6..791ed06 100644 --- a/src/dired-msw.c +++ b/src/dired-msw.c @@ -90,7 +90,7 @@ Boston, MA 02111-1307, USA. */ static int mswindows_ls_sort_case_insensitive; -static int mswindows_ls_round_file_size; +static Fixnum mswindows_ls_round_file_size; Lisp_Object Qmswindows_insert_directory; @@ -173,6 +173,7 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, int findex, len; char win32pattern[MAXNAMLEN+3]; HANDLE fh; + int errm; /* * Much of the following code and comments were taken from dired.c. @@ -187,7 +188,7 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, /* PATTERN might be a flawed regular expression. Rather than catching and signalling our own errors, we just call compile_pattern to do the work for us. */ - bufp = compile_pattern (pattern, 0, 0, 0, ERROR_ME); + bufp = compile_pattern (pattern, 0, Qnil, 0, ERROR_ME); } /* Now *bufp is the compiled form of PATTERN; don't call anything which might compile a new regexp until we're done with the loop! */ @@ -208,12 +209,14 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, /* * Here, we use FindFirstFile()/FindNextFile() instead of opendir(), - * stat(), & friends, because stat() is VERY expensive in terms of - * time. Hence, we take the time to write complicated Win32-specific - * code, instead of simple Unix-style stuff. + * xemacs_stat(), & friends, because xemacs_stat() is VERY expensive in + * terms of time. Hence, we take the time to write complicated + * Win32-specific code, instead of simple Unix-style stuff. */ findex = 0; fh = INVALID_HANDLE_VALUE; + errm = SetErrorMode (SEM_FAILCRITICALERRORS + | SEM_NOOPENFILEERRORBOX); while (1) { @@ -226,6 +229,7 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, fh = FindFirstFile(win32pattern, &files[findex]); if (fh == INVALID_HANDLE_VALUE) { + SetErrorMode (errm); report_file_error ("Opening directory", list1(build_string(dirfile))); } @@ -239,6 +243,7 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, break; } FindClose(fh); + SetErrorMode (errm); report_file_error ("Reading directory", list1(build_string(dirfile))); } @@ -277,6 +282,8 @@ mswindows_get_files (char *dirfile, int nowild, Lisp_Object pattern, *nfiles = findex; break; } + + SetErrorMode (errm); return (files); } @@ -428,9 +435,8 @@ switches do not contain `d', so that a full listing is expected. (file, switches, wildcard, full_directory_p)) { Lisp_Object result, handler, wildpat, fns, basename; - char *filename; char *switchstr; - int len, nfiles, i; + int nfiles, i; int hide_system, hide_dot, reverse, display_size; WIN32_FIND_DATA *files, **sorted_files; enum mswindows_sortby sort_by; @@ -495,28 +501,11 @@ switches do not contain `d', so that a full listing is expected. } } - /* - * 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);