void afp_options_parse_cmdline(AFPObj *obj, int ac, char **av) { int c, err = 0; while (EOF != ( c = getopt( ac, av, "dF:vVh" )) ) { switch ( c ) { case 'd': obj->cmdlineflags |= OPTION_DEBUG; break; case 'F': obj->cmdlineconfigfile = strdup(optarg); break; case 'v': /* version */ show_version( ); puts( "" ); show_paths( ); puts( "" ); exit( 0 ); break; case 'V': /* extended version */ show_version_extended( ); puts( "" ); show_paths( ); puts( "" ); exit( 0 ); break; case 'h': /* usage */ show_usage(); exit( 0 ); break; default : err++; } } if ( err || optind != ac ) { show_usage(); exit( 2 ); } return; }
int afp_options_parse(int ac, char **av, struct afp_options *options) { extern char *optarg; extern int optind; char *p; char *tmp; /* Used for error checking the result of strtol */ int c, err = 0; if (gethostname(options->hostname, sizeof(options->hostname )) < 0 ) { perror( "gethostname" ); return 0; } if (NULL != ( p = strchr(options->hostname, '.' )) ) { *p = '\0'; } if (NULL == ( p = strrchr( av[ 0 ], '/' )) ) { p = av[ 0 ]; } else { p++; } while (EOF != ( c = getopt( ac, av, OPTIONS )) ) { switch ( c ) { case 'd' : options->flags |= OPTION_DEBUG; break; case 'n' : options->server = optarg; break; case 'f' : options->defaultvol.name = optarg; break; case 's' : options->systemvol.name = optarg; break; case 'u' : options->flags |= OPTION_USERVOLFIRST; break; case 'c' : options->connections = atoi( optarg ); break; case 'g' : options->guest = optarg; break; case 'P' : options->pidfile = optarg; break; case 'p': options->passwdbits |= PASSWD_NOSAVE; break; case 't': options->passwdbits |= PASSWD_SET; break; case 'D': options->transports &= ~AFPTRANS_DDP; break; case 'S': options->port = optarg; break; case 'T': options->transports &= ~AFPTRANS_TCP; break; case 'L': options->loginmesg = optarg; break; case 'F': options->configfile = optarg; break; case 'U': options->uamlist = optarg; break; case 'v': /* version */ show_version( ); puts( "" ); show_paths( ); puts( "" ); exit( 0 ); break; case 'V': /* extended version */ show_version_extended( ); puts( "" ); show_paths( ); puts( "" ); exit( 0 ); break; case 'h': /* usage */ show_usage( p ); exit( 0 ); break; case 'I': options->flags |= OPTION_CUSTOMICON; break; case 'm': options->umask = strtoul(optarg, &tmp, 8); if ((options->umask > 0777)) { fprintf(stderr, "%s: out of range umask setting provided\n", p); err++; } if (tmp[0] != '\0') { fprintf(stderr, "%s: invalid characters in umask setting provided\n", p); err++; } break; default : err++; } } if ( err || optind != ac ) { show_usage( p ); exit( 2 ); } #ifdef ultrix openlog( p, LOG_PID ); /* ultrix only */ #else set_processname(p); #endif /* ultrix */ return 1; }