Mercurial > hg > xemacs-beta
comparison src/dired.c @ 5386:af961911bcb2
Make listu() and listn() assemble lists in forward order. Use them.
See xemacs-patches message with ID
<AANLkTi=Tnd_e8WqiGBE2DmNGmY7zhqxhVNtxECnQo8w9@mail.gmail.com>
author | Jerry James <james@xemacs.org> |
---|---|
date | Tue, 29 Mar 2011 15:59:56 -0600 |
parents | 94bbd4792049 |
children | f560f6608937 |
comparison
equal
deleted
inserted
replaced
5385:436e67ca8c79 | 5386:af961911bcb2 |
---|---|
843 If file does not exist, returns nil. | 843 If file does not exist, returns nil. |
844 */ | 844 */ |
845 (filename)) | 845 (filename)) |
846 { | 846 { |
847 /* This function can GC. GC checked 1997.06.04. */ | 847 /* This function can GC. GC checked 1997.06.04. */ |
848 Lisp_Object values[12]; | |
849 Lisp_Object directory = Qnil; | 848 Lisp_Object directory = Qnil; |
850 struct stat s; | 849 struct stat s; |
851 char modes[10]; | 850 char modes[10]; |
852 Lisp_Object handler; | 851 Lisp_Object handler, mode, modestring = Qnil, size, gid; |
853 struct gcpro gcpro1, gcpro2; | 852 struct gcpro gcpro1, gcpro2, gcpro3; |
854 | 853 |
855 GCPRO2 (filename, directory); | 854 GCPRO3 (filename, directory, modestring); |
856 filename = Fexpand_file_name (filename, Qnil); | 855 filename = Fexpand_file_name (filename, Qnil); |
857 | 856 |
858 /* If the file name has special constructs in it, | 857 /* If the file name has special constructs in it, |
859 call the corresponding file handler. */ | 858 call the corresponding file handler. */ |
860 handler = Ffind_file_name_handler (filename, Qfile_attributes); | 859 handler = Ffind_file_name_handler (filename, Qfile_attributes); |
891 #endif | 890 #endif |
892 | 891 |
893 switch (s.st_mode & S_IFMT) | 892 switch (s.st_mode & S_IFMT) |
894 { | 893 { |
895 default: | 894 default: |
896 values[0] = Qnil; | 895 mode = Qnil; |
897 break; | 896 break; |
898 case S_IFDIR: | 897 case S_IFDIR: |
899 values[0] = Qt; | 898 mode = Qt; |
900 break; | 899 break; |
901 #ifdef S_IFLNK | 900 #ifdef S_IFLNK |
902 case S_IFLNK: | 901 case S_IFLNK: |
903 values[0] = Ffile_symlink_p (filename); | 902 mode = Ffile_symlink_p (filename); |
904 break; | 903 break; |
905 #endif | 904 #endif |
906 } | 905 } |
907 values[1] = make_int (s.st_nlink); | |
908 values[2] = make_int (s.st_uid); | |
909 values[3] = make_int (s.st_gid); | |
910 values[4] = make_time (s.st_atime); | |
911 values[5] = make_time (s.st_mtime); | |
912 values[6] = make_time (s.st_ctime); | |
913 | 906 |
914 #ifndef HAVE_BIGNUM | 907 #ifndef HAVE_BIGNUM |
915 values[7] = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ? | 908 size = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ? |
916 (EMACS_INT)s.st_size : -1); | 909 (EMACS_INT)s.st_size : -1); |
917 #else | 910 #else |
918 values[7] = make_integer (s.st_size); | 911 size = make_integer (s.st_size); |
919 #endif | 912 #endif |
920 | 913 |
921 filemodestring (&s, modes); | 914 filemodestring (&s, modes); |
922 values[8] = make_string ((Ibyte *) modes, 10); | 915 modestring = make_string ((Ibyte *) modes, 10), |
916 | |
923 #if defined (BSD4_2) || defined (BSD4_3) /* file gid will be dir gid */ | 917 #if defined (BSD4_2) || defined (BSD4_3) /* file gid will be dir gid */ |
924 { | 918 { |
925 struct stat sdir; | 919 struct stat sdir; |
926 | 920 |
927 if (!NILP (directory) && qxe_stat (XSTRING_DATA (directory), &sdir) == 0) | 921 if (!NILP (directory) && qxe_stat (XSTRING_DATA (directory), &sdir) == 0) |
928 values[9] = (sdir.st_gid != s.st_gid) ? Qt : Qnil; | 922 gid = (sdir.st_gid != s.st_gid) ? Qt : Qnil; |
929 else /* if we can't tell, assume worst */ | 923 else /* if we can't tell, assume worst */ |
930 values[9] = Qt; | 924 gid = Qt; |
931 } | 925 } |
932 #else /* file gid will be egid */ | 926 #else /* file gid will be egid */ |
933 values[9] = (s.st_gid != getegid ()) ? Qt : Qnil; | 927 gid = (s.st_gid != getegid ()) ? Qt : Qnil; |
934 #endif /* BSD4_2 or BSD4_3 */ | 928 #endif /* BSD4_2 or BSD4_3 */ |
935 values[10] = make_int (s.st_ino); | 929 |
936 values[11] = make_int (s.st_dev); | 930 RETURN_UNGCPRO (listn (12, |
937 UNGCPRO; | 931 mode, |
938 return Flist (countof (values), values); | 932 make_int (s.st_nlink), |
933 make_int (s.st_uid), | |
934 make_int (s.st_gid), | |
935 make_time (s.st_atime), | |
936 make_time (s.st_mtime), | |
937 make_time (s.st_ctime), | |
938 size, | |
939 modestring, | |
940 gid, | |
941 make_int (s.st_ino), | |
942 make_int (s.st_dev))); | |
939 } | 943 } |
940 | 944 |
941 | 945 |
942 /************************************************************************/ | 946 /************************************************************************/ |
943 /* initialization */ | 947 /* initialization */ |