File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / getgroups.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Mon Oct 14 07:51:14 2013 UTC (10 years, 8 months ago) by misho
Branches: rsync, MAIN
CVS tags: RSYNC3_1_0, HEAD
v 3.1.0

    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-2013 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>