ossp-pkg/rc/rc_opt.c 1.2 -> 1.3
--- rc_opt.c 2002/04/09 17:06:17 1.2
+++ rc_opt.c 2002/04/11 16:52:45 1.3
@@ -29,18 +29,95 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "rc.h"
#include "rc_opt.h"
/***************************************
-* optGetXXXX(void) *
+* 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 *
***************************************/
-short optGetvers(void)
+rc_return_t optGetname(rc_opt_t *pOption, char **pszName)
{
- short nVer = 0;
+ assert(pOption && pOption->szName);
+ 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);
+ 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 *cszName)
+{
+ if (pOption->szName) /* Guard against leaks */
+ free(pOption->szName); /* if resetting name */
+ if (!(pOption->szName = strdup(cszName))) /* 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 *cszVal)
+{
+ if (pOption->szVal) /* Guard against leaks */
+ free(pOption->szVal); /* if resetting value */
+ if (!(pOption->szVal = strdup(cszVal))) /* 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)
+{
+ ex_t Except;
+
+ assert(*ppOption); /* Error if not constructed */
+ ex_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 */
+ }
+ ex_catch(Except) {
+ rethrow;
+ }
- return(nVer);
+ return(RC_THROW(RC_OK));
}
|
|