getopt.c
资源名称:socks5.zip [点击查看]
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:5k
源码类别:
代理服务器
开发平台:
Unix_Linux
- /* Copyright (c) 1987, 1993 */
- /* The Regents of the University of California. All rights reserved. */
- /* */
- /* Redistribution and use in source and binary forms, with or without */
- /* modification, are permitted provided that the following conditions */
- /* are met: */
- /* 1. Redistributions of source code must retain the above copyright */
- /* notice, this list of conditions and the following disclaimer. */
- /* 2. Redistributions in binary form must reproduce the above copyright */
- /* notice, this list of conditions and the following disclaimer in the */
- /* documentation and/or other materials provided with the distribution. */
- /* 3. All advertising materials mentioning features or use of this software */
- /* must display the following acknowledgement: */
- /* This product includes software developed by the University of */
- /* California, Berkeley and its contributors. */
- /* 4. Neither the name of the University nor the names of its contributors */
- /* may be used to endorse or promote products derived from this software */
- /* without specific prior written permission. */
- /* */
- /* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND */
- /* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE */
- /* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE*/
- /* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE */
- /* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL*/
- /* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS */
- /* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) */
- /* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT*/
- /* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY */
- /* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF */
- /* SUCH DAMAGE. */
- #ifdef SHOW_SCCSIDS
- static char sccsid[] = "@(#)getopt.c 8.1 (Berkeley) 6/4/93";
- #endif
- #include "config.h"
- #ifndef HAVE_GETOPT
- #ifndef __STDC__
- #define const
- #endif
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* Get option letter from argument vector */
- int opterr = 1; /* if error message should be printed */
- int optind = 1; /* index into parent argv vector */
- int optopt; /* character checked for validity */
- int optreset; /* reset getopt */
- char *optarg; /* argument associated with option */
- #define BADCH (int)'?'
- #define BADARG (int)':'
- #define EMSG ""
- int getopt(int nargc, char * const *nargv, const char *ostr) {
- static char *place = EMSG; /* option letter processing */
- register char *oli; /* option letter list index */
- char *p;
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc || *(place = nargv[optind]) != '-') {
- place = EMSG;
- return(EOF);
- }
- if (place[1] && *++place == '-') { /* found "--" */
- ++optind;
- place = EMSG;
- return(EOF);
- }
- } /* option letter okay? */
- if ((optopt = (int)*place++) == (int)':' || !(oli = strchr(ostr, optopt))) {
- /* If the user didn't specify '-' as an option, assume EOF. */
- if (optopt == (int)'-') return(EOF);
- if (!*place) ++optind;
- if (opterr && *ostr != ':') {
- if (!(p = strrchr(*nargv, '/'))) p = *nargv;
- else ++p;
- fprintf(stderr, "%s: illegal option -- %cn", p, optopt);
- }
- return(BADCH);
- }
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place) ++optind;
- } else { /* need an argument */
- if (*place) optarg = place; /* no white space */
- else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- if (!(p = strrchr(*nargv, '/'))) p = *nargv;
- else ++p;
- if (*ostr == ':') return(BADARG);
- if (opterr) fprintf(stderr, "%s: option requires an argument -- %cn", p, optopt);
- return(BADCH);
- } else optarg = nargv[optind]; /* white space */
- place = EMSG;
- ++optind;
- }
- return(optopt); /* dump back option letter */
- }
- #endif