Edit

kc3-lang/libevent/WIN32-Code/getopt.c

Branch :

  • Show log

    Commit

  • Author : Joakim Soderberg
    Date : 2013-12-09 18:05:32
    Hash : e415196a
    Message : Initial CMake commit.

  • WIN32-Code/getopt.c
  • /*	$NetBSD: getopt.c,v 1.16 1999/12/02 13:15:56 kleink Exp $	*/
    
    /*
     * Copyright (c) 1987, 1993, 1994
     *	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.
     */
    
    #if 0
    static char sccsid[] = "@(#)getopt.c	8.3 (Berkeley) 4/27/95";
    #endif
    
    #include <assert.h>
    #include <errno.h>
    #include <stdio.h>
    #include <string.h>
    
    #define __P(x) x
    #define _DIAGASSERT(x) assert(x)
    
    #ifdef __weak_alias
    __weak_alias(getopt,_getopt);
    #endif
    
    
    int	opterr = 1,		/* if error message should be printed */
    	optind = 1,		/* index into parent argv vector */
    	optopt,			/* character checked for validity */
    	optreset;		/* reset getopt */
    char	*optarg;		/* argument associated with option */
    
    static char * _progname __P((char *));
    int getopt_internal __P((int, char * const *, const char *));
    
    static char *
    _progname(nargv0)
    	char * nargv0;
    {
    	char * tmp;
    
    	_DIAGASSERT(nargv0 != NULL);
    
    	tmp = strrchr(nargv0, '/');
    	if (tmp)
    		tmp++;
    	else
    		tmp = nargv0;
    	return(tmp);
    }
    
    #define	BADCH	(int)'?'
    #define	BADARG	(int)':'
    #define	EMSG	""
    
    /*
     * getopt --
     *	Parse argc/argv argument vector.
     */
    int
    getopt(nargc, nargv, ostr)
    	int nargc;
    	char * const nargv[];
    	const char *ostr;
    {
    	static char *__progname = 0;
    	static char *place = EMSG;		/* option letter processing */
    	char *oli;				/* option letter list index */
            __progname = __progname?__progname:_progname(*nargv);
    
    	_DIAGASSERT(nargv != NULL);
    	_DIAGASSERT(ostr != NULL);
    
    	if (optreset || !*place) {		/* update scanning pointer */
    		optreset = 0;
    		if (optind >= nargc || *(place = nargv[optind]) != '-') {
    			place = EMSG;
    			return (-1);
    		}
    		if (place[1] && *++place == '-'	/* found "--" */
    		    && place[1] == '\0') {
    			++optind;
    			place = EMSG;
    			return (-1);
    		}
    	}					/* option letter okay? */
    	if ((optopt = (int)*place++) == (int)':' ||
    	    !(oli = strchr(ostr, optopt))) {
    		/*
    		 * if the user didn't specify '-' as an option,
    		 * assume it means -1.
    		 */
    		if (optopt == (int)'-')
    			return (-1);
    		if (!*place)
    			++optind;
    		if (opterr && *ostr != ':')
    			(void)fprintf(stderr,
    			    "%s: illegal option -- %c\n", __progname, optopt);
    		return (BADCH);
    	}
    	if (*++oli != ':') {			/* don't need argument */
    		optarg = NULL;
    		if (!*place)
    			++optind;
    	}
    	else {					/* need an argument */
    		if (*place)			/* no white space */
    			optarg = place;
    		else if (nargc <= ++optind) {	/* no arg */
    			place = EMSG;
    			if (*ostr == ':')
    				return (BADARG);
    			if (opterr)
    				(void)fprintf(stderr,
    				    "%s: option requires an argument -- %c\n",
    				    __progname, optopt);
    			return (BADCH);
    		}
    	 	else				/* white space */
    			optarg = nargv[optind];
    		place = EMSG;
    		++optind;
    	}
    	return (optopt);			/* dump back option letter */
    }