[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/src/dired.c,
Lars Hansen <=