From 06a894a99086b6fec9e5c12d6ca56249be6eb715 Mon Sep 17 00:00:00 2001 From: Michiel Beemster Date: Tue, 8 May 2018 08:47:09 +0200 Subject: [PATCH] Add getopt 1.5 3rd party dependency --- NOTICE.md | 3 + src/os/src/snippets/code/os_stdlib_getopt.c | 90 +++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100755 src/os/src/snippets/code/os_stdlib_getopt.c diff --git a/NOTICE.md b/NOTICE.md index c761545..4fce683 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -39,6 +39,9 @@ grammers-v4 (git SHA 6610e82ee235992f50e108cd59204f3bcd7128c1) * License: New BSD License +getopt 1.5 (1998-03-11) + +* License: Public domain ## Cryptography diff --git a/src/os/src/snippets/code/os_stdlib_getopt.c b/src/os/src/snippets/code/os_stdlib_getopt.c new file mode 100755 index 0000000..18f06b7 --- /dev/null +++ b/src/os/src/snippets/code/os_stdlib_getopt.c @@ -0,0 +1,90 @@ +/* + * Copyright(c) 2006 to 2018 ADLINK Technology Limited and others + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License + * v. 1.0 which is available at + * http://www.eclipse.org/org/documents/edl-v10.php. + * + * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause + */ +/* ::[[ @(#) getopt.c 1.5 89/03/11 05:40:23 ]]:: */ +#ifndef LINT +static const char Id[] = "$Id: os_stdlib_getopt.c,v 1.2 2008-11-17 09:53:45 hansv Exp $"; +#endif + +/* + * Here's something you've all been waiting for: the AT&T public domain + * source for getopt(3). It is the code which was given out at the 1985 + * UNIFORUM conference in Dallas. I obtained it by electronic mail + * directly from AT&T. The people there assure me that it is indeed + * in the public domain. + * + * There is no manual page. That is because the one they gave out at + * UNIFORUM was slightly different from the current System V Release 2 + * manual page. The difference apparently involved a note about the + * famous rules 5 and 6, recommending using white space between an option + * and its first argument, and not grouping options that have arguments. + * Getopt itself is currently lenient about both of these things White + * space is allowed, but not mandatory, and the last option in a group can + * have an argument. That particular version of the man page evidently + * has no official existence, and my source at AT&T did not send a copy. + * The current SVR2 man page reflects the actual behavor of this getopt. + * However, I am not about to post a copy of anything licensed by AT&T. + */ + +#define ERR(szz,czz) if(opterr){fprintf(stderr,"%s%s%c\n",argv[0],szz,czz);} + +int opterr = 1; +int optind = 1; +int optopt; +char *optarg; + +int +getopt( + int argc, + char **argv, + const char *opts) +{ + static int sp = 1; + register int c; + register char *cp; + + if (sp == 1) { + if (optind >= argc || + argv[optind][0] != '-' || argv[optind][1] == '\0') + return (EOF); + else if (strcmp(argv[optind], "--") == 0) { + optind++; + return (EOF); + } + } + optopt = c = argv[optind][sp]; + if (c == ':' || (cp = strchr(opts, c)) == NULL) { + ERR(": illegal option -- ", c); + if (argv[optind][++sp] == '\0') { + optind++; + sp = 1; + } + return ('?'); + } + if (*++cp == ':') { + if (argv[optind][sp + 1] != '\0') + optarg = &argv[optind++][sp + 1]; + else if (++optind >= argc) { + ERR(": option requires an argument -- ", c); + sp = 1; + return ('?'); + } else + optarg = argv[optind++]; + sp = 1; + } else { + if (argv[optind][++sp] == '\0') { + sp = 1; + optind++; + } + optarg = NULL; + } + return (c); +}