Annotation of embedaddon/rsync/getgroups.c, revision 1.1.1.3

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
1.1.1.3 ! misho       6:  * Copyright (C) 2003-2015 Wayne Davison
1.1       misho       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>