Mercurial > hg > xemacs-beta
changeset 5211:cdca98f2d36f
Move `default-file-system-ignore-case' to C; fix bug in directory hash tables
src/ChangeLog addition:
2010-05-16 Aidan Kehoe <kehoea@parhasard.net>
Move `default-file-system-ignore-case' to C; pay attention to it
in creating the directory hash tables for #'locate-file. Fix a bug
where #'eq was specified when creating directory hash tables in
dired.c.
* config.h.in (DEFAULT_FILE_SYSTEM_IGNORE_CASE): This is 1 on
Darwin.
* dired.c (make_directory_hash_table): If
#'file-system-ignore-case-p gives non-nil for a directory, created
the associated hash table with #'equalp as its test. Never use
#'eq as a directory hash table test.
* fileio.c (vars_of_fileio):
Move `default-file-system-ignore-case' here, so it can be a
constant boolean reflecting a compile-time #define.
* lisp.h: Update the declaration of make_directory_hash_table;
remove the declaration of wasteful_word_to_lisp, which was
#ifdef'd out.
* lread.c (Flocate_file): Take out a debugging statement from
this function.
(locate_file_refresh_hashing): Call make_directory_hash_table with
a Lisp string, not an Ibyte pointer.
(vars_of_lread): If DEFAULT_FILE_SYSTEM_IGNORE_CASE is defined,
use #'equalp as the hash table test for locate-file-hash-table,
not #'equal.
* s/win32-common.h (DEFAULT_FILE_SYSTEM_IGNORE_CASE):
Case should normally be ignored in file names on Win32.
lisp/ChangeLog addition:
2010-05-16 Aidan Kehoe <kehoea@parhasard.net>
* files.el (default-file-system-ignore-case):
Move this to fileio.c, where it's a constant boolean variable
initialised at dump time.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 16 May 2010 12:33:21 +0100 |
parents | 9fa29ec759e3 |
children | 4f98237e23fc |
files | lisp/ChangeLog lisp/files.el src/ChangeLog src/config.h.in src/dired.c src/fileio.c src/lisp.h src/lread.c src/s/win32-common.h |
diffstat | 9 files changed, 73 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Apr 29 16:16:47 2010 +0100 +++ b/lisp/ChangeLog Sun May 16 12:33:21 2010 +0100 @@ -1,3 +1,9 @@ +2010-05-16 Aidan Kehoe <kehoea@parhasard.net> + + * files.el (default-file-system-ignore-case): + Move this to fileio.c, where it's a constant boolean variable + initialised at dump time. + 2010-04-29 Aidan Kehoe <kehoea@parhasard.net> * cmdloop.el (suggest-key-bindings):
--- a/lisp/files.el Thu Apr 29 16:16:47 2010 +0100 +++ b/lisp/files.el Sun May 16 12:33:21 2010 +0100 @@ -4515,17 +4515,8 @@ ;; END SYNC WITH FSF 21.2. -;; XEmacs: -(defvar default-file-system-ignore-case (and - (memq system-type '(windows-nt - cygwin32 - darwin)) - t) - "What `file-system-ignore-case-p' returns by default. -This is in the case that nothing in `file-system-case-alist' matches.") - -;; Question; do any of the Linuxes mount Windows partitions in a fixed -;; place? +;; XEmacs. Question; do any of the Linuxes mount Windows partitions in +;; a fixed place? (defvar file-system-case-alist nil "Alist to decide where file name case is significant.
--- a/src/ChangeLog Thu Apr 29 16:16:47 2010 +0100 +++ b/src/ChangeLog Sun May 16 12:33:21 2010 +0100 @@ -1,3 +1,32 @@ +2010-05-16 Aidan Kehoe <kehoea@parhasard.net> + + Move `default-file-system-ignore-case' to C; pay attention to it + in creating the directory hash tables for #'locate-file. Fix a bug + where #'eq was specified when creating directory hash tables in + dired.c. + + * config.h.in (DEFAULT_FILE_SYSTEM_IGNORE_CASE): This is 1 on + Darwin. + * dired.c (make_directory_hash_table): If + #'file-system-ignore-case-p gives non-nil for a directory, created + the associated hash table with #'equalp as its test. Never use + #'eq as a directory hash table test. + * fileio.c (vars_of_fileio): + Move `default-file-system-ignore-case' here, so it can be a + constant boolean reflecting a compile-time #define. + * lisp.h: Update the declaration of make_directory_hash_table; + remove the declaration of wasteful_word_to_lisp, which was + #ifdef'd out. + * lread.c (Flocate_file): Take out a debugging statement from + this function. + (locate_file_refresh_hashing): Call make_directory_hash_table with + a Lisp string, not an Ibyte pointer. + (vars_of_lread): If DEFAULT_FILE_SYSTEM_IGNORE_CASE is defined, + use #'equalp as the hash table test for locate-file-hash-table, + not #'equal. + * s/win32-common.h (DEFAULT_FILE_SYSTEM_IGNORE_CASE): + Case should normally be ignored in file names on Win32. + 2010-04-29 Aidan Kehoe <kehoea@parhasard.net> * eval.c (Fquote, Ffunction): Error on more than one argument to
--- a/src/config.h.in Thu Apr 29 16:16:47 2010 +0100 +++ b/src/config.h.in Sun May 16 12:33:21 2010 +0100 @@ -339,6 +339,7 @@ /* Darwin; realpath corrects for case: */ #ifdef HAVE_DYLD #define REALPATH_CORRECTS_CASE 1 +#define DEFAULT_FILE_SYSTEM_IGNORE_CASE 1 #endif #undef HAVE_LIBINTL
--- a/src/dired.c Thu Apr 29 16:16:47 2010 +0100 +++ b/src/dired.c Sun May 16 12:33:21 2010 +0100 @@ -46,6 +46,7 @@ Lisp_Object Qfile_name_completion; Lisp_Object Qfile_name_all_completions; Lisp_Object Qfile_attributes; +Lisp_Object Qfile_system_ignore_case_p; static Lisp_Object close_directory_unwind (Lisp_Object unwind_obj) @@ -777,14 +778,21 @@ Lisp_Object -make_directory_hash_table (const Ibyte *path) +make_directory_hash_table (Lisp_Object path) { DIR *d; - if ((d = qxe_opendir (path))) + if ((d = qxe_opendir (XSTRING_DATA (path)))) { + Lisp_Object hash_table_test = Qequal, hash = Qnil; DIRENTRY *dp; - Lisp_Object hash = - make_lisp_hash_table (20, HASH_TABLE_NON_WEAK, Qeq); + + if (!UNBOUNDP (XSYMBOL_FUNCTION (Qfile_system_ignore_case_p)) + && !NILP (call1 (Qfile_system_ignore_case_p, path))) + { + hash_table_test = Qequalp; + } + + hash = make_lisp_hash_table (20, HASH_TABLE_NON_WEAK, hash_table_test); while ((dp = qxe_readdir (d))) { @@ -942,6 +950,7 @@ DEFSYMBOL (Qfile_name_completion); DEFSYMBOL (Qfile_name_all_completions); DEFSYMBOL (Qfile_attributes); + DEFSYMBOL (Qfile_system_ignore_case_p); DEFSUBR (Fdirectory_files); DEFSUBR (Ffile_name_completion);
--- a/src/fileio.c Thu Apr 29 16:16:47 2010 +0100 +++ b/src/fileio.c Sun May 16 12:33:21 2010 +0100 @@ -108,6 +108,8 @@ Lisp_Object Vdirectory_sep_char; +int default_file_system_ignore_case; + #ifdef HAVE_FSYNC /* Nonzero means skip the call to fsync in Fwrite-region. */ int write_region_inhibit_fsync; @@ -4560,6 +4562,16 @@ what the normal separator is. */ ); Vdirectory_sep_char = make_char (DEFAULT_DIRECTORY_SEP); + + DEFVAR_CONST_BOOL ("default-file-system-ignore-case", &default_file_system_ignore_case /* +What `file-system-ignore-case-p' returns by default. +This is in the case that nothing in `file-system-case-alist' matches. +*/ ); +#ifdef DEFAULT_FILE_SYSTEM_IGNORE_CASE + default_file_system_ignore_case = DEFAULT_FILE_SYSTEM_IGNORE_CASE; +#else + default_file_system_ignore_case = 0; +#endif } void
--- a/src/lisp.h Thu Apr 29 16:16:47 2010 +0100 +++ b/src/lisp.h Sun May 16 12:33:21 2010 +0100 @@ -4504,8 +4504,7 @@ extern Lisp_Object Vx_initial_argv_list; /* Defined in dired.c */ -Lisp_Object make_directory_hash_table (const Ibyte *); -Lisp_Object wasteful_word_to_lisp (unsigned int); +Lisp_Object make_directory_hash_table (Lisp_Object); /* Defined in doc.c */ EXFUN (Fsubstitute_command_keys, 1);
--- a/src/lread.c Thu Apr 29 16:16:47 2010 +0100 +++ b/src/lread.c Sun May 16 12:33:21 2010 +0100 @@ -894,9 +894,6 @@ { /* This function can GC */ Lisp_Object tp; - static int locate_file_called; - - ++locate_file_called; CHECK_STRING (filename); @@ -918,8 +915,7 @@ static Lisp_Object locate_file_refresh_hashing (Lisp_Object directory) { - Lisp_Object hash = - make_directory_hash_table (XSTRING_DATA (directory)); + Lisp_Object hash = make_directory_hash_table (directory); if (!NILP (hash)) Fputhash (directory, hash, Vlocate_file_hash_table); @@ -3483,7 +3479,12 @@ Vlocate_file_hash_table = make_lisp_hash_table (200, HASH_TABLE_NON_WEAK, - Qequal); +#ifdef DEFAULT_FILE_SYSTEM_IGNORE_CASE + Qequalp +#else + Qequal +#endif + ); staticpro (&Vlocate_file_hash_table); #ifdef DEBUG_XEMACS symbol_value (XSYMBOL (intern ("Vlocate-file-hash-table")))