OSSP CVS Repository

ossp - Difference in ossp-pkg/rc/rc_opt.c versions 1.2 and 1.3
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [History

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));
 }

CVSTrac 2.0.1