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 */