ossp-pkg/rc/rc_opt.c
1.1
/* OSSP rc - Run-command processor
** Copyright (c) 2002 Ralf S. Engelschall
** Copyright (c) 2002 Cable & Wireless Deutschland GmbH
** Copyright (c) 2002 The OSSP Project <http://www.ossp.org/>
**
** 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 <stdio.h>
#include <stdlib.h>
#include "rc.h"
#include "rc_opt.h"
/***************************************
* optConstruct(void) *
* Construct an option *
***************************************/
rc_return_t clioptConstruct(void)
{
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;
short nVer = 0;
if (s_pInst != NULL) {
ex_try {
}
ex_catch(Except) {
rethrow;
}
}
else {
RC_THROW(RC_ERR_USE);
return(NULL);
}
return(nVer);
}
/***************************************
* 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));
}