--- rc_cliopt.c 2002/04/11 16:52:45 1.2
+++ rc_cliopt.c 2002/04/12 19:15:12 1.3
@@ -36,46 +36,7 @@
#include "rc_config.h"
#include "popt.h" /* OSSP popt options library */
-static char *s_szOptuples[RC_NUMOPTS]; /* Option name value tuples */
-static 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 }
-};
+static char *m_szOptuples[RC_NUMOPTS]; /* Option name value tuples */
/***************************************
@@ -94,9 +55,9 @@
/* s_pBintab->pOptlist->pvData = NULL;
s_pBintab->pOptlist->pvNext = NULL;*/
- memset(s_szOptuples, NULL, sizeof(s_szOptuples));
+ memset(m_szOptuples, NULL, sizeof(m_szOptuples));
-TRACE("cliopt constructed.");
+TRACE("cliopt constructed.\n");
return(RC_THROW(RC_OK));
}
@@ -106,16 +67,10 @@
***************************************/
const char *clioptGetval(rc_opt_t Optname)
{
- ex_t Except;
+ if (!(Optname < RC_NUMOPTS)) /* Validate option range */
+ RC_THROW(RC_ERR_USE);
- assert(Optname < RC_NUMOPTS); /* Invalidate if nonexistent option */
- ex_try {
- return((const char *)s_szOptuples[Optname]);
- }
- ex_catch(Except) {
- rethrow;
- }
- return (NULL); /* Not reached */
+ return((const char *)m_szOptuples[Optname]);
}
/***************************************
@@ -136,95 +91,95 @@
rc_return_t clioptProcess(int cliOption)
{
switch (cliOption) {
- case RC_USE_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_DBG_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_VER_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_EVL_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_HLP_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_INF_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_LBL_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_PRN_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_SIL_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_RAW_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_VRB_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_EXC_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_LOC_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_CNF_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_FNC_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_QRY_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_TMP_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_OWN_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_GRP_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_MSK_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_ASS_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_DEF_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_REF_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_PRM_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_TRM_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_NCF_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_CMN_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_DFL_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- case RC_ERR_VAL:
- s_szOptuples[cliOption] = strdup("1");
- break;
- default :
- break;
+ case RC_USE_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_DBG_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_VER_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_EVL_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_HLP_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_INF_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_LBL_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_PRN_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_SIL_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_RAW_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_VRB_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_EXC_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_LOC_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_CNF_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_FNC_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_QRY_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_TMP_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_OWN_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_GRP_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_MSK_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_ASS_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_DEF_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_REF_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_PRM_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_TRM_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_NCF_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_CMN_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_DFL_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ case RC_ERR_VAL:
+ m_szOptuples[cliOption] = strdup("1");
+ break;
+ default :
+ break;
}
return(RC_THROW(RC_OK));
@@ -236,6 +191,47 @@
***************************************/
rc_return_t clioptParse(int argc, char *argv[])
{
+ static 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" },
+
+ /* Special stuff */
+ POPT_AUTOHELP
+ { NULL, 0, 0, NULL, 0 }
+ };
+
ex_t Except;
char cliOpt = 0; /* For argument parsing */
char *szCLIBuf = NULL;
@@ -304,19 +300,17 @@
rethrow;
}*/
-for (i = 0; i < RC_NUMOPTS; i++)
- if (s_szOptuples[i])
- TRACEL(i);
-
- for (i = 0; i < RC_NUMOPTS; i++) /* Free the tuple */
- s_szOptuples[i] ? free(s_szOptuples[i]) : RC_NOP; /* or do nothing */
+ for (i = 0; i < RC_NUMOPTS; i++) /* Free the tuple */
+ m_szOptuples[i] ? free(m_szOptuples[i]) : RC_NOP; /* or do nothing */
- memset(s_szOptuples, NULL, sizeof(s_szOptuples)); /* Clear tuples */
+ memset(m_szOptuples, NULL, sizeof(m_szOptuples)); /* Clear tuples */
+/* FIXME BEGIN DEBUG */
for (i = 0; i < RC_NUMOPTS; i++)
- if (s_szOptuples[i])
- TRACE("Problem! Destructor failed!");
-TRACE("cliopt destructed.");
+ if (m_szOptuples[i])
+ TRACE("Problem! Destructor failed!\n");
+TRACE("cliopt destructed.\n");
+/* FIXME END DEBUG */
return(RC_THROW(RC_OK));
}
|