head 1.10; access; symbols OSSP_RC_0_7_3:1.10 OSSP_RC_0_7_2:1.10 OSSP_RC_0_7_1:1.9 OSSP_RC_ALPHA_06:1.7 OSSP_RC_EXBROKEN:1.6; locks; strict; comment @ * @; 1.10 date 2003.07.08.15.09.50; author mlelstv; state Exp; branches; next 1.9; 1.9 date 2003.07.07.13.30.51; author ms; state Exp; branches; next 1.8; 1.8 date 2003.07.07.12.55.42; author ms; state Exp; branches; next 1.7; 1.7 date 2003.05.26.16.03.57; author ms; state Exp; branches; next 1.6; 1.6 date 2003.05.19.19.03.41; author ms; state Exp; branches; next 1.5; 1.5 date 2002.06.26.14.11.16; author ms; state Exp; branches; next 1.4; 1.4 date 2002.04.24.16.47.07; author ms; state Exp; branches; next 1.3; 1.3 date 2002.04.11.16.52.45; author ms; state Exp; branches; next 1.2; 1.2 date 2002.04.09.17.06.17; author ms; state Exp; branches; next 1.1; 1.1 date 2002.04.09.17.01.29; author ms; state Exp; branches; next ; desc @@ 1.10 log @flush audit comments and changes @ text @/* OSSP rc - Run-Command Processor ** Copyright (c) 2002-2003 Ralf S. Engelschall ** Copyright (c) 2002-2003 Cable & Wireless Deutschland GmbH ** Copyright (c) 2002-2003 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_opt.c: Run-Command Processor ISO C source file */ #include #include #include #include "rc.h" /* FIXME mlelstv -- why Construct/Destruct vs. New/Delete ? */ /*************************************** * optConstruct(rc_opt_t **) * * Construct an option * ***************************************/ rc_return_t optConstruct(rc_opt_t **ppOption) { assert(*ppOption == NULL); /* Error if constructed already */ *ppOption = malloc(sizeof(**ppOption)); /* Allocate an option instance */ if (!*ppOption) return(RC_THROW(RC_ERR_MEM)); (*ppOption)->szName = NULL; /* We don't know how much to */ (*ppOption)->szVal = NULL; /* allocate, so do it later */ return(RC_THROW(RC_OK)); } /*************************************** * optGetXXXX(rc_opt_t *, char **) * * Option accessors * ***************************************/ rc_return_t optGetname(rc_opt_t *pOption, char **pszName) { assert(pOption && pOption->szName); /* FIXME mlelstv -- why non-shared read ? */ if (!(*pszName = strdup(pOption->szName))) /* Get name from option */ return(RC_THROW(RC_ERR_MEM)); else return(RC_THROW(RC_OK)); } rc_return_t optGetval(rc_opt_t *pOption, char **pszVal) { assert(pOption && pOption->szVal); /* FIXME mlelstv -- why non-shared read ? */ if (!(*pszVal = strdup(pOption->szVal))) /* Get value from option */ return(RC_THROW(RC_ERR_MEM)); else return(RC_THROW(RC_OK)); } /*************************************** * optSetXXXX(rc_opt_t *, const char *) * * Option accessors * ***************************************/ rc_return_t optSetname(rc_opt_t *pOption, const char *kszName) { if (pOption->szName) /* Guard against leaks */ free(pOption->szName); /* if resetting name */ if (!(pOption->szName = strdup(kszName))) /* Set name of option */ return(RC_THROW(RC_ERR_MEM)); else return(RC_THROW(RC_OK)); } rc_return_t optSetval(rc_opt_t *pOption, const char *kszVal) { if (pOption->szVal) /* Guard against leaks */ free(pOption->szVal); /* if resetting value */ if (!(pOption->szVal = strdup(kszVal))) /* Set value of option */ return(RC_THROW(RC_ERR_MEM)); else return(RC_THROW(RC_OK)); } /*************************************** * optDestruct(rc_opt_t **) * * Destruct a command line option * ***************************************/ rc_return_t optDestruct(rc_opt_t **ppOption) { assert(*ppOption); /* Error if not constructed */ if ((*ppOption)->szName) /* Might not be mallocd yet */ free((*ppOption)->szName); if ((*ppOption)->szVal) /* Might not be mallocd yet */ free((*ppOption)->szVal); free(*ppOption); /* Deallocate option and */ *ppOption = NULL; /* clear its reference */ return(RC_THROW(RC_OK)); } @ 1.9 log @More header corrections and improvements. @ text @d36 1 d62 1 d72 1 d109 1 a109 1 ex_t Except; d111 6 a116 11 assert(*ppOption); /* Error if not constructed */ try { if ((*ppOption)->szName) /* Might not be mallocd yet */ free((*ppOption)->szName); if ((*ppOption)->szVal) /* Might not be mallocd yet */ free((*ppOption)->szVal); free(*ppOption); /* Deallocate option and */ *ppOption = NULL; /* clear its reference */ } catch(Except) rethrow; @ 1.8 log @Correct and update copyrights and source headers. @ text @d1 1 a1 1 /* OSSP rc - Run-command processor d6 1 a6 1 ** This file is part of OSSP rc, a portable Run-command processor d27 1 a27 1 ** rc_opt.c: Run-command processor ISO C source file @ 1.7 log @Preliminary exception handling repairs. @ text @d2 3 a4 3 ** Copyright (c) 2002 Ralf S. Engelschall ** Copyright (c) 2002 Cable & Wireless Deutschland GmbH ** Copyright (c) 2002 The OSSP Project @ 1.6 log @Clean up what doesn't exist anymore. @ text @d117 1 a117 1 catch(Except) { a118 1 } @ 1.5 log @Intermediate committal, lots of additions, compiles and works very limited. @ text @a34 1 #include "rc_opt.h" @ 1.4 log @Command line option configuration and some processor operations. @ text @d110 1 a110 1 ex_try { d118 1 a118 1 ex_catch(Except) { @ 1.3 log @Flush the toilet. @ text @d81 1 a81 1 rc_return_t optSetname(rc_opt_t *pOption, const char *cszName) d85 1 a85 1 if (!(pOption->szName = strdup(cszName))) /* Set name of option */ d91 1 a91 1 rc_return_t optSetval(rc_opt_t *pOption, const char *cszVal) d95 1 a95 1 if (!(pOption->szVal = strdup(cszVal))) /* Set value of option */ @ 1.2 log @Remove cut and paste crap. @ text @d32 1 d39 40 a78 1 * optGetXXXX(void) * d81 25 a105 1 short optGetvers(void) d107 14 a120 1 short nVer = 0; d122 1 a122 1 return(nVer); @ 1.1 log @Add new configuration pieces. @ text @d38 2 a39 2 * optConstruct(void) * * Construct an option * d41 1 a41 1 rc_return_t clioptConstruct(void) a42 27 ex_t Except; if (s_pInst == NULL) { /* If we don't have one */ s_pInst = malloc(sizeof(s_pInst)); /* yet, then allocate */ if (!s_pInst) /* a cliopt instance */ return(RC_THROW(RC_ERR_MEM)); s_pInst->nLocks = 0; ex_try { /* Make a cliopt instance */ } ex_catch(Except) { rethrow; } } s_pInst->nLocks++; /* FIXME not threadsafe */ return(RC_THROW(RC_OK)); } /*************************************** * clioptGetXXXX(void) * * Command line option accessors * ***************************************/ short clioptGetvers(void) { ex_t Except; a44 13 if (s_pInst != NULL) { ex_try { } ex_catch(Except) { rethrow; } } else { RC_THROW(RC_ERR_USE); return(NULL); } a45 27 } /*************************************** * clioptDestruct(void) * * Destruct a command line option * ***************************************/ rc_return_t clioptDestruct(void) { ex_t Except; if (s_pInst) { if (!(--s_pInst->nLocks)) { /* If nLocks is 0, dealloc */ ex_try { /* FIXME, not thread-safe */ } ex_catch(Except) { rethrow; } free(s_pInst); /* Deallocate cliopt and */ s_pInst = NULL; /* clear its reference */ } } else return(RC_THROW(RC_ERR_USE)); return(RC_THROW(RC_OK)); @