comparison src/dired.c @ 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 71ee43b8a74d
children 94bbd4792049 2aa9cd456ae7
comparison
equal deleted inserted replaced
5208:9fa29ec759e3 5211:cdca98f2d36f
44 Lisp_Object Vcompletion_ignored_extensions; 44 Lisp_Object Vcompletion_ignored_extensions;
45 Lisp_Object Qdirectory_files; 45 Lisp_Object Qdirectory_files;
46 Lisp_Object Qfile_name_completion; 46 Lisp_Object Qfile_name_completion;
47 Lisp_Object Qfile_name_all_completions; 47 Lisp_Object Qfile_name_all_completions;
48 Lisp_Object Qfile_attributes; 48 Lisp_Object Qfile_attributes;
49 Lisp_Object Qfile_system_ignore_case_p;
49 50
50 static Lisp_Object 51 static Lisp_Object
51 close_directory_unwind (Lisp_Object unwind_obj) 52 close_directory_unwind (Lisp_Object unwind_obj)
52 { 53 {
53 DIR *d = (DIR *)get_opaque_ptr (unwind_obj); 54 DIR *d = (DIR *)get_opaque_ptr (unwind_obj);
775 return Fsubseq (bestmatch, Qzero, make_int (bestmatchsize)); 776 return Fsubseq (bestmatch, Qzero, make_int (bestmatchsize));
776 } 777 }
777 778
778 779
779 Lisp_Object 780 Lisp_Object
780 make_directory_hash_table (const Ibyte *path) 781 make_directory_hash_table (Lisp_Object path)
781 { 782 {
782 DIR *d; 783 DIR *d;
783 if ((d = qxe_opendir (path))) 784 if ((d = qxe_opendir (XSTRING_DATA (path))))
784 { 785 {
786 Lisp_Object hash_table_test = Qequal, hash = Qnil;
785 DIRENTRY *dp; 787 DIRENTRY *dp;
786 Lisp_Object hash = 788
787 make_lisp_hash_table (20, HASH_TABLE_NON_WEAK, Qeq); 789 if (!UNBOUNDP (XSYMBOL_FUNCTION (Qfile_system_ignore_case_p))
790 && !NILP (call1 (Qfile_system_ignore_case_p, path)))
791 {
792 hash_table_test = Qequalp;
793 }
794
795 hash = make_lisp_hash_table (20, HASH_TABLE_NON_WEAK, hash_table_test);
788 796
789 while ((dp = qxe_readdir (d))) 797 while ((dp = qxe_readdir (d)))
790 { 798 {
791 Bytecount len = NAMLEN (dp); 799 Bytecount len = NAMLEN (dp);
792 if (DIRENTRY_NONEMPTY (dp)) 800 if (DIRENTRY_NONEMPTY (dp))
940 { 948 {
941 DEFSYMBOL (Qdirectory_files); 949 DEFSYMBOL (Qdirectory_files);
942 DEFSYMBOL (Qfile_name_completion); 950 DEFSYMBOL (Qfile_name_completion);
943 DEFSYMBOL (Qfile_name_all_completions); 951 DEFSYMBOL (Qfile_name_all_completions);
944 DEFSYMBOL (Qfile_attributes); 952 DEFSYMBOL (Qfile_attributes);
953 DEFSYMBOL (Qfile_system_ignore_case_p);
945 954
946 DEFSUBR (Fdirectory_files); 955 DEFSUBR (Fdirectory_files);
947 DEFSUBR (Ffile_name_completion); 956 DEFSUBR (Ffile_name_completion);
948 DEFSUBR (Ffile_name_all_completions); 957 DEFSUBR (Ffile_name_all_completions);
949 DEFSUBR (Fuser_name_completion); 958 DEFSUBR (Fuser_name_completion);