1
1

* utilunix.c (init_groups): Don't return prematurely if the

primary group cannot be found (it can happen on Cygwin).
Этот коммит содержится в:
Pavel Roskin 2001-12-18 20:00:27 +00:00
родитель 9127aabf26
Коммит 5d27f706bd
2 изменённых файлов: 22 добавлений и 21 удалений

Просмотреть файл

@ -1,3 +1,8 @@
2001-12-18 Pavel Roskin <proski@gnu.org>
* utilunix.c (init_groups): Don't return prematurely if the
primary group cannot be found (it can happen on Cygwin).
2001-12-10 Pavel Roskin <proski@gnu.org>
* dir.c (do_reload_dir): Hash-table added.

Просмотреть файл

@ -104,33 +104,29 @@ void init_groups (void)
int i;
struct passwd *pwd;
struct group *grp;
current_user_uid = getuid ();
current_user_uid = getuid ();
pwd = getpwuid (current_user_uid);
g_return_if_fail (pwd != NULL);
grp = getgrgid (pwd->pw_gid);
g_return_if_fail (grp != NULL);
current_user_gid = g_tree_new (mc_gid_compare);
g_tree_insert (current_user_gid,
GUINT_TO_POINTER(grp->gr_gid), g_strdup(grp->gr_name));
/* Put user's primary group first. */
if ((grp = getgrgid (pwd->pw_gid)) != NULL) {
g_tree_insert (current_user_gid,
GUINT_TO_POINTER (grp->gr_gid),
g_strdup (grp->gr_name));
}
setgrent ();
while ((grp = getgrent ()))
{
for (i = 0; grp->gr_mem[i]; i++)
{
if (!strcmp (pwd->pw_name, grp->gr_mem[i]) &&
!g_tree_lookup (current_user_gid, GUINT_TO_POINTER(grp->gr_gid)))
{
g_tree_insert (current_user_gid,
GUINT_TO_POINTER(grp->gr_gid), g_strdup(grp->gr_name));
while ((grp = getgrent ()) != NULL) {
for (i = 0; grp->gr_mem[i]; i++) {
if (!strcmp (pwd->pw_name, grp->gr_mem[i]) &&
!g_tree_lookup (current_user_gid,
GUINT_TO_POINTER (grp->gr_gid))) {
g_tree_insert (current_user_gid,
GUINT_TO_POINTER (grp->gr_gid),
g_strdup (grp->gr_name));
break;
}
}