emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/dired.c


From: Lars Hansen
Subject: [Emacs-diffs] Changes to emacs/src/dired.c
Date: Fri, 21 Nov 2003 13:27:52 -0500

Index: emacs/src/dired.c
diff -c emacs/src/dired.c:1.105 emacs/src/dired.c:1.106
*** emacs/src/dired.c:1.105     Mon Sep  1 11:45:52 2003
--- emacs/src/dired.c   Fri Nov 21 13:27:51 2003
***************
*** 26,31 ****
--- 26,38 ----
  #include <sys/types.h>
  #include <sys/stat.h>
  
+ #ifdef VMS
+ #include "vms-pwd.h"
+ #else
+ #include <pwd.h>
+ #include <grp.h>
+ #endif
+ 
  #include "systime.h"
  #include <errno.h>
  
***************
*** 132,143 ****
  
  /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
     When ATTRS is zero, return a list of directory filenames; when
!    non-zero, return a list of directory filenames and their attributes.  */
  
  Lisp_Object
! directory_files_internal (directory, full, match, nosort, attrs)
       Lisp_Object directory, full, match, nosort;
       int attrs;
  {
    DIR *d;
    int directory_nbytes;
--- 139,152 ----
  
  /* Function shared by Fdirectory_files and Fdirectory_files_and_attributes.
     When ATTRS is zero, return a list of directory filenames; when
!    non-zero, return a list of directory filenames and their attributes.
!    In the latter case, ID_FORMAT is passed to Ffile_attributes.  */
  
  Lisp_Object
! directory_files_internal (directory, full, match, nosort, attrs, id_format)
       Lisp_Object directory, full, match, nosort;
       int attrs;
+      Lisp_Object id_format;
  {
    DIR *d;
    int directory_nbytes;
***************
*** 295,301 ****
  
                  /* Both Fexpand_file_name and Ffile_attributes can GC.  */
                  decoded_fullname = Fexpand_file_name (name, directory);
!                 fileattrs = Ffile_attributes (decoded_fullname);
  
                  list = Fcons (Fcons (finalname, fileattrs), list);
                  UNGCPRO;
--- 304,310 ----
  
                  /* Both Fexpand_file_name and Ffile_attributes can GC.  */
                  decoded_fullname = Fexpand_file_name (name, directory);
!                 fileattrs = Ffile_attributes (decoded_fullname, id_format);
  
                  list = Fcons (Fcons (finalname, fileattrs), list);
                  UNGCPRO;
***************
*** 362,381 ****
        return Ffuncall (6, args);
      }
  
!   return directory_files_internal (directory, full, match, nosort, 0);
  }
  
  DEFUN ("directory-files-and-attributes", Fdirectory_files_and_attributes,
!        Sdirectory_files_and_attributes, 1, 4, 0,
         doc: /* Return a list of names of files and their attributes in 
DIRECTORY.
! There are three optional arguments:
  If FULL is non-nil, return absolute file names.  Otherwise return names
   that are relative to the specified directory.
  If MATCH is non-nil, mention only file names that match the regexp MATCH.
  If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
!  NOSORT is useful if you plan to sort the result yourself.  */)
!      (directory, full, match, nosort)
!      Lisp_Object directory, full, match, nosort;
  {
    Lisp_Object handler;
    directory = Fexpand_file_name (directory, Qnil);
--- 371,392 ----
        return Ffuncall (6, args);
      }
  
!   return directory_files_internal (directory, full, match, nosort, 0, Qnil);
  }
  
  DEFUN ("directory-files-and-attributes", Fdirectory_files_and_attributes,
!        Sdirectory_files_and_attributes, 1, 5, 0,
         doc: /* Return a list of names of files and their attributes in 
DIRECTORY.
! There are four optional arguments:
  If FULL is non-nil, return absolute file names.  Otherwise return names
   that are relative to the specified directory.
  If MATCH is non-nil, mention only file names that match the regexp MATCH.
  If NOSORT is non-nil, the list is not sorted--its order is unpredictable.
!  NOSORT is useful if you plan to sort the result yourself.
! ID-FORMAT specifies the preferred format of attributes uid and gid, see
! `file-attributes' for further documentation. */)
!      (directory, full, match, nosort, id_format)
!      Lisp_Object directory, full, match, nosort, id_format;
  {
    Lisp_Object handler;
    directory = Fexpand_file_name (directory, Qnil);
***************
*** 385,391 ****
    handler = Ffind_file_name_handler (directory, 
Qdirectory_files_and_attributes);
    if (!NILP (handler))
      {
!       Lisp_Object args[6];
  
        args[0] = handler;
        args[1] = Qdirectory_files_and_attributes;
--- 396,402 ----
    handler = Ffind_file_name_handler (directory, 
Qdirectory_files_and_attributes);
    if (!NILP (handler))
      {
!       Lisp_Object args[7];
  
        args[0] = handler;
        args[1] = Qdirectory_files_and_attributes;
***************
*** 393,402 ****
        args[3] = full;
        args[4] = match;
        args[5] = nosort;
!       return Ffuncall (6, args);
      }
  
!   return directory_files_internal (directory, full, match, nosort, 1);
  }
  
  
--- 404,414 ----
        args[3] = full;
        args[4] = match;
        args[5] = nosort;
!       args[6] = id_format;
!       return Ffuncall (7, args);
      }
  
!   return directory_files_internal (directory, full, match, nosort, 1, 
id_format);
  }
  
  
***************
*** 872,885 ****
                Fcons (make_number (time & 0177777), Qnil));
  }
  
! DEFUN ("file-attributes", Ffile_attributes, Sfile_attributes, 1, 1, 0,
         doc: /* Return a list of attributes of file FILENAME.
  Value is nil if specified file cannot be opened.
! Otherwise, list elements are:
   0. t for directory, string (name linked to) for symbolic link, or nil.
   1. Number of links to file.
!  2. File uid.
!  3. File gid.
   4. Last access time, as a list of two integers.
    First integer has high-order 16 bits of time, second has low 16 bits.
   5. Last modification time, likewise.
--- 884,904 ----
                Fcons (make_number (time & 0177777), Qnil));
  }
  
! DEFUN ("file-attributes", Ffile_attributes, Sfile_attributes, 1, 2, 0,
         doc: /* Return a list of attributes of file FILENAME.
  Value is nil if specified file cannot be opened.
! 
! ID-FORMAT specifies the preferred format of attributes uid and gid (see
! below) - valid values are 'string and 'integer. The latter is the default,
! but we plan to change that, so you should specify a non-nil value for
! ID-FORMAT if you use the returned uid or gid.
! 
! Elements of the attribute list are:
   0. t for directory, string (name linked to) for symbolic link, or nil.
   1. Number of links to file.
!  2. File uid as a string or an integer.  If a string value cannot be
!   looked up, the integer value is returned.
!  3. File gid, likewise.
   4. Last access time, as a list of two integers.
    First integer has high-order 16 bits of time, second has low 16 bits.
   5. Last modification time, likewise.
***************
*** 892,906 ****
    this is a cons cell containing two integers: first the high part,
    then the low 16 bits.
  11. Device number.  If it is larger than the Emacs integer, this is
!   a cons cell, similar to the inode number.
! 
! If file does not exist, returns nil.  */)
!      (filename)
!      Lisp_Object filename;
  {
    Lisp_Object values[12];
    Lisp_Object encoded;
    struct stat s;
  #if defined (BSD4_2) || defined (BSD4_3)
    Lisp_Object dirname;
    struct stat sdir;
--- 911,925 ----
    this is a cons cell containing two integers: first the high part,
    then the low 16 bits.
  11. Device number.  If it is larger than the Emacs integer, this is
!   a cons cell, similar to the inode number.  */)
!      (filename, id_format)
!      Lisp_Object filename, id_format;
  {
    Lisp_Object values[12];
    Lisp_Object encoded;
    struct stat s;
+   struct passwd *pw;
+   struct group *gr;
  #if defined (BSD4_2) || defined (BSD4_3)
    Lisp_Object dirname;
    struct stat sdir;
***************
*** 914,920 ****
       call the corresponding file handler.  */
    handler = Ffind_file_name_handler (filename, Qfile_attributes);
    if (!NILP (handler))
!     return call2 (handler, Qfile_attributes, filename);
  
    encoded = ENCODE_FILE (filename);
  
--- 933,939 ----
       call the corresponding file handler.  */
    handler = Ffind_file_name_handler (filename, Qfile_attributes);
    if (!NILP (handler))
!     return call3 (handler, Qfile_attributes, filename, id_format);
  
    encoded = ENCODE_FILE (filename);
  
***************
*** 933,940 ****
  #endif
      }
    values[1] = make_number (s.st_nlink);
!   values[2] = make_number (s.st_uid);
!   values[3] = make_number (s.st_gid);
    values[4] = make_time (s.st_atime);
    values[5] = make_time (s.st_mtime);
    values[6] = make_time (s.st_ctime);
--- 952,969 ----
  #endif
      }
    values[1] = make_number (s.st_nlink);
!   if (NILP (id_format) || EQ (id_format, Qinteger))
!     {
!       values[2] = make_number (s.st_uid);
!       values[3] = make_number (s.st_gid);
!     }
!   else
!     {
!       pw = (struct passwd *) getpwuid (s.st_uid);
!       values[2] = (pw ? build_string (pw->pw_name) : s.st_uid);
!       gr = (struct group *) getgrgid (s.st_gid);
!       values[3] = (gr ? build_string (gr->gr_name) : s.st_gid);
!     }
    values[4] = make_time (s.st_atime);
    values[5] = make_time (s.st_mtime);
    values[6] = make_time (s.st_ctime);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]