int group_member (gid_t gid) { int i; int found; struct group_info gi; if (! get_group_info (&gi)) return 0; /* Search through the list looking for GID. */ found = 0; for (i = 0; i < gi.n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; }
int group_member (gid_t gid) { #ifndef HAVE_GETGROUPS return ((gid == getgid ()) || (gid == getegid ())); #else int i; int found; struct group_info gi; if (! get_group_info (&gi)) return 0; /* Search through the list looking for GID. */ found = 0; for (i = 0; i < gi.n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; #endif /* HAVE_GETGROUPS */ }
static GdkFilterReturn filter( XEvent *xev, GdkEvent *event, gpointer data) { XkbEvent *xkbev; ENTER; if (xev->type != xkb_event_type) RET(GDK_FILTER_CONTINUE); xkbev = (XkbEvent *) xev; DBG("XkbTypeEvent %d \n", xkbev->any.xkb_type); if (xkbev->any.xkb_type == XkbStateNotify) { DBG("XkbStateNotify: group=%d\n", xkbev->state.group); cur_group = xkbev->state.group; if (cur_group >= ngroups) { ERR("current group is bigger then total group number"); cur_group = 0; } gui_update(); } else if (xkbev->any.xkb_type == XkbNewKeyboardNotify) { DBG("XkbNewKeyboardNotify\n"); free_group_info(); get_group_info(); gui_update(); gui_extra_rebuild(); } RET(GDK_FILTER_REMOVE); }