This patch use new implementation. In cgrulesengd.c, static variable template_files is used to save all config files, i.e. /etc/cgconfig.conf and /etc/cgconfig.d/*. This list of files is then passed to cgroup_templates_cache_set_source_files, which saves files to template_files in config.c module. This list is accessed through invocation of cgroup_init_templates_cache_from_files and cgroup_reload_templates_cache_from_files, which can access variables only from config.c, thus presenting cgroup_templates_cache_set_source_files function. At the end, this list is set free.
Signed-off-by: jchaloup <jchal...@redhat.com> --- src/daemon/cgrulesengd.c | 40 ++++++++++++++++++++++++++++++++++++---- src/libcgroup-internal.h | 3 +++ src/tools/tools-common.h | 2 +- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c index 367b898..5b6d513 100644 --- a/src/daemon/cgrulesengd.c +++ b/src/daemon/cgrulesengd.c @@ -34,6 +34,7 @@ #include "libcgroup.h" #include "cgrulesengd.h" #include "../libcgroup-internal.h" +#include "../tools/tools-common.h" #include <errno.h> #include <stdarg.h> @@ -59,6 +60,9 @@ #define NUM_PER_REALLOCATIOM (100) +/* list of config files from /etc/cgconfig.conf and /etc/cgconfig.d/ */ +static struct cgroup_string_list template_files; + /* Log file, NULL if logging to file is disabled */ FILE* logfile; @@ -1180,6 +1184,25 @@ int main(int argc, char *argv[]) } /* Ask libcgroup to load the configuration rules. */ + ret = cgroup_string_list_init(&template_files, + CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE); + if (ret) { + fprintf(stderr, "%s: cannot init file list, out of memory?\n", + argv[0]); + goto finished; + } + /* first add CGCONFIG_CONF_FILE into file list */ + ret = cgroup_string_list_add_item(&template_files, CGCONFIG_CONF_FILE); + if (ret) { + fprintf(stderr, "%s: cannot add file to list, out of memory?\n" + , argv[0]); + goto finished; + } + + /* then read CGCONFIG_CONF_DIR directory for additional config files */ + cgroup_string_list_add_directory(&template_files, CGCONFIG_CONF_DIR, + argv[0]); + if ((ret = cgroup_init_rules_cache()) != 0) { fprintf(stderr, "Error: libcgroup failed to initialize rules" "cache from %s. %s\n", CGRULES_CONF_FILE, @@ -1188,11 +1211,18 @@ int main(int argc, char *argv[]) } /* ask libcgroup to load template rules as well */ - ret = cgroup_init_templates_cache(CGCONFIG_CONF_FILE); + cgroup_templates_cache_set_source_files(&template_files); + int fileindex; + ret = cgroup_init_templates_cache_from_files(&fileindex); if (ret != 0) { - fprintf(stderr, "Error: libcgroup failed to initialize teplate"\ - "rules from %s. %s\n", CGCONFIG_CONF_FILE, - cgroup_strerror(ret)); + if (fileindex < 0) { +#define DE1 "Error: Template source files have not been set\n" + fprintf(stderr, DE1); + } else { +#define DE2 "Error: Failed to initialize template rules from %s. %s\n" + fprintf(stderr, DE2, template_files.items[fileindex], + cgroup_strerror(-ret)); + } goto finished; } @@ -1262,5 +1292,7 @@ finished: if (logfile && logfile != stdout) fclose(logfile); + cgroup_string_list_free(&template_files); + return ret; } diff --git a/src/libcgroup-internal.h b/src/libcgroup-internal.h index 4c0f46c..c128788 100644 --- a/src/libcgroup-internal.h +++ b/src/libcgroup-internal.h @@ -48,6 +48,9 @@ __BEGIN_DECLS #define CGCONFIG_CONF_FILE "/etc/cgconfig.conf" +/* Minimum number of file in template file list for cgrulesengd */ +#define CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE 4 +#define CGCONFIG_CONF_DIR "/etc/cgconfig.d" #define CGRULES_CONF_FILE "/etc/cgrules.conf" #define CGRULES_MAX_FIELDS_PER_LINE 3 diff --git a/src/tools/tools-common.h b/src/tools/tools-common.h index e05465f..c723eb4 100644 --- a/src/tools/tools-common.h +++ b/src/tools/tools-common.h @@ -20,7 +20,7 @@ #include "config.h" #include <libcgroup.h> -#include <libcgroup-internal.h> +#include "../libcgroup-internal.h" #define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, x) #define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, x) ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel