summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/sntp/libopts/stack.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/sntp/libopts/stack.c')
-rw-r--r--contrib/ntp/sntp/libopts/stack.c168
1 files changed, 83 insertions, 85 deletions
diff --git a/contrib/ntp/sntp/libopts/stack.c b/contrib/ntp/sntp/libopts/stack.c
index 6d77f72..d2ce165 100644
--- a/contrib/ntp/sntp/libopts/stack.c
+++ b/contrib/ntp/sntp/libopts/stack.c
@@ -1,54 +1,33 @@
-/*
- * stack.c
- * $Id: stack.c,v 4.13 2007/02/04 17:44:12 bkorb Exp $
- * Time-stamp: "2007-01-13 10:43:21 bkorb"
+/**
+ * \file stack.c
*
* This is a special option processing routine that will save the
* argument to an option in a FIFO queue.
+ *
+ * @addtogroup autoopts
+ * @{
*/
-
/*
- * Automated Options copyright 1992-2007 Bruce Korb
- *
- * Automated Options is free software.
- * You may redistribute it and/or modify it under the terms of the
- * GNU General Public License, as published by the Free Software
- * Foundation; either version 2, or (at your option) any later version.
- *
- * Automated Options is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This file is part of AutoOpts, a companion to AutoGen.
+ * AutoOpts is free software.
+ * AutoOpts is Copyright (C) 1992-2014 by Bruce Korb - all rights reserved
*
- * You should have received a copy of the GNU General Public License
- * along with Automated Options. See the file "COPYING". If not,
- * write to: The Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
+ * AutoOpts is available under any one of two licenses. The license
+ * in use must be one of these two and the choice is under the control
+ * of the user of the license.
*
- * As a special exception, Bruce Korb gives permission for additional
- * uses of the text contained in his release of AutoOpts.
+ * The GNU Lesser General Public License, version 3 or later
+ * See the files "COPYING.lgplv3" and "COPYING.gplv3"
*
- * The exception is that, if you link the AutoOpts library with other
- * files to produce an executable, this does not by itself cause the
- * resulting executable to be covered by the GNU General Public License.
- * Your use of that executable is in no way restricted on account of
- * linking the AutoOpts library code into it.
+ * The Modified Berkeley Software Distribution License
+ * See the file "COPYING.mbsd"
*
- * This exception does not however invalidate any other reasons why
- * the executable file might be covered by the GNU General Public License.
+ * These files have the following sha256 sums:
*
- * This exception applies only to the code released by Bruce Korb under
- * the name AutoOpts. If you copy code from other sources under the
- * General Public License into a copy of AutoOpts, as the General Public
- * License permits, the exception does not apply to the code that you add
- * in this way. To avoid misleading anyone as to the status of such
- * modified files, you must delete this exception notice from them.
- *
- * If you write modifications of your own for AutoOpts, it is your choice
- * whether to permit this exception to apply to your modifications.
- * If you do not wish that, delete this exception notice.
+ * 8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95 COPYING.gplv3
+ * 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3
+ * 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd
*/
#ifdef WITH_LIBREGEX
@@ -59,28 +38,30 @@
* private:
*
* what: Remove option args from a stack
- * arg: + tOptions* + pOpts + program options descriptor +
- * arg: + tOptDesc* + pOptDesc + the descriptor for this arg +
+ * arg: + tOptions* + opts + program options descriptor +
+ * arg: + tOptDesc* + od + the descriptor for this arg +
*
* doc:
* Invoked for options that are equivalenced to stacked options.
=*/
void
-optionUnstackArg(
- tOptions* pOpts,
- tOptDesc* pOptDesc )
+optionUnstackArg(tOptions * opts, tOptDesc * od)
{
- int res;
+ tArgList * arg_list;
+
+ if (INQUERY_CALL(opts, od))
+ return;
+
+ arg_list = (tArgList*)od->optCookie;
- tArgList* pAL = (tArgList*)pOptDesc->optCookie;
/*
* IF we don't have any stacked options,
* THEN indicate that we don't have any of these options
*/
- if (pAL == NULL) {
- pOptDesc->fOptState &= OPTST_PERSISTENT_MASK;
- if ( (pOptDesc->fOptState & OPTST_INITENABLED) == 0)
- pOptDesc->fOptState |= OPTST_DISABLED;
+ if (arg_list == NULL) {
+ od->fOptState &= OPTST_PERSISTENT_MASK;
+ if ((od->fOptState & OPTST_INITENABLED) == 0)
+ od->fOptState |= OPTST_DISABLED;
return;
}
@@ -89,7 +70,7 @@ optionUnstackArg(
regex_t re;
int i, ct, dIdx;
- if (regcomp( &re, pOptDesc->optArg.argString, REG_NOSUB ) != 0)
+ if (regcomp(&re, od->optArg.argString, REG_NOSUB) != 0)
return;
/*
@@ -98,14 +79,16 @@ optionUnstackArg(
* index is incremented every time. The destination only when
* we are keeping a define.
*/
- for (i = 0, dIdx = 0, ct = pAL->useCt; --ct >= 0; i++) {
- tCC* pzSrc = pAL->apzArgs[ i ];
- char* pzEq = strchr( pzSrc, '=' );
+ for (i = 0, dIdx = 0, ct = arg_list->useCt; --ct >= 0; i++) {
+ char const * pzSrc = arg_list->apzArgs[ i ];
+ char * pzEq = strchr(pzSrc, '=');
+ int res;
+
if (pzEq != NULL)
*pzEq = NUL;
- res = regexec( &re, pzSrc, (size_t)0, NULL, 0 );
+ res = regexec(&re, pzSrc, (size_t)0, NULL, 0);
switch (res) {
case 0:
/*
@@ -114,7 +97,7 @@ optionUnstackArg(
* the list.
*/
AGFREE(pzSrc);
- pAL->useCt--;
+ arg_list->useCt--;
break;
default:
@@ -127,12 +110,12 @@ optionUnstackArg(
* THEN we have to move the current one.
*/
if (dIdx != i)
- pAL->apzArgs[ dIdx ] = pzSrc;
+ arg_list->apzArgs[ dIdx ] = pzSrc;
dIdx++;
}
}
- regfree( &re );
+ regfree(&re);
}
#else /* not WITH_LIBREGEX */
{
@@ -144,21 +127,21 @@ optionUnstackArg(
* index is incremented every time. The destination only when
* we are keeping a define.
*/
- for (i = 0, dIdx = 0, ct = pAL->useCt; --ct >= 0; i++) {
- tCC* pzSrc = pAL->apzArgs[ i ];
- char* pzEq = strchr( pzSrc, '=' );
+ for (i = 0, dIdx = 0, ct = arg_list->useCt; --ct >= 0; i++) {
+ const char * pzSrc = arg_list->apzArgs[ i ];
+ char * pzEq = strchr(pzSrc, '=');
if (pzEq != NULL)
*pzEq = NUL;
- if (strcmp( pzSrc, pOptDesc->optArg.argString ) == 0) {
+ if (strcmp(pzSrc, od->optArg.argString) == 0) {
/*
* Remove this entry by reducing the in-use count
* and *not* putting the string pointer back into
* the list.
*/
AGFREE(pzSrc);
- pAL->useCt--;
+ arg_list->useCt--;
} else {
if (pzEq != NULL)
*pzEq = '=';
@@ -168,7 +151,7 @@ optionUnstackArg(
* THEN we have to move the current one.
*/
if (dIdx != i)
- pAL->apzArgs[ dIdx ] = pzSrc;
+ arg_list->apzArgs[ dIdx ] = pzSrc;
dIdx++;
}
}
@@ -178,12 +161,12 @@ optionUnstackArg(
* IF we have unstacked everything,
* THEN indicate that we don't have any of these options
*/
- if (pAL->useCt == 0) {
- pOptDesc->fOptState &= OPTST_PERSISTENT_MASK;
- if ( (pOptDesc->fOptState & OPTST_INITENABLED) == 0)
- pOptDesc->fOptState |= OPTST_DISABLED;
- AGFREE( (void*)pAL );
- pOptDesc->optCookie = NULL;
+ if (arg_list->useCt == 0) {
+ od->fOptState &= OPTST_PERSISTENT_MASK;
+ if ((od->fOptState & OPTST_INITENABLED) == 0)
+ od->fOptState |= OPTST_DISABLED;
+ AGFREE((void *)arg_list);
+ od->optCookie = NULL;
}
}
@@ -194,7 +177,7 @@ optionUnstackArg(
* as an opaque address.
*/
LOCAL void
-addArgListEntry( void** ppAL, void* entry )
+addArgListEntry(void ** ppAL, void * entry)
{
tArgList* pAL = *(void**)ppAL;
@@ -203,7 +186,7 @@ addArgListEntry( void** ppAL, void* entry )
* THEN allocate one now
*/
if (pAL == NULL) {
- pAL = (tArgList*)AGALOC( sizeof( *pAL ), "new option arg stack" );
+ pAL = (tArgList*)AGALOC(sizeof(*pAL), "new option arg stack");
if (pAL == NULL)
return;
pAL->useCt = 0;
@@ -216,15 +199,15 @@ addArgListEntry( void** ppAL, void* entry )
* THEN make it bigger
*/
else if (pAL->useCt >= pAL->allocCt) {
- size_t sz = sizeof( *pAL );
+ size_t sz = sizeof(*pAL);
pAL->allocCt += INCR_ARG_ALLOC_CT;
/*
* The base structure contains space for MIN_ARG_ALLOC_CT
* pointers. We subtract it off to find our augment size.
*/
- sz += sizeof(char*) * (pAL->allocCt - MIN_ARG_ALLOC_CT);
- pAL = (tArgList*)AGREALOC( (void*)pAL, sz, "expanded opt arg stack" );
+ sz += sizeof(char*) * ((size_t)pAL->allocCt - MIN_ARG_ALLOC_CT);
+ pAL = (tArgList*)AGREALOC((void*)pAL, sz, "expanded opt arg stack");
if (pAL == NULL)
return;
*ppAL = (void*)pAL;
@@ -241,26 +224,41 @@ addArgListEntry( void** ppAL, void* entry )
* private:
*
* what: put option args on a stack
- * arg: + tOptions* + pOpts + program options descriptor +
- * arg: + tOptDesc* + pOptDesc + the descriptor for this arg +
+ * arg: + tOptions* + opts + program options descriptor +
+ * arg: + tOptDesc* + od + the descriptor for this arg +
*
* doc:
* Keep an entry-ordered list of option arguments.
=*/
void
-optionStackArg(
- tOptions* pOpts,
- tOptDesc* pOD )
+optionStackArg(tOptions * opts, tOptDesc * od)
{
char * pz;
- if (pOD->optArg.argString == NULL)
+ if (INQUERY_CALL(opts, od))
return;
- AGDUPSTR(pz, pOD->optArg.argString, "stack arg");
- addArgListEntry( &(pOD->optCookie), (void*)pz );
+ if ((od->fOptState & OPTST_RESET) != 0) {
+ tArgList * arg_list = (void*)od->optCookie;
+ int ix;
+ if (arg_list == NULL)
+ return;
+
+ ix = arg_list->useCt;
+ while (--ix >= 0)
+ AGFREE(arg_list->apzArgs[ix]);
+ AGFREE(arg_list);
+
+ } else {
+ if (od->optArg.argString == NULL)
+ return;
+
+ AGDUPSTR(pz, od->optArg.argString, "stack arg");
+ addArgListEntry(&(od->optCookie), (void*)pz);
+ }
}
-/*
+/** @}
+ *
* Local Variables:
* mode: C
* c-file-style: "stroustrup"
OpenPOWER on IntegriCloud