summaryrefslogtreecommitdiff
path: root/src/dired.c
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2012-04-16 21:29:58 -0400
committerGlenn Morris <rgm@gnu.org>2012-04-16 21:29:58 -0400
commit316411f0f20d409ec24ee892393f15701b05de1c (patch)
treedb48481dff396a640011c69f51bb9c98ad5034b9 /src/dired.c
parent41f03f4da76827e8611267ee5283a5df8071a617 (diff)
downloademacs-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.c41
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.