home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <errno.h>
- #include <grp.h>
- #include "grinf.h"
- #include <gnu/fileutil.h>
-
- static char *RCSid="$Header: getgrgid.c,v 1.6 92/02/25 13:59:51 dtb Exp $";
-
- int fpr_usage();
- int process_it();
- static char *trim_main_name;
-
- static int report_except = 0;
- static char all_found = 1;
-
- int main ( argc, argv, envp )
- int argc;
- char **argv;
- char **envp;
- {
- char *optstring = "ad:e:Igmnprv" ;
- int optchar;
- extern char *optarg;
- extern int optind;
- extern int opterr;
- struct grinfrq *grinf;
-
- trim_main_name = basename(*argv);
- if ((grinf = grinfrq_set_dflt (NULL)) == NULL)
- exit (ENOMEM);
- opterr = 0;
- while ((optchar = getopt(argc, argv, optstring)) != -1)
- switch (optchar) {
- case 'I':
- fprintf (stderr, "%s %s\n", __FILE__, RCSid);
- grinf_info_fpr (stderr);
- break;
- case 'a':
- grinf->epw = grinf->nam = grinf->mem = grinf->gid = 1;
- break;
- case 'd':
- grinf->dlm = *optarg;
- break;
- case 'e' :
- grinf->mdl = *optarg;
- break;
- case 'g':
- grinf->gid = 1;
- break;
- case 'm':
- grinf->mem = 1;
- break;
- case 'n':
- grinf->nam = 1;
- break;
- case 'p':
- grinf->epw = 1;
- break;
- case 'r':
- report_except = 1;
- break;
- case 'v':
- grinf->vbs = 1;
- break;
- case '?':
- fpr_usage (stderr);
- exit (EINVAL);
- }
- if (optind == argc)
- process_it (getegid(), grinf);
- while (optind < argc) {
- int gid;
- if (sscanf(*(argv+optind), "%d", &gid) != 1) {
- fprintf (stderr, "%s: %s not a valid integer\n",
- trim_main_name, *(argv+optind));
- exit (EINVAL);
- }
- process_it (gid, grinf);
- optind++;
- }
- exit (all_found ? 0 : 1);
- }
-
-
- int process_it( grpgid, grinf)
- int grpgid;
- struct grinfrq *grinf;
- {
- struct group *gp;
- int nout = 0;
-
- if (( gp = (struct group *) getgrgid (grpgid) ) == NULL) {
- all_found = 0;
- if (report_except) {
- fprintf (stderr, "%s: could not find group %d\n",
- trim_main_name, grpgid);
- }
- } else {
- nout = grinf_fpr (stdout, gp, grinf);
- }
- return (nout);
- }
-
-
- int fpr_usage (fp)
- FILE *fp;
- {
- int nout = 0;
- nout += fprintf (stderr,
- "Usage: %s [-%s] [-%s] [-%s] grpname [...]\n",
- trim_main_name,
- "Iagmnprv", "d char", "e char" );
- return (nout);
- }
-
-