#include <sys/queue.h>
#include <stdbool.h>
#include <stdint.h>
+#include <stdio.h>
#ifndef EC_COUNT_OF //XXX
#define EC_COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / \
/** If type is dict or list, the schema of the dict or list
* elements. Else must be NULL. */
const struct ec_config_schema *subschema;
-
- /** The subschema array len in case of dict (> 0) or list (set
- * to 1). Else must be 0. */
- size_t subschema_len;
-
};
TAILQ_HEAD(ec_config_list, ec_config);
* Validate a configuration schema array.
*
* @param schema
- * Pointer to the first element of the schema array.
- * @param schema_len
- * Length of the schema array.
+ * Pointer to the first element of the schema array. The array
+ * must be terminated by a sentinel entry (type == EC_CONFIG_TYPE_NONE).
* @return
* 0 if the schema is valid, or -1 on error (errno is set).
*/
-int ec_config_schema_validate(const struct ec_config_schema *schema,
- size_t schema_len);
+int ec_config_schema_validate(const struct ec_config_schema *schema);
/**
* Dump a configuration schema array.
* @param out
* Output stream on which the dump will be sent.
* @param schema
- * Pointer to the first element of the schema array.
- * @param schema_len
- * Length of the schema array.
+ * Pointer to the first element of the schema array. The array
+ * must be terminated by a sentinel entry (type == EC_CONFIG_TYPE_NONE).
+ */
+void ec_config_schema_dump(FILE *out, const struct ec_config_schema *schema);
+
+/**
+ * Check if a key name is reserved in a config dict.
+ *
+ * Some key names are reserved and should not be used in configs.
+ *
+ * @param name
+ * The name of the key to test.
+ * @return
+ * True if the key name is reserved and must not be used, else false.
+ */
+bool ec_config_key_is_reserved(const char *name);
+
+/**
+ * Array of reserved key names.
*/
-void ec_config_schema_dump(FILE *out, const struct ec_config_schema *schema,
- size_t schema_len);
+extern const char *ec_config_reserved_keys[];
/* config */
+/**
+ * Get the type of the configuration.
+ *
+ * @param config
+ * The configuration.
+ * @return
+ * The configuration type.
+ */
+enum ec_config_type ec_config_get_type(const struct ec_config *config);
+
/**
* Create a boolean configuration value.
*
* @param dict
* A hash table configuration to validate.
* @param schema
- * Pointer to the first element of the schema array.
- * @param schema_len
- * Length of the schema array.
+ * Pointer to the first element of the schema array. The array
+ * must be terminated by a sentinel entry (type == EC_CONFIG_TYPE_NONE).
* @return
* 0 on success, -1 on error (errno is set).
*/
int ec_config_validate(const struct ec_config *dict,
- const struct ec_config_schema *schema,
- size_t schema_len);
+ const struct ec_config_schema *schema);
/**
* Set a value in a hash table configuration
/**
* Get configuration value.
*/
-struct ec_config *ec_config_get(const struct ec_config *config,
+struct ec_config *ec_config_dict_get(const struct ec_config *config,
const char *key);
/**
int ec_config_cmp(const struct ec_config *value1,
const struct ec_config *value2);
+/**
+ * Duplicate a configuration.
+ *
+ * @param config
+ * The configuration to duplicate.
+ * @return
+ * The duplicated configuration, or NULL on error (errno is set).
+ */
+struct ec_config *
+ec_config_dup(const struct ec_config *config);
+
/**
* Dump a configuration.
*