Add getopt 1.5 3rd party dependency
This commit is contained in:
		
							parent
							
								
									1289c7f7dc
								
							
						
					
					
						commit
						06a894a990
					
				
					 2 changed files with 93 additions and 0 deletions
				
			
		|  | @ -39,6 +39,9 @@ grammers-v4 (git SHA 6610e82ee235992f50e108cd59204f3bcd7128c1) | |||
| 
 | ||||
| * License: New BSD License | ||||
| 
 | ||||
| getopt 1.5 (1998-03-11) | ||||
| 
 | ||||
| * License: Public domain | ||||
| 
 | ||||
| ## Cryptography | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										90
									
								
								src/os/src/snippets/code/os_stdlib_getopt.c
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										90
									
								
								src/os/src/snippets/code/os_stdlib_getopt.c
									
										
									
									
									
										Executable file
									
								
							|  | @ -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); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Michiel Beemster
						Michiel Beemster