Index: ossp-pkg/rc/Makefile.in
RCS File: /v/ossp/cvs/ossp-pkg/rc/Makefile.in,v
rcsdiff -q -kk '-r1.15' '-r1.16' -u '/v/ossp/cvs/ossp-pkg/rc/Makefile.in,v' 2>/dev/null
--- Makefile.in 2002/02/13 19:19:28 1.15
+++ Makefile.in 2002/02/28 15:30:04 1.16
@@ -59,11 +59,11 @@
TARGET_PROGS = rc
TARGET_MANS = rc.1 rc-sample.5
-SRCS = rc.c rc_config.c rc_option.c rc_version.c\
- rc_pcre.c rc_util.c
+SRCS = rc.c rc_config.c rc_optimpl.c rc_option.c\
+ rc_version.c rc_pcre.c rc_util.c
-OBJS = rc.o rc_config.o rc_option.o rc_version.o\
- rc_pcre.o rc_util.o
+OBJS = rc.o rc_config.o rc_optimpl.o rc_option.o\
+ rc_version.o rc_pcre.o rc_util.o
SUBDIRS = @SUBDIR_EX@ @SUBDIR_VAR@ @SUBDIR_VAL@ @SUBDIR_STR@ @SUBDIR_POPT@
Index: ossp-pkg/rc/rc.c
RCS File: /v/ossp/cvs/ossp-pkg/rc/rc.c,v
rcsdiff -q -kk '-r1.13' '-r1.14' -u '/v/ossp/cvs/ossp-pkg/rc/rc.c,v' 2>/dev/null
--- rc.c 2002/02/13 19:19:28 1.13
+++ rc.c 2002/02/28 15:30:04 1.14
@@ -33,6 +33,9 @@
#include "rc.h"
#include "rc_private.h"
+/* Initialize our global OSSP ex library identifier */
+const char g_szOSSPrc[] = "OSSP rc";
+
int main(int argc, char *argv[])
{
@@ -41,8 +44,8 @@
rc_config_t *pConf = NULL;
ex_try {
- configInit(&pConf);
- configFill(pConf, argc, argv);
+ configConstruct(&pConf);
+ configLoad(pConf, argc, argv);
}
ex_catch(Except) {
bCaught = 1;
Index: ossp-pkg/rc/rc.h
RCS File: /v/ossp/cvs/ossp-pkg/rc/rc.h,v
rcsdiff -q -kk '-r1.10' '-r1.11' -u '/v/ossp/cvs/ossp-pkg/rc/rc.h,v' 2>/dev/null
--- rc.h 2002/02/08 18:36:40 1.10
+++ rc.h 2002/02/28 15:30:04 1.11
@@ -45,9 +45,6 @@
#include "rc_private.h"
-/* Unique identifier to use with OSSP ex library */
-extern const char ossprc_id[];
-
/* RC return codes */
typedef enum {
RC_OK, /* Success */
@@ -59,18 +56,30 @@
} rc_return_t;
/* Option function prototypes */
-rc_return_t parseOpts(int, char **);
-rc_return_t procOpts(char, char *);
+rc_return_t optionProcess(void);
+rc_return_t optionProcess(void);
+
+/* File option function prototypes */
+rc_return_t foptParse(void);
+rc_return_t foptProcess(void);
+
+/* Environment option function prototypes */
+rc_return_t eoptParse(void);
+rc_return_t eoptProcess(void);
+
+/* Command line option function prototypes */
+rc_return_t coptParse(int);
+rc_return_t coptProcess(char, char *);
/* Config function prototypes */
-rc_return_t configInit(rc_config_t **);
-rc_return_t configFill(rc_config_t *, int, char **);
+rc_return_t configConstruct(rc_config_t **);
+rc_return_t configLoad(rc_config_t *, int, char **);
rc_return_t configDestruct(rc_config_t *);
-/* Util function prototypes */
+/* Utility (nonbounded) function prototypes */
char *strErr(rc_return_t);
-/* Other function prototypes */
+/* Other function prototypes */
/*rc_result_t rc_Err (void);
rc_result_t rc_Warn (void);
Index: ossp-pkg/rc/rc.pod
RCS File: /v/ossp/cvs/ossp-pkg/rc/rc.pod,v
rcsdiff -q -kk '-r1.27' '-r1.28' -u '/v/ossp/cvs/ossp-pkg/rc/rc.pod,v' 2>/dev/null
--- rc.pod 2002/02/04 22:35:20 1.27
+++ rc.pod 2002/02/28 15:30:04 1.28
@@ -49,6 +49,7 @@
[B<-t>|B<--tmp> I
]
[B<-v>|B<--verbose>]
[B<-x>|B<--exec>]
+
[B<--RequireUmask umask>]
[B<--RequireOwner uid|name>]
[B<--RequireGroup gid|name>]
@@ -61,8 +62,9 @@
[B<--NameCommon> name]
[B<--NameDefault> name]
[B<--NameError> name]
-I
-I
+
+I<>
+I<>
=head1 DESCRIPTION
Index: ossp-pkg/rc/rc_config.c
RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_config.c,v
rcsdiff -q -kk '-r1.2' '-r1.3' -u '/v/ossp/cvs/ossp-pkg/rc/rc_config.c,v' 2>/dev/null
--- rc_config.c 2002/02/13 19:19:28 1.2
+++ rc_config.c 2002/02/28 15:30:04 1.3
@@ -38,20 +38,20 @@
/***************************************
-* configInit(rc_config_t) *
-* Initialize a configuration *
+* configConstruct(rc_config_t) *
+* Construct a configuration *
***************************************/
-rc_return_t configInit(rc_config_t **ppConfig)
+rc_return_t configConstruct(rc_config_t **ppConfig)
{
ex_t Except;
- *ppConfig = malloc(sizeof(rc_config_t));
- if (!*ppConfig)
- return(RC_THROW(RC_ERR_MEM));
-
- ex_try {
- val_create(&(*ppConfig)->pVal);
- }
+ *ppConfig = malloc(sizeof(rc_config_t)); /* Allocate the */
+ if (!*ppConfig) /* configuration's */
+ return(RC_THROW(RC_ERR_MEM)); /* identity */
+
+ ex_try { /* Make a val instance */
+ val_create(&(*ppConfig)->pVal); /* to hold individual */
+ } /* configuration values */
ex_catch(Except) {
rethrow;
}
@@ -60,20 +60,20 @@
}
/************************************************
-* configFill(rc_config_t, int, char **) *
-* Fill a configuration *
+* configLoad(rc_config_t, int, char **) *
+* Load a configuration *
************************************************/
-rc_return_t configFill(rc_config_t *pConfig, int argc, char *argv[])
+rc_return_t configLoad(rc_config_t *pConfig, int argc, char *argv[])
{
ex_t Except;
char *pTestopt = NULL;
const char *pFuncpath = "/sfw/etc/rc.func";
- ex_try {
+ ex_try { /* Register and set configuration values */
val_reg(pConfig->pVal, RC_FNC_NAME, VAL_TYPE_PTR, RC_FNC_DESC, NULL);
val_set(pConfig->pVal, RC_FNC_NAME, pFuncpath);
val_get(pConfig->pVal, RC_FNC_NAME, &pTestopt);
- fprintf(stderr, "%s\n", pTestopt);
+ fprintf(stderr, "Hier!%s!\n", pTestopt);
}
ex_catch(Except) {
rethrow;
@@ -91,14 +91,14 @@
ex_t Except;
assert(pConfig);
- free(pConfig);
+ free(pConfig); /* Deallocate configuration */
+ pConfig = NULL; /* and clear its reference */
ex_try {
- val_destroy(pConfig->pVal);
- }
+ val_destroy(pConfig->pVal); /* Destroy the val instance and assume */
+ } /* that its reference is cleared also */
ex_catch(Except) {
rethrow;
- return(RC_THROW(RC_ERR_INT));
}
return(RC_THROW(RC_OK));
Index: ossp-pkg/rc/rc_option.c
RCS File: /v/ossp/cvs/ossp-pkg/rc/Attic/rc_option.c,v
rcsdiff -q -kk '-r1.3' '-r1.4' -u '/v/ossp/cvs/ossp-pkg/rc/Attic/rc_option.c,v' 2>/dev/null
--- rc_option.c 2002/02/13 19:19:28 1.3
+++ rc_option.c 2002/02/28 15:30:04 1.4
@@ -31,136 +31,16 @@
#include "rc.h"
#include "rc_private.h"
-#include "rc_option.h" /* Option operations rely on popt */
-#include "rc_const.h" /* Strings and other constants */
-/* Third party headers for libraries linked in */
-#include "popt.h" /* OSSP popt options library */
-/* Unique identifier to use with OSSP ex library */
-const char ossprc_id[] = "OSSP rc";
-
-
-/* Loops through available options and fills a configuration if encountered */
-rc_return_t procOpts(char cOpt, char *pcCLI)
+/* Loop through available options */
+rc_return_t optionProcess(void)
{
- int nPos = 0; /* For tracking options */
-
- switch (cOpt) {
- case 'h':
- pcCLI[nPos++] = 'h';
- break;
- case 'V':
- pcCLI[nPos++] = 'V';
- break;
- case 'i':
- pcCLI[nPos++] = 'i';
- break;
- case 'q':
- pcCLI[nPos++] = 'q';
- break;
- }
-
return(RC_THROW(RC_OK));
}
-rc_return_t parseOpts(int argc, char *argv[])
+/* Parse command line options */
+rc_return_t optionParse(void)
{
- ex_t Except;
- int bCaught = 0;
- char pcBuf[BUFSIZ+1];
- int nBufpos = 0; /* For tracking options */
- char cOpt = 0; /* For argument parsing */
- char *szCLIBuf = NULL;
- int nIter = 0;
- popt_context optCon; /* Context for parsing options */
-
- struct popt_option optionsTable[] = {
- /* Long options with short keys but no arguments */
- { RC_USE_NAME, '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL },
- { RC_DBG_NAME, 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL },
- { RC_VER_NAME, 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL },
- { RC_EVL_NAME, 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL },
- { RC_HLP_NAME, 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL },
- { RC_INF_NAME, 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL },
- { RC_LBL_NAME, 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL },
- { RC_PRN_NAME, 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL },
- { RC_SIL_NAME, 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL },
- { RC_RAW_NAME, 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL },
- { RC_VRB_NAME, 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL },
- { RC_EXC_NAME, 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL },
-
- /* Single argument long options with short keys */
- {RC_LOC_NAME, 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx"},
- {RC_CNF_NAME, 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path"},
- {RC_FNC_NAME, 'f', POPT_ARG_STRING, 0, RC_FNC_VAL, RC_FNC_DESC, "path"},
- {RC_QRY_NAME, 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx"},
- {RC_TMP_NAME, 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path"},
-
- /* Single argument long options without short keys */
- { RC_OWN_NAME, 0, POPT_ARG_STRING, 0, RC_OWN_VAL, RC_OWN_DESC, "user" },
- { RC_GRP_NAME, 0, POPT_ARG_STRING, 0, RC_GRP_VAL, RC_GRP_DESC, "group"},
- { RC_MSK_NAME, 0, POPT_ARG_INT, 0, RC_MSK_VAL, RC_MSK_DESC, "umask"},
- { RC_ASS_NAME, 0, POPT_ARG_STRING, 0, RC_ASS_VAL, RC_ASS_DESC, "regx" },
- { RC_DEF_NAME, 0, POPT_ARG_STRING, 0, RC_DEF_VAL, RC_DEF_DESC, "regx" },
- { RC_REF_NAME, 0, POPT_ARG_STRING, 0, RC_REF_VAL, RC_REF_DESC, "regx" },
- { RC_PRM_NAME, 0, POPT_ARG_STRING, 0, RC_PRM_VAL, RC_PRM_DESC, "regx" },
- { RC_TRM_NAME, 0, POPT_ARG_STRING, 0, RC_TRM_VAL, RC_TRM_DESC, "regx" },
- { RC_NCF_NAME, 0, POPT_ARG_STRING, 0, RC_NCF_VAL, RC_NCF_DESC, "name" },
- { RC_CMN_NAME, 0, POPT_ARG_STRING, 0, RC_CMN_VAL, RC_CMN_DESC, "name" },
- { RC_DFL_NAME, 0, POPT_ARG_STRING, 0, RC_DFL_VAL, RC_DFL_DESC, "name" },
- { RC_ERR_NAME, 0, POPT_ARG_STRING, 0, RC_ERR_VAL, RC_ERR_DESC, "name" },
-
- POPT_AUTOHELP
- { NULL, 0, 0, NULL, 0 }
- };
-
- optCon = popt_getcontext(NULL, argc, (const char **)argv, optionsTable, 0);
- popt_setotheroptionhelp(optCon, "[options] ");
-
- if (argc < 2) {
- popt_printusage(optCon, stderr, 0);
- return(RC_THROW(RC_ERR_USE));
- }
-
- /* Now do options processing */
- while ((cOpt = popt_getnextopt(optCon)) >= 0)
- ex_try {
- procOpts(cOpt, pcBuf);
- }
- ex_catch(Except) {
- if ((rc_return_t)Except.ex_value != RC_ERR_USE)
- fprintf(stderr, "Nonusage exception: %d\n",\
- (rc_return_t)Except.ex_value);
- bCaught = 1;
- fprintf(stderr, "Class '%s' threw exception %d in %s:%s():%d.\n",\
- (char *)Except.ex_class, *(int *)Except.ex_value,\
- Except.ex_file, Except.ex_func, Except.ex_line);
- }
- if (!bCaught)
- fprintf(stderr, "parseOpts: No exceptions caught.\n");
-
- szCLIBuf = (char *)popt_getarg(optCon);
- if ((szCLIBuf == NULL)) {
- fprintf(stderr, "Please specify at least one rcfile and section.\n");
- popt_printusage(optCon, stderr, 0);
- return(RC_THROW(RC_ERR_USE));
- }
-
- if (cOpt < -1) {
- /* An error occurred during option processing */
- fprintf(stderr, "%s: %s\n",
- popt_badoption(optCon, POPT_BADOPTION_NOALIAS),
- popt_strerror(cOpt));
- return(RC_THROW(RC_ERR_INT));
- }
-
- /* Print out options, szCLIBuf chosen */
- fprintf(stderr, "Options chosen: ");
- for (nIter = 0; nIter < nBufpos ; nIter++)
- fprintf(stderr, "-%c ", pcBuf[nIter]);
- fprintf(stderr, "\nRun these commands: %s\n", szCLIBuf);
-
- popt_freecontext(optCon);
return(RC_THROW(RC_OK));
}
Index: ossp-pkg/rc/rc_private.h
RCS File: /v/ossp/cvs/ossp-pkg/rc/rc_private.h,v
rcsdiff -q -kk '-r1.3' '-r1.4' -u '/v/ossp/cvs/ossp-pkg/rc/rc_private.h,v' 2>/dev/null
--- rc_private.h 2002/02/13 19:19:28 1.3
+++ rc_private.h 2002/02/28 15:30:04 1.4
@@ -48,11 +48,14 @@
#include "dmalloc.h"
#endif
+/* GUID to use with OSSP ex library */
+const char g_szOSSPrc[];
+
/* Define the ability to throw OSSP ex exceptions */
#include "ex.h" /* OSSP ex exception handling library */
#define RC_THROW(rv) \
((rv) != RC_OK && (ex_catching && !ex_shielding) \
- ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv))
+ ? (ex_throw(g_szOSSPrc, NULL, (rv)), (rv)) : (rv))
#include "val.h"