diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2012-04-16 21:29:58 -0400 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2012-04-16 21:29:58 -0400 |
commit | 316411f0f20d409ec24ee892393f15701b05de1c (patch) | |
tree | db48481dff396a640011c69f51bb9c98ad5034b9 /src/dired.c | |
parent | 41f03f4da76827e8611267ee5283a5df8071a617 (diff) | |
download | emacs-316411f0f20d409ec24ee892393f15701b05de1c.tar.gz |
Add functions to get system user names, group names
Note from committer:
I removed the part that adds grp.h to AC_CHECK_HEADERS and
+#ifdef HAVE_GRP_H
#include <grp.h>
+#endif
to src/dired.c, because the latter has unconditionally included grp.h
since 2003, and uses it eg in stat_gname.
* configure.in (AC_CHECK_FUNCS): Add getpwent, endpwent, getgrent, endgrent.
* src/dired.c (Fsystem_users, Fsystem_groups): New functions.
(syms_of_dired): Add them.
Fixes: debbugs:7900
Diffstat (limited to 'src/dired.c')
-rw-r--r-- | src/dired.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/dired.c b/src/dired.c index 9b0f94a0760..2c634b9ca6f 100644 --- a/src/dired.c +++ b/src/dired.c @@ -1015,6 +1015,45 @@ Comparison is in lexicographic order and case is significant. */) return Fstring_lessp (Fcar (f1), Fcar (f2)); } + +DEFUN ("system-users", Fsystem_users, Ssystem_users, 0, 0, 0, + doc: /* Return a list of user names currently registered in the system. +The value may be nil if not supported on this platform. */) + (void) +{ + Lisp_Object users = Qnil; +#if defined(HAVE_GETPWENT) && defined(HAVE_ENDPWENT) + struct passwd *pw; + + while ((pw = getpwent ())) + users = Fcons (DECODE_SYSTEM (build_string (pw->pw_name)), users); + + endpwent (); +#endif + if (EQ (users, Qnil)) + /* At least current user is always known. */ + users = Fcons (Vuser_real_login_name, Qnil); + return users; +} + +DEFUN ("system-groups", Fsystem_groups, Ssystem_groups, 0, 0, 0, + doc: /* Return a list of user group names currently registered in the system. +The value may be nil if not supported on this platform. */) + (void) +{ + Lisp_Object groups = Qnil; +#if defined(HAVE_GETGRENT) && defined(HAVE_ENDGRENT) + struct group *gr; + int length; + + while ((gr = getgrent ())) + groups = Fcons (DECODE_SYSTEM (build_string (gr->gr_name)), groups); + + endgrent (); +#endif + return groups; +} + void syms_of_dired (void) { @@ -1032,6 +1071,8 @@ syms_of_dired (void) defsubr (&Sfile_name_all_completions); defsubr (&Sfile_attributes); defsubr (&Sfile_attributes_lessp); + defsubr (&Ssystem_users); + defsubr (&Ssystem_groups); DEFVAR_LISP ("completion-ignored-extensions", Vcompletion_ignored_extensions, doc: /* Completion ignores file names ending in any string in this list. |