diff options
| author | Xin LI <delphij@FreeBSD.org> | 2017-02-12 07:04:44 +0000 |
|---|---|---|
| committer | Xin LI <delphij@FreeBSD.org> | 2017-02-12 07:04:44 +0000 |
| commit | c8c6d70e300aa9261c4766502c179fc4cd2b22a0 (patch) | |
| tree | 14c068bb8b49db9f9ae540e8e2be80a9035e403a /missing | |
| parent | 50224b10fa4e157f09ee1cd03c790c9e61e76c5e (diff) | |
Notes
Diffstat (limited to 'missing')
| -rw-r--r-- | missing/getopt.c | 126 | ||||
| -rw-r--r-- | missing/getopt.h | 7 | ||||
| -rw-r--r-- | missing/snprintf.c | 20 | ||||
| -rw-r--r-- | missing/strtok_r.c | 87 | ||||
| -rw-r--r-- | missing/win_snprintf.c | 31 |
5 files changed, 261 insertions, 10 deletions
diff --git a/missing/getopt.c b/missing/getopt.c new file mode 100644 index 0000000000000..cc798e1de84d3 --- /dev/null +++ b/missing/getopt.c @@ -0,0 +1,126 @@ +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95"; +#endif /* LIBC_SCCS and not lint */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "getopt.h" + +int opterr = 1, /* if error message should be printed */ + optind = 1, /* index into parent argv vector */ + optopt, /* character checked for validity */ + optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +getopt(nargc, nargv, ostr) + int nargc; + char * const *nargv; + const char *ostr; +{ + char *cp; + static char *__progname; + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (__progname == NULL) { + if ((cp = strrchr(nargv[0], '/')) != NULL) + __progname = cp + 1; + else + __progname = nargv[0]; + } + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __progname, optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname, optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} diff --git a/missing/getopt.h b/missing/getopt.h new file mode 100644 index 0000000000000..d176345ae20ba --- /dev/null +++ b/missing/getopt.h @@ -0,0 +1,7 @@ +/* + * Header for the getopt() we supply if the platform doesn't supply it. + */ +extern char *optarg; /* getopt(3) external variables */ +extern int optind, opterr, optopt; + +extern int getopt(int nargc, char * const *nargv, const char *ostr); diff --git a/missing/snprintf.c b/missing/snprintf.c index 9b63f8b1dcd0b..99f0bdfc2a930 100644 --- a/missing/snprintf.c +++ b/missing/snprintf.c @@ -456,13 +456,13 @@ xyzprintf (struct state *state, const char *char_format, va_list ap) #ifndef HAVE_SNPRINTF int -snprintf (char *str, size_t sz, const char *format, ...) +pcap_snprintf (char *str, size_t sz, const char *format, ...) { va_list args; int ret; va_start(args, format); - ret = vsnprintf (str, sz, format, args); + ret = pcap_vsnprintf (str, sz, format, args); #ifdef PARANOIA { @@ -473,7 +473,7 @@ snprintf (char *str, size_t sz, const char *format, ...) if (tmp == NULL) abort (); - ret2 = vsprintf (tmp, format, args); + ret2 = pcap_vsprintf (tmp, format, args); if (ret != ret2 || strcmp(str, tmp)) abort (); free (tmp); @@ -518,13 +518,13 @@ asprintf (char **ret, const char *format, ...) #ifndef HAVE_ASNPRINTF int -asnprintf (char **ret, size_t max_sz, const char *format, ...) +pcap_asnprintf (char **ret, size_t max_sz, const char *format, ...) { va_list args; int val; va_start(args, format); - val = vasnprintf (ret, max_sz, format, args); + val = pcap_vasnprintf (ret, max_sz, format, args); #ifdef PARANOIA { @@ -534,7 +534,7 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...) if (tmp == NULL) abort (); - ret2 = vsprintf (tmp, format, args); + ret2 = pcap_vsprintf (tmp, format, args); if (val != ret2 || strcmp(*ret, tmp)) abort (); free (tmp); @@ -548,16 +548,16 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...) #ifndef HAVE_VASPRINTF int -vasprintf (char **ret, const char *format, va_list args) +pcap_vasprintf (char **ret, const char *format, va_list args) { - return vasnprintf (ret, 0, format, args); + return pcap_vasnprintf (ret, 0, format, args); } #endif #ifndef HAVE_VASNPRINTF int -vasnprintf (char **ret, size_t max_sz, const char *format, va_list args) +pcap_vasnprintf (char **ret, size_t max_sz, const char *format, va_list args) { int st; size_t len; @@ -600,7 +600,7 @@ vasnprintf (char **ret, size_t max_sz, const char *format, va_list args) #ifndef HAVE_VSNPRINTF int -vsnprintf (char *str, size_t sz, const char *format, va_list args) +pcap_vsnprintf (char *str, size_t sz, const char *format, va_list args) { struct state state; int ret; diff --git a/missing/strtok_r.c b/missing/strtok_r.c new file mode 100644 index 0000000000000..c9c94b95d832c --- /dev/null +++ b/missing/strtok_r.c @@ -0,0 +1,87 @@ +/*- + * Copyright (c) 1998 Softweyr LLC. All rights reserved. + * + * strtok_r, from Berkeley strtok + * Oct 13, 1998 by Wes Peters <wes@softweyr.com> + * + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notices, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notices, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY SOFTWEYR LLC, THE REGENTS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTWEYR LLC, THE + * REGENTS, OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * From: @(#)strtok.c 8.1 (Berkeley) 6/4/93 + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "portability.h" + +char * +pcap_strtok_r(char *s, const char *delim, char **last) +{ + char *spanp, *tok; + int c, sc; + + if (s == NULL && (s = *last) == NULL) + return (NULL); + + /* + * Skip (span) leading delimiters (s += strspn(s, delim), sort of). + */ +cont: + c = *s++; + for (spanp = (char *)delim; (sc = *spanp++) != 0;) { + if (c == sc) + goto cont; + } + + if (c == 0) { /* no non-delimiter characters */ + *last = NULL; + return (NULL); + } + tok = s - 1; + + /* + * Scan token (scan for delimiters: s += strcspn(s, delim), sort of). + * Note that delim must have one NUL; we stop if we see that, too. + */ + for (;;) { + c = *s++; + spanp = (char *)delim; + do { + if ((sc = *spanp++) == c) { + if (c == 0) + s = NULL; + else + s[-1] = '\0'; + *last = s; + return (tok); + } + } while (sc != 0); + } + /* NOTREACHED */ +} diff --git a/missing/win_snprintf.c b/missing/win_snprintf.c new file mode 100644 index 0000000000000..65a8ea1a5cd9e --- /dev/null +++ b/missing/win_snprintf.c @@ -0,0 +1,31 @@ +#include <stdio.h> +#include <stdarg.h> + +int +pcap_vsnprintf(char *str, size_t str_size, const char *format, va_list args) +{ + int ret; + + ret = _vsnprintf_s(str, str_size, _TRUNCATE, format, args); + + /* + * XXX - _vsnprintf() and _snprintf() do *not* guarantee + * that str is null-terminated, but C99's vsnprintf() + * and snprintf() do, and we want to offer C99 behavior, + * so forcibly null-terminate the string. + */ + str[str_size - 1] = '\0'; + return (ret); +} + +int +pcap_snprintf(char *str, size_t str_size, const char *format, ...) +{ + va_list args; + int ret; + + va_start(args, format); + ret = pcap_vsnprintf(str, str_size, format, args); + va_end(args); + return (ret); +} |
