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

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.4 ! misho       6:  * Copyright (C) 2003-2020 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: 
1.1.1.4 ! misho      23:  int main(UNUSED(int argc), UNUSED(char *argv[]))
1.1       misho      24: {
                     25:        int n, i;
                     26:        gid_t *list;
                     27:        gid_t gid = MY_GID();
                     28:        int gid_in_list = 0;
                     29: 
                     30: #ifdef HAVE_GETGROUPS
                     31:        if ((n = getgroups(0, NULL)) < 0) {
                     32:                perror("getgroups");
                     33:                return 1;
                     34:        }
                     35: #else
                     36:        n = 0;
                     37: #endif
                     38: 
                     39:        list = (gid_t*)malloc(sizeof (gid_t) * (n + 1));
                     40:        if (!list) {
                     41:                fprintf(stderr, "out of memory!\n");
                     42:                exit(1);
                     43:        }
                     44: 
                     45: #ifdef HAVE_GETGROUPS
                     46:        if (n > 0)
                     47:                n = getgroups(n, list);
                     48: #endif
                     49: 
                     50:        for (i = 0; i < n; i++)  {
                     51:                printf("%lu ", (unsigned long)list[i]);
                     52:                if (list[i] == gid)
                     53:                        gid_in_list = 1;
                     54:        }
                     55:        /* The default gid might not be in the list on some systems. */
                     56:        if (!gid_in_list)
                     57:                printf("%lu", (unsigned long)gid);
                     58:        printf("\n");
                     59: 
                     60:        return 0;
                     61: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>