head 1.6; access; symbols; locks; strict; comment @ * @; 1.6 date 2002.04.22.15.22.39; author ms; state dead; branches; next 1.5; 1.5 date 2002.03.26.17.11.06; author ms; state Exp; branches; next 1.4; 1.4 date 2002.02.28.15.30.04; author ms; state Exp; branches; next 1.3; 1.3 date 2002.02.13.19.19.28; author ms; state Exp; branches; next 1.2; 1.2 date 2002.02.08.18.36.40; author ms; state Exp; branches; next 1.1; 1.1 date 2002.02.07.12.38.32; author ms; state Exp; branches; next ; desc @@ 1.6 log @Remove obsolete specs and implementations. @ text @/* OSSP rc - Run-command processor ** Copyright (c) 2002 Ralf S. Engelschall ** Copyright (c) 2002 Cable & Wireless Deutschland GmbH ** Copyright (c) 2002 The OSSP Project ** ** This file is part of OSSP rc, a portable Run-command processor ** which can be found at http://www.ossp.org/pkg/lib/rc/ ** ** Permission to use, copy, modify, and distribute this software for ** any purpose with or without fee is hereby granted, provided that ** the above copyright notice and this permission notice appear in all ** copies. ** ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR ** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. ** ** rc_option.c: Run-command processor ISO C source file */ #include #include "rc.h" #include "rc_private.h" /* Loop through available options */ rc_return_t optionProcess(void) { return(RC_THROW(RC_OK)); } /* Parse command line options */ rc_return_t optionParse(void) { return(RC_THROW(RC_OK)); } @ 1.5 log @Vacation flush, mostly build configuration details. Its not building very clean right now. @ text @@ 1.4 log @Cleanup and structuring. @ text @d1 2 a2 1 /* rc - OSSP Run-command processor a4 1 ** Copyright (c) 2002 Ralf S. Engelschall d7 1 a7 1 ** which can be found at http://www.ossp.org/pkg/rc/ @ 1.3 log @Small corrections in both logic and build configuration. PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @a33 2 #include "rc_option.h" /* Option operations rely on popt */ #include "rc_const.h" /* Strings and other constants */ a34 2 /* Third party headers for libraries linked in */ #include "popt.h" /* OSSP popt options library */ d36 2 a37 6 /* 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) a38 17 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; } d42 2 a43 1 rc_return_t parseOpts(int argc, char *argv[]) a44 96 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); @ 1.2 log @Further abstraction and building in of the configuration logic. We now store configuration variables using OSSP val, also. PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @a74 1 char *szFuncfile = NULL; /* Rc.func file name and location */ d96 1 a96 4 {RC_FNC_NAME, 'f', POPT_ARG_STRING, &szFuncfile,\ RC_FNC_VAL, RC_FNC_DESC, "path"}, a161 2 if (szFuncfile) fprintf(stderr, "-f %s ", szFuncfile); @ 1.1 log @Abstract rc's config according to design. PR: Submitted by: Reviewed by: Approved by: Obtained from: @ text @d33 3 a35 6 #include "rc_option.h" /* Values and other for popt */ #include "rc_const.h" /* Strings and other constants */ #ifdef HAVE_CONFIG_H #include "rc_config.h" #endif a37 1 #include "ex.h" /* OSSP ex exception library */ a39 5 /* Define the ability to throw OSSP ex exceptions */ #define RC_THROW(rv) \ ( (rv) != RC_OK && (ex_catching && !ex_shielding) \ ? (ex_throw(ossprc_id, NULL, (rv)), (rv)) : (rv)) d44 24 a67 1 rc_return_t parseopts(int argc, char *argv[]) d69 4 a73 1 int iBufpos = 0; /* For tracking options */ a76 1 char pcBuf[BUFSIZ+1]; d81 12 a92 12 { "usage", '?', POPT_ARG_NONE, 0, RC_USE_VAL, RC_USE_DESC, NULL }, { "debug", 'd', POPT_ARG_NONE, 0, RC_DBG_VAL, RC_DBG_DESC, NULL }, { "version", 'V', POPT_ARG_NONE, 0, RC_VER_VAL, RC_VER_DESC, NULL }, { "eval", 'e', POPT_ARG_NONE, 0, RC_EVL_VAL, RC_EVL_DESC, NULL }, { "help", 'h', POPT_ARG_NONE, 0, RC_HLP_VAL, RC_HLP_DESC, NULL }, { "info", 'i', POPT_ARG_NONE, 0, RC_INF_VAL, RC_INF_DESC, NULL }, { "labels", 'l', POPT_ARG_NONE, 0, RC_LBL_VAL, RC_LBL_DESC, NULL }, { "print", 'p', POPT_ARG_NONE, 0, RC_PRN_VAL, RC_PRN_DESC, NULL }, { "silent", 's', POPT_ARG_NONE, 0, RC_SIL_VAL, RC_SIL_DESC, NULL }, { "raw", 'r', POPT_ARG_NONE, 0, RC_RAW_VAL, RC_RAW_DESC, NULL }, { "verbose", 'v', POPT_ARG_NONE, 0, RC_VRB_VAL, RC_VRB_DESC, NULL }, { "exec", 'x', POPT_ARG_NONE, 0, RC_EXC_VAL, RC_EXC_DESC, NULL }, d95 8 a102 6 { "locate", 'L', POPT_ARG_STRING, 0, RC_LOC_VAL, RC_LOC_DESC, "regx" }, { "conf", 'c', POPT_ARG_STRING, 0, RC_CNF_VAL, RC_CNF_DESC, "path" }, { "func", 'f', POPT_ARG_STRING, &szFuncfile,\ RC_FNC_VAL, RC_FNC_DESC, "path" }, { "query", 'q', POPT_ARG_STRING, 0, RC_QRY_VAL, RC_QRY_DESC, "varx" }, { "tmp", 't', POPT_ARG_STRING, 0, RC_TMP_VAL, RC_TMP_DESC, "path" }, d105 12 a116 24 { "RequireOwner", 0, POPT_ARG_STRING, 0,\ RC_OWN_VAL, RC_OWN_DESC, "user" }, { "RequireGroup", 0, POPT_ARG_STRING, 0,\ RC_GRP_VAL, RC_GRP_DESC, "group" }, { "RequireUmask", 0, POPT_ARG_INT, 0,\ RC_MSK_VAL, RC_MSK_DESC, "umask" }, { "ParseEnvAss", 0, POPT_ARG_STRING, 0,\ RC_ASS_VAL, RC_ASS_DESC, "regx" }, { "ParseSectionDef", 0, POPT_ARG_STRING, 0,\ RC_DEF_VAL, RC_DEF_DESC, "regx" }, { "ParseSectionRef", 0, POPT_ARG_STRING, 0,\ RC_REF_VAL, RC_REF_DESC, "regx" }, { "ParseSectionParam", 0, POPT_ARG_STRING, 0,\ RC_PRM_VAL, RC_PRM_DESC, "regx" }, { "ParseTerminal", 0, POPT_ARG_STRING, 0,\ RC_TRM_VAL, RC_TRM_DESC, "regx" }, { "NameConfig", 0, POPT_ARG_STRING, 0,\ RC_NCF_VAL, RC_NCF_DESC, "name" }, { "NameCommon", 0, POPT_ARG_STRING, 0,\ RC_CMN_VAL, RC_CMN_DESC, "name" }, { "NameDefault", 0, POPT_ARG_STRING, 0,\ RC_DFL_VAL, RC_DFL_DESC, "name" }, { "NameError", 0, POPT_ARG_STRING, 0,\ RC_ERR_VAL, RC_ERR_DESC, "name" }, d131 12 a142 15 while ((cOpt = popt_getnextopt(optCon)) >= 0) { switch (cOpt) { case 'h': pcBuf[iBufpos++] = 'h'; break; case 'V': pcBuf[iBufpos++] = 'V'; break; case 'i': pcBuf[iBufpos++] = 'i'; break; case 'q': pcBuf[iBufpos++] = 'q'; break; } d144 2 d164 1 a164 1 for (nIter = 0; nIter < iBufpos ; nIter++) @