cfparser: CF_UINT
authorMarko Kreen <markokr@gmail.com>
Wed, 18 Jul 2012 18:06:01 +0000 (21:06 +0300)
committerMarko Kreen <markokr@gmail.com>
Wed, 18 Jul 2012 18:06:01 +0000 (21:06 +0300)
Support 'unsigned int' variables.

usual/cfparser.c
usual/cfparser.h

index b03aa68feff59c16bcc125d65a48a0725530d260..9ce26e6af885e6f41a996cec4a6b2789965ef8e5 100644 (file)
@@ -365,6 +365,24 @@ bool cf_set_int(struct CfValue *cv, const char *value)
        return true;
 }
 
+bool cf_set_uint(struct CfValue *cv, const char *value)
+{
+       unsigned int *ptr = cv->value_p;
+       char *end;
+       unsigned long val;
+
+       errno = 0;
+       val = strtoul(value, &end, 0);
+       if (end == value || *end != 0) {
+               /* reject partial parse */
+               if (!errno)
+                       errno = EINVAL;
+               return false;
+       }
+       *ptr = val;
+       return true;
+}
+
 bool cf_set_str(struct CfValue *cv, const char *value)
 {
        char **dst_p = cv->value_p;
@@ -494,6 +512,13 @@ const char *cf_get_int(struct CfValue *cv)
        return cv->buf;
 }
 
+const char *cf_get_uint(struct CfValue *cv)
+{
+       unsigned int *p = cv->value_p;
+       snprintf(cv->buf, cv->buflen, "%u", *p);
+       return cv->buf;
+}
+
 const char *cf_get_time_double(struct CfValue *cv)
 {
        double *p = cv->value_p;
index d3f0889468d560e418c66bb528e3e81afbce1987..a8c65b5133fbb4d3ba05c2286e3995b084da841a 100644 (file)
@@ -145,6 +145,8 @@ bool cf_set_str(struct CfValue *cv, const char *value);
 bool cf_set_filename(struct CfValue *cv, const char *value);
 /** Setter for int */
 bool cf_set_int(struct CfValue *cv, const char *value);
+/** Setter for unsigned int */
+bool cf_set_uint(struct CfValue *cv, const char *value);
 /** Setter for time-usec */
 bool cf_set_time_usec(struct CfValue *cv, const char *value);
 /** Setter for time-double */
@@ -156,6 +158,8 @@ bool cf_set_lookup(struct CfValue *cv, const char *value);
 const char *cf_get_str(struct CfValue *cv);
 /** Getter for int */
 const char *cf_get_int(struct CfValue *cv);
+/** Getter for unsigned int */
+const char *cf_get_uint(struct CfValue *cv);
 /** Getter for time-usec */
 const char *cf_get_time_usec(struct CfValue *cv);
 /** Getter for time-double */
@@ -176,6 +180,8 @@ const char *cf_get_lookup(struct CfValue *cv);
 #define CF_FILE        { cf_set_filename, cf_get_str }
 /** Ops for integer */
 #define CF_INT { cf_set_int, cf_get_int }
+/** Ops for unsigned integer */
+#define CF_UINT { cf_set_uint, cf_get_uint }
 /** Ops for boolean */
 #define CF_BOOL        { cf_set_int, cf_get_int }
 /** Ops for time as usec */