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