Author: rmudgett
Date: Wed Jun 26 21:55:16 2013
New Revision: 393034

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=393034
Log:
Add config framework non-empty string validation requirement option.

Add config framework OPT_CHAR_ARRAY_T and OPT_STRINGFIELD_T non-empty
requirement option.  There are cases were you don't want a config option
string to be empty.  To require the option string to be non-empty, just
set the aco_option_register() flags parameter to non-zero.

* Updated some config framework enum aco_option_type comments.

Modified:
    trunk/include/asterisk/config_options.h
    trunk/main/config_options.c

Modified: trunk/include/asterisk/config_options.h
URL: 
http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/config_options.h?view=diff&rev=393034&r1=393033&r2=393034
==============================================================================
--- trunk/include/asterisk/config_options.h (original)
+++ trunk/include/asterisk/config_options.h Wed Jun 26 21:55:16 2013
@@ -265,7 +265,7 @@
         * struct test_item {
         *     int enabled;
         * };
-               aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, 
"no", OPT_BOOL_T, 1, FLDSET(struct test_item, enabled));
+        * aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, "no", 
OPT_BOOL_T, 1, FLDSET(struct test_item, enabled));
         * {endcode}
         */
        OPT_BOOL_T,
@@ -284,13 +284,15 @@
         * struct test_item {
         *     unsigned int flags;
         * };
-               aco_option_register(&cfg_info, "quiet", ACO_EXACT, my_types, 
"no", OPT_BOOLFLAG_T, 1, FLDSET(struct test_item, flags), MY_TYPE_ISQUIET);
-        * {endcode}
-        */
-
+        * aco_option_register(&cfg_info, "quiet", ACO_EXACT, my_types, "no", 
OPT_BOOLFLAG_T, 1, FLDSET(struct test_item, flags), MY_TYPE_ISQUIET);
+        * {endcode}
+        */
        OPT_BOOLFLAG_T,
 
-       /*! \brief Type for default option handler for character arrays
+       /*! \brief Type for default option handler for character array strings
+        * \note aco_option_register flags:
+        *   non-zero : String cannot be empty.
+        *   0        : String can be empty.
         * \note aco_option_register varargs:
         *   CHARFLDSET macro with a field of type char[]
         *
@@ -299,7 +301,7 @@
         * struct test_item {
         *     char description[128];
         * };
-        * aco_option_register(&cfg_info, "description", ACO_EXACT, my_types, 
"none", OPT_CHAR_ARRAY_T, CHARFLDSET(struct test_item, description));
+        * aco_option_register(&cfg_info, "description", ACO_EXACT, my_types, 
"none", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct test_item, description));
         * {endcode}
         */
        OPT_CHAR_ARRAY_T,
@@ -338,7 +340,7 @@
         *     double dub;
         * };
         * {code}
-        * aco_option_register(&cfg_info, "doubleopt", ACO_EXACT, my_types, 
"3", OPT_DOUBLE_T, FLDSET(struct test_item, dub));
+        * aco_option_register(&cfg_info, "doubleopt", ACO_EXACT, my_types, 
"3", OPT_DOUBLE_T, 0, FLDSET(struct test_item, dub));
         * {endcode}
         */
        OPT_DOUBLE_T,
@@ -393,7 +395,8 @@
 
        /*! \brief Type for default option handler for stringfields
         * \note aco_option_register flags:
-        *   none
+        *   non-zero : String cannot be empty.
+        *   0        : String can be empty.
         * aco_option_register varargs:
         *   STRFLDSET macro with the field being the field created by 
AST_STRING_FIELD
         *

Modified: trunk/main/config_options.c
URL: 
http://svnview.digium.com/svn/asterisk/trunk/main/config_options.c?view=diff&rev=393034&r1=393033&r2=393034
==============================================================================
--- trunk/main/config_options.c (original)
+++ trunk/main/config_options.c Wed Jun 26 21:55:16 2013
@@ -1342,6 +1342,10 @@
        ast_string_field *field = (const char **)(obj + opt->args[0]);
        struct ast_string_field_pool **pool = (struct ast_string_field_pool 
**)(obj + opt->args[1]);
        struct ast_string_field_mgr *mgr = (struct ast_string_field_mgr *)(obj 
+ opt->args[2]);
+
+       if (opt->flags && ast_strlen_zero(var->value)) {
+               return -1;
+       }
        ast_string_field_ptr_set_by_fields(*pool, *mgr, field, var->value);
        return 0;
 }
@@ -1384,7 +1388,7 @@
        return ast_parse_arg(var->value, PARSE_ADDR | opt->flags, field);
 }
 
-/*! \brief Default handler for doing noithing
+/*! \brief Default handler for doing nothing
  */
 static int noop_handler_fn(const struct aco_option *opt, struct ast_variable 
*var, void *obj)
 {
@@ -1400,6 +1404,9 @@
        char *field = (char *)(obj + opt->args[0]);
        size_t len = opt->args[1];
 
+       if (opt->flags && ast_strlen_zero(var->value)) {
+               return -1;
+       }
        ast_copy_string(field, var->value, len);
        return 0;
 }


--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to