Mercurial > hg > xemacs-beta
comparison src/dired.c @ 5475:248176c74e6b
Merge with trunk.
author | Mats Lidell <matsl@xemacs.org> |
---|---|
date | Sat, 23 Apr 2011 23:47:13 +0200 |
parents | 0af042a0c116 f560f6608937 |
children | 1f0b15040456 |
comparison
equal
deleted
inserted
replaced
5474:4dee0387b9de | 5475:248176c74e6b |
---|---|
841 If file does not exist, returns nil. | 841 If file does not exist, returns nil. |
842 */ | 842 */ |
843 (filename)) | 843 (filename)) |
844 { | 844 { |
845 /* This function can GC. GC checked 1997.06.04. */ | 845 /* This function can GC. GC checked 1997.06.04. */ |
846 Lisp_Object values[12]; | |
847 Lisp_Object directory = Qnil; | 846 Lisp_Object directory = Qnil; |
848 struct stat s; | 847 struct stat s; |
849 char modes[10]; | 848 char modes[10]; |
850 Lisp_Object handler; | 849 Lisp_Object handler, mode, modestring = Qnil, size, gid; |
851 struct gcpro gcpro1, gcpro2; | 850 struct gcpro gcpro1, gcpro2, gcpro3; |
852 | 851 |
853 GCPRO2 (filename, directory); | 852 GCPRO3 (filename, directory, modestring); |
854 filename = Fexpand_file_name (filename, Qnil); | 853 filename = Fexpand_file_name (filename, Qnil); |
855 | 854 |
856 /* If the file name has special constructs in it, | 855 /* If the file name has special constructs in it, |
857 call the corresponding file handler. */ | 856 call the corresponding file handler. */ |
858 handler = Ffind_file_name_handler (filename, Qfile_attributes); | 857 handler = Ffind_file_name_handler (filename, Qfile_attributes); |
889 #endif | 888 #endif |
890 | 889 |
891 switch (s.st_mode & S_IFMT) | 890 switch (s.st_mode & S_IFMT) |
892 { | 891 { |
893 default: | 892 default: |
894 values[0] = Qnil; | 893 mode = Qnil; |
895 break; | 894 break; |
896 case S_IFDIR: | 895 case S_IFDIR: |
897 values[0] = Qt; | 896 mode = Qt; |
898 break; | 897 break; |
899 #ifdef S_IFLNK | 898 #ifdef S_IFLNK |
900 case S_IFLNK: | 899 case S_IFLNK: |
901 values[0] = Ffile_symlink_p (filename); | 900 mode = Ffile_symlink_p (filename); |
902 break; | 901 break; |
903 #endif | 902 #endif |
904 } | 903 } |
905 values[1] = make_int (s.st_nlink); | |
906 values[2] = make_int (s.st_uid); | |
907 values[3] = make_int (s.st_gid); | |
908 values[4] = make_time (s.st_atime); | |
909 values[5] = make_time (s.st_mtime); | |
910 values[6] = make_time (s.st_ctime); | |
911 | 904 |
912 #ifndef HAVE_BIGNUM | 905 #ifndef HAVE_BIGNUM |
913 values[7] = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ? | 906 size = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ? |
914 (EMACS_INT)s.st_size : -1); | 907 (EMACS_INT)s.st_size : -1); |
915 #else | 908 #else |
916 values[7] = make_integer (s.st_size); | 909 size = make_integer (s.st_size); |
917 #endif | 910 #endif |
918 | 911 |
919 filemodestring (&s, modes); | 912 filemodestring (&s, modes); |
920 values[8] = make_string ((Ibyte *) modes, 10); | 913 modestring = make_string ((Ibyte *) modes, 10); |
914 | |
921 #if defined (BSD4_2) || defined (BSD4_3) /* file gid will be dir gid */ | 915 #if defined (BSD4_2) || defined (BSD4_3) /* file gid will be dir gid */ |
922 { | 916 { |
923 struct stat sdir; | 917 struct stat sdir; |
924 | 918 |
925 if (!NILP (directory) && qxe_stat (XSTRING_DATA (directory), &sdir) == 0) | 919 if (!NILP (directory) && qxe_stat (XSTRING_DATA (directory), &sdir) == 0) |
926 values[9] = (sdir.st_gid != s.st_gid) ? Qt : Qnil; | 920 gid = (sdir.st_gid != s.st_gid) ? Qt : Qnil; |
927 else /* if we can't tell, assume worst */ | 921 else /* if we can't tell, assume worst */ |
928 values[9] = Qt; | 922 gid = Qt; |
929 } | 923 } |
930 #else /* file gid will be egid */ | 924 #else /* file gid will be egid */ |
931 values[9] = (s.st_gid != getegid ()) ? Qt : Qnil; | 925 gid = (s.st_gid != getegid ()) ? Qt : Qnil; |
932 #endif /* BSD4_2 or BSD4_3 */ | 926 #endif /* BSD4_2 or BSD4_3 */ |
933 values[10] = make_int (s.st_ino); | 927 |
934 values[11] = make_int (s.st_dev); | 928 RETURN_UNGCPRO (listn (12, |
935 UNGCPRO; | 929 mode, |
936 return Flist (countof (values), values); | 930 make_int (s.st_nlink), |
931 make_int (s.st_uid), | |
932 make_int (s.st_gid), | |
933 make_time (s.st_atime), | |
934 make_time (s.st_mtime), | |
935 make_time (s.st_ctime), | |
936 size, | |
937 modestring, | |
938 gid, | |
939 make_int (s.st_ino), | |
940 make_int (s.st_dev))); | |
937 } | 941 } |
938 | 942 |
939 | 943 |
940 /************************************************************************/ | 944 /************************************************************************/ |
941 /* initialization */ | 945 /* initialization */ |