ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

getopt.c
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 1987 Regents of the University of California.
00003  * All rights reserved.
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions
00007  * are met:
00008  * 1. Redistributions of source code must retain the above copyright
00009  *    notice, this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright
00011  *    notice, this list of conditions and the following disclaimer in the
00012  *    documentation and/or other materials provided with the distribution.
00013  * 3. All advertising materials mentioning features or use of this software
00014  *    must display the following acknowledgement:
00015  *  This product includes software developed by the University of
00016  *  California, Berkeley and its contributors.
00017  * 4. Neither the name of the University nor the names of its contributors
00018  *    may be used to endorse or promote products derived from this software
00019  *    without specific prior written permission.
00020  *
00021  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
00022  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00023  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00024  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
00025  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00026  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00027  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00028  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00029  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00030  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00031  * SUCH DAMAGE.
00032  *
00033  * Fri Jun 13 10:39:00 1997, tfelix@fred.net:
00034  *     Ported to Win32, changed index/rindex to strchr/strrchr
00035  */
00036 
00037 #if defined(LIBC_SCCS) && !defined(lint)
00038 static char sccsid[] = "@(#)getopt.c    4.13 (Berkeley) 2/23/91";
00039 #endif /* LIBC_SCCS and not lint */
00040 
00041 #include "precomp.h"
00042 
00043 /*
00044  * get option letter from argument vector
00045  */
00046 int opterr = 1,     /* if error message should be printed */
00047     optind = 1,     /* index into parent argv vector */
00048     optopt;         /* character checked for validity */
00049 const char  *optarg;        /* argument associated with option */
00050 
00051 #define BADCH   (int)'?'
00052 #define EMSG    ""
00053 
00054 int
00055 getopt(int nargc, char * const *nargv, const char *ostr)
00056 {
00057     static const char *place = EMSG;        /* option letter processing */
00058     register char *oli;         /* option letter list index */
00059     char *p;
00060 
00061     if (!*place) {              /* update scanning pointer */
00062         if (optind >= nargc || *(place = nargv[optind]) != '-') {
00063             place = EMSG;
00064             return(EOF);
00065         }
00066         if (place[1] && *++place == '-') {  /* found "--" */
00067             ++optind;
00068             place = EMSG;
00069             return(EOF);
00070         }
00071     }                   /* option letter okay? */
00072     if ((optopt = (int)*place++) == (int)':' ||
00073         !(oli = strchr(ostr, optopt))) {
00074         /*
00075          * if the user didn't specify '-' as an option,
00076          * assume it means EOF.
00077          */
00078         if (optopt == (int)'-')
00079             return(EOF);
00080         if (!*place)
00081             ++optind;
00082         if (opterr) {
00083             if (!(p = strrchr(*nargv, '/')))
00084                 p = *nargv;
00085             else
00086                 ++p;
00087             (void)fprintf(stderr, "%s: illegal option -- %c\n",
00088                 p, optopt);
00089         }
00090         return(BADCH);
00091     }
00092     if (*++oli != ':') {            /* don't need argument */
00093         optarg = NULL;
00094         if (!*place)
00095             ++optind;
00096     }
00097     else {                  /* need an argument */
00098         if (*place)         /* no white space */
00099             optarg = place;
00100         else if (nargc <= ++optind) {   /* no arg */
00101             place = EMSG;
00102             if (!(p = strrchr(*nargv, '/')))
00103                 p = *nargv;
00104             else
00105                 ++p;
00106             if (opterr)
00107                 (void)fprintf(stderr,
00108                     "%s: option requires an argument -- %c\n",
00109                     p, optopt);
00110             return(BADCH);
00111         }
00112         else                /* white space */
00113             optarg = nargv[optind];
00114         place = EMSG;
00115         ++optind;
00116     }
00117     return(optopt);             /* dump back option letter */
00118 }

Generated on Sat May 26 2012 04:16:07 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.