Annotation of embedaddon/rsync/getgroups.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Print out the gids of all groups for the current user. This is like
! 3: * `id -G` on Linux, but it's too hard to find a portable equivalent.
! 4: *
! 5: * Copyright (C) 2002 Martin Pool
! 6: * Copyright (C) 2003-2008 Wayne Davison
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify
! 9: * it under the terms of the GNU General Public License version 3 as
! 10: * published by the Free Software Foundation.
! 11: *
! 12: * This program is distributed in the hope that it will be useful,
! 13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
! 14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! 15: * GNU General Public License for more details.
! 16: *
! 17: * You should have received a copy of the GNU General Public License along
! 18: * with this program; if not, visit the http://fsf.org website.
! 19: */
! 20:
! 21: #include "rsync.h"
! 22:
! 23: int
! 24: main(UNUSED(int argc), UNUSED(char *argv[]))
! 25: {
! 26: int n, i;
! 27: gid_t *list;
! 28: gid_t gid = MY_GID();
! 29: int gid_in_list = 0;
! 30:
! 31: #ifdef HAVE_GETGROUPS
! 32: if ((n = getgroups(0, NULL)) < 0) {
! 33: perror("getgroups");
! 34: return 1;
! 35: }
! 36: #else
! 37: n = 0;
! 38: #endif
! 39:
! 40: list = (gid_t*)malloc(sizeof (gid_t) * (n + 1));
! 41: if (!list) {
! 42: fprintf(stderr, "out of memory!\n");
! 43: exit(1);
! 44: }
! 45:
! 46: #ifdef HAVE_GETGROUPS
! 47: if (n > 0)
! 48: n = getgroups(n, list);
! 49: #endif
! 50:
! 51: for (i = 0; i < n; i++) {
! 52: printf("%lu ", (unsigned long)list[i]);
! 53: if (list[i] == gid)
! 54: gid_in_list = 1;
! 55: }
! 56: /* The default gid might not be in the list on some systems. */
! 57: if (!gid_in_list)
! 58: printf("%lu", (unsigned long)gid);
! 59: printf("\n");
! 60:
! 61: return 0;
! 62: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>