/*
 * getopt.c
 *
 * Simple POSIX getopt(), no GNU extensions...
 */

#include <stdint.h>
#include <unistd.h>
#include <string.h>

char *optarg;
int optind = 1;
int opterr, optopt;
static const char *__optptr;

int getopt(int argc, char * const *argv, const char *optstring)
{
  const char *carg = argv[optind];
  const char *osptr;
  int opt;

  /* We don't actually need argc */
  (void)argc;

  /* First, eliminate all non-option cases */

  if ( !carg || carg[0] != '-' || !carg[1] ) {
    return -1;
  }

  if ( carg[1] == '-' && !carg[2] ) {
    optind++;
    return -1;
  }

  if ( (uintptr_t)(__optptr-carg) > (uintptr_t)strlen(carg) )
    __optptr = carg+1;	/* Someone frobbed optind, change to new opt. */

  opt = *__optptr++;

  if ( opt != ':' && (osptr = strchr(optstring, opt)) ) {
    if ( osptr[1] == ':' ) {
      if ( *__optptr ) {
	/* Argument-taking option with attached argument */
	optarg = (char *)__optptr;
	optind++;
      } else {
	/* Argument-taking option with non-attached argument */
	if ( argv[optind+1] ) {
	  optarg = (char *)argv[optind+1];
	  optind += 2;
	} else {
	  /* Missing argument */
	  optind++;
	  return (optstring[0] == ':') ? ':' : '?';
	}
      }
      return opt;
    } else {
      /* Non-argument-taking option */
      /* __optptr will remember the exact position to resume at */
      if ( ! *__optptr )
	optind++;
      return opt;
    }
  } else {
    /* Unknown option */
    optopt = opt;
    if ( ! *__optptr )
      optind++;
    return '?';
  }
}
