Blame src/lib/libast/comp/getopt.c

Packit Service a8c26c
/***********************************************************************
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*               This software is part of the ast package               *
Packit Service a8c26c
*          Copyright (c) 1985-2011 AT&T Intellectual Property          *
Packit Service a8c26c
*                      and is licensed under the                       *
Packit Service a8c26c
*                 Eclipse Public License, Version 1.0                  *
Packit Service a8c26c
*                    by AT&T Intellectual Property                     *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*                A copy of the License is available at                 *
Packit Service a8c26c
*          http://www.eclipse.org/org/documents/epl-v10.html           *
Packit Service a8c26c
*         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*              Information and Software Systems Research               *
Packit Service a8c26c
*                            AT&T Research                             *
Packit Service a8c26c
*                           Florham Park NJ                            *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
*                 Glenn Fowler <gsf@research.att.com>                  *
Packit Service a8c26c
*                  David Korn <dgk@research.att.com>                   *
Packit Service a8c26c
*                   Phong Vo <kpv@research.att.com>                    *
Packit Service a8c26c
*                                                                      *
Packit Service a8c26c
***********************************************************************/
Packit Service a8c26c
#pragma prototyped
Packit Service a8c26c
Packit Service a8c26c
#include <ast.h>
Packit Service a8c26c
Packit Service a8c26c
#undef	_lib_getopt	/* we can satisfy the api */
Packit Service a8c26c
Packit Service a8c26c
#if _lib_getopt
Packit Service a8c26c
Packit Service a8c26c
NoN(getopt)
Packit Service a8c26c
Packit Service a8c26c
#else
Packit Service a8c26c
Packit Service a8c26c
#undef	_BLD_ast	/* enable ast imports since we're user static */
Packit Service a8c26c
Packit Service a8c26c
#include <error.h>
Packit Service a8c26c
#include <option.h>
Packit Service a8c26c
Packit Service a8c26c
int		opterr = 1;
Packit Service a8c26c
int		optind = 1;
Packit Service a8c26c
int		optopt = 0;
Packit Service a8c26c
char*		optarg = 0;
Packit Service a8c26c
Packit Service a8c26c
static int	lastoptind;
Packit Service a8c26c
Packit Service a8c26c
extern int
Packit Service a8c26c
getopt(int argc, char* const* argv, const char* optstring)
Packit Service a8c26c
{
Packit Service a8c26c
	int	n;
Packit Service a8c26c
Packit Service a8c26c
	NoP(argc);
Packit Service a8c26c
	opt_info.index = (optind > 1 || optind == lastoptind) ? optind : 0;
Packit Service a8c26c
	if (opt_info.index >= argc)
Packit Service a8c26c
		return -1;
Packit Service a8c26c
	switch (n = optget((char**)argv, optstring))
Packit Service a8c26c
	{
Packit Service a8c26c
	case ':':
Packit Service a8c26c
		n = '?';
Packit Service a8c26c
		/*FALLTHROUGH*/
Packit Service a8c26c
	case '?':
Packit Service a8c26c
		if (opterr && (!optstring || *optstring != ':'))
Packit Service a8c26c
		{
Packit Service a8c26c
			if (!error_info.id)
Packit Service a8c26c
				error_info.id = argv[0];
Packit Service a8c26c
			errormsg(NiL, 2, opt_info.arg);
Packit Service a8c26c
		}
Packit Service a8c26c
		optopt = opt_info.option[1];
Packit Service a8c26c
		break;
Packit Service a8c26c
	case 0:
Packit Service a8c26c
		n = -1;
Packit Service a8c26c
		break;
Packit Service a8c26c
	}
Packit Service a8c26c
	optarg = opt_info.arg;
Packit Service a8c26c
	lastoptind = optind = opt_info.index;
Packit Service a8c26c
	return n;
Packit Service a8c26c
}
Packit Service a8c26c
Packit Service a8c26c
#endif