updated libopts

This commit is contained in:
Nikos Mavrogiannopoulos
2013-04-28 15:16:15 +03:00
parent fed7861b89
commit 66d9e9404d
59 changed files with 7427 additions and 4770 deletions
+29 -25
View File
@@ -2,16 +2,18 @@
/**
* \file pgusage.c
*
* Time-stamp: "2012-02-28 19:49:32 bkorb"
*
* Automated Options Paged Usage module.
*
* @addtogroup autoopts
* @{
*/
/*
* This routine will run run-on options through a pager so the
* user may examine, print or edit them at their leisure.
*
* This file is part of AutoOpts, a companion to AutoGen.
* AutoOpts is free software.
* AutoOpts is Copyright (c) 1992-2012 by Bruce Korb - all rights reserved
* AutoOpts is Copyright (C) 1992-2013 by Bruce Korb - all rights reserved
*
* 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
@@ -23,19 +25,19 @@
* The Modified Berkeley Software Distribution License
* See the file "COPYING.mbsd"
*
* These files have the following md5sums:
* These files have the following sha256 sums:
*
* 43b91e8ca915626ed3818ffb1b71248b pkg/libopts/COPYING.gplv3
* 06a1a2e4760c90ea5e1dad8dfaac4d39 pkg/libopts/COPYING.lgplv3
* 66a5cedaf62c4b2637025f049f9b826f pkg/libopts/COPYING.mbsd
* 8584710e9b04216a394078dc156b781d0b47e1729104d666658aecef8ee32e95 COPYING.gplv3
* 4379e7444a0e2ce2b12dd6f5a52a27a4d02d39d247901d3285c88cf0d37f477b COPYING.lgplv3
* 13aa749a5b0a454917a944ed8fffc530b784f5ead522b1aacaf4ec8aa55a6239 COPYING.mbsd
*/
/*=export_func optionPagedUsage
* private:
*
* what: Decipher a boolean value
* 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:
* Run the usage output through a pager.
@@ -43,16 +45,16 @@
* This is disabled on platforms without a working fork() function.
=*/
void
optionPagedUsage(tOptions * pOptions, tOptDesc * pOD)
optionPagedUsage(tOptions * opts, tOptDesc * od)
{
#if ! defined(HAVE_WORKING_FORK)
if ((pOD->fOptState & OPTST_RESET) != 0)
if ((od->fOptState & OPTST_RESET) != 0)
return;
(*pOptions->pUsageProc)(pOptions, EXIT_SUCCESS);
(*opts->pUsageProc)(opts, EXIT_SUCCESS);
#else
static pid_t my_pid;
char zPageUsage[ 1024 ];
char fil_name[1024];
/*
* IF we are being called after the usage proc is done
@@ -62,17 +64,18 @@ optionPagedUsage(tOptions * pOptions, tOptDesc * pOD)
switch (pagerState) {
case PAGER_STATE_INITIAL:
{
if ((pOD->fOptState & OPTST_RESET) != 0)
if ((od->fOptState & OPTST_RESET) != 0)
return;
my_pid = getpid();
snprintf(zPageUsage, sizeof(zPageUsage), TMP_USAGE_FMT, (tAoUL)my_pid);
unlink(zPageUsage);
snprintf(fil_name, sizeof(fil_name), TMP_USAGE_FMT,
(unsigned long)my_pid);
unlink(fil_name);
/*
* Set usage output to this temporary file
*/
option_usage_fp = fopen(zPageUsage, "w" FOPEN_BINARY_FLAG);
option_usage_fp = fopen(fil_name, "w" FOPEN_BINARY_FLAG);
if (option_usage_fp == NULL)
_exit(EXIT_FAILURE);
@@ -87,7 +90,7 @@ optionPagedUsage(tOptions * pOptions, tOptDesc * pOD)
* The usage procedure will now put the usage information into
* the temporary file we created above.
*/
(*pOptions->pUsageProc)(pOptions, EXIT_SUCCESS);
(*opts->pUsageProc)(opts, EXIT_SUCCESS);
/* NOTREACHED */
_exit(EXIT_FAILURE);
@@ -95,23 +98,23 @@ optionPagedUsage(tOptions * pOptions, tOptDesc * pOD)
case PAGER_STATE_READY:
{
tCC* pzPager = (tCC*)getenv(PAGER_NAME);
char const * pager = (char const *)getenv(PAGER_NAME);
/*
* Use the "more(1)" program if "PAGER" has not been defined
*/
if (pzPager == NULL)
pzPager = MORE_STR;
if (pager == NULL)
pager = MORE_STR;
/*
* Page the file and remove it when done.
*/
snprintf(zPageUsage, sizeof(zPageUsage), PAGE_USAGE_FMT, pzPager,
(tAoUL)my_pid);
snprintf(fil_name, sizeof(fil_name), PAGE_USAGE_FMT, pager,
(unsigned long)my_pid);
fclose(stderr);
dup2(STDOUT_FILENO, STDERR_FILENO);
(void)system(zPageUsage);
ignore_val( system( fil_name));
}
case PAGER_STATE_CHILD:
@@ -123,7 +126,8 @@ optionPagedUsage(tOptions * pOptions, tOptDesc * pOD)
#endif
}
/*
/** @}
*
* Local Variables:
* mode: C
* c-file-style: "stroustrup"