aboutsummaryrefslogtreecommitdiff
path: root/sntp/libopts/pgusage.c
diff options
context:
space:
mode:
Diffstat (limited to 'sntp/libopts/pgusage.c')
-rw-r--r--sntp/libopts/pgusage.c99
1 files changed, 41 insertions, 58 deletions
diff --git a/sntp/libopts/pgusage.c b/sntp/libopts/pgusage.c
index c417c63d5c5f..2e2194867e38 100644
--- a/sntp/libopts/pgusage.c
+++ b/sntp/libopts/pgusage.c
@@ -1,59 +1,35 @@
-/*
- * $Id: pgusage.c,v 4.12 2007/04/28 22:19:23 bkorb Exp $
- * Time-stamp: "2006-07-16 08:13:26 bkorb"
+/**
+ * \file pgusage.c
+ *
+ * Time-stamp: "2011-03-25 17:54:41 bkorb"
*
* Automated Options Paged Usage module.
*
* This routine will run run-on options through a pager so the
* user may examine, print or edit them at their leisure.
- */
-
-/*
- * 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.
+ * This file is part of AutoOpts, a companion to AutoGen.
+ * AutoOpts is free software.
+ * AutoOpts is Copyright (c) 1992-2011 by Bruce Korb - all rights reserved
*
- * 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.
+ * 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.
*
- * 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.
+ * The GNU Lesser General Public License, version 3 or later
+ * See the files "COPYING.lgplv3" and "COPYING.gplv3"
*
- * As a special exception, Bruce Korb gives permission for additional
- * uses of the text contained in his release of AutoOpts.
+ * The Modified Berkeley Software Distribution License
+ * See the file "COPYING.mbsd"
*
- * 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.
+ * These files have the following md5sums:
*
- * This exception does not however invalidate any other reasons why
- * the executable file might be covered by the GNU General Public License.
- *
- * 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.
+ * 43b91e8ca915626ed3818ffb1b71248b pkg/libopts/COPYING.gplv3
+ * 06a1a2e4760c90ea5e1dad8dfaac4d39 pkg/libopts/COPYING.lgplv3
+ * 66a5cedaf62c4b2637025f049f9b826f pkg/libopts/COPYING.mbsd
*/
-tePagerState pagerState = PAGER_STATE_INITIAL;
-
/*=export_func optionPagedUsage
* private:
*
@@ -64,12 +40,16 @@ tePagerState pagerState = PAGER_STATE_INITIAL;
* doc:
* Run the usage output through a pager.
* This is very handy if it is very long.
+ * This is disabled on platforms without a working fork() function.
=*/
void
-optionPagedUsage( tOptions* pOptions, tOptDesc* pOD )
+optionPagedUsage(tOptions* pOptions, tOptDesc* pOD)
{
-#if defined(__windows__) && !defined(__CYGWIN__)
- (*pOptions->pUsageProc)( pOptions, EXIT_SUCCESS );
+#if ! defined(HAVE_WORKING_FORK)
+ if ((pOD->fOptState & OPTST_RESET) != 0)
+ return;
+
+ (*pOptions->pUsageProc)(pOptions, EXIT_SUCCESS);
#else
static pid_t my_pid;
char zPageUsage[ 1024 ];
@@ -82,42 +62,45 @@ optionPagedUsage( tOptions* pOptions, tOptDesc* pOD )
switch (pagerState) {
case PAGER_STATE_INITIAL:
{
+ if ((pOD->fOptState & OPTST_RESET) != 0)
+ return;
+
my_pid = getpid();
#ifdef HAVE_SNPRINTF
snprintf(zPageUsage, sizeof(zPageUsage), "/tmp/use.%lu", (tAoUL)my_pid);
#else
- sprintf( zPageUsage, "/tmp/use.%lu", (tAoUL)my_pid );
+ sprintf(zPageUsage, "/tmp/use.%lu", (tAoUL)my_pid);
#endif
- unlink( zPageUsage );
+ unlink(zPageUsage);
/*
* Set usage output to this temporary file
*/
- option_usage_fp = fopen( zPageUsage, "w" FOPEN_BINARY_FLAG );
+ option_usage_fp = fopen(zPageUsage, "w" FOPEN_BINARY_FLAG);
if (option_usage_fp == NULL)
- _exit( EXIT_FAILURE );
+ _exit(EXIT_FAILURE);
pagerState = PAGER_STATE_READY;
/*
* Set up so this routine gets called during the exit logic
*/
- atexit( (void(*)(void))optionPagedUsage );
+ atexit((void(*)(void))optionPagedUsage);
/*
* The usage procedure will now put the usage information into
* the temporary file we created above.
*/
- (*pOptions->pUsageProc)( pOptions, EXIT_SUCCESS );
+ (*pOptions->pUsageProc)(pOptions, EXIT_SUCCESS);
- /*NOTREACHED*/
- _exit( EXIT_FAILURE );
+ /* NOTREACHED */
+ _exit(EXIT_FAILURE);
}
case PAGER_STATE_READY:
{
tSCC zPage[] = "%1$s /tmp/use.%2$lu ; rm -f /tmp/use.%2$lu";
- tCC* pzPager = (tCC*)getenv( "PAGER" );
+ tCC* pzPager = (tCC*)getenv("PAGER");
/*
* Use the "more(1)" program if "PAGER" has not been defined
@@ -131,12 +114,12 @@ optionPagedUsage( tOptions* pOptions, tOptDesc* pOD )
#ifdef HAVE_SNPRINTF
snprintf(zPageUsage, sizeof(zPageUsage), zPage, pzPager, (tAoUL)my_pid);
#else
- sprintf( zPageUsage, zPage, pzPager, (tAoUL)my_pid );
+ sprintf(zPageUsage, zPage, pzPager, (tAoUL)my_pid);
#endif
- fclose( stderr );
- dup2( STDOUT_FILENO, STDERR_FILENO );
+ fclose(stderr);
+ dup2(STDOUT_FILENO, STDERR_FILENO);
- (void)system( zPageUsage );
+ (void)system(zPageUsage);
}
case PAGER_STATE_CHILD: